diff -Naur ns-3.25/AUTHORS ns-3.26/AUTHORS
--- ns-3.25/AUTHORS	2016-10-03 20:57:08.152248377 -0700
+++ ns-3.26/AUTHORS	2016-10-03 19:49:01.455389084 -0700
@@ -1,6 +1,7 @@
 John Abraham (john.abraham.in@gmail.com)
 Alexander Afanasyev (alexander.afanasyev@ucla.edu)
 Rohit Agarwal (mindprince@gmail.com)
+Piyush Aggarwal (piyush8311@gmail.com)
 Kirill Andreev (andreev@iitp.ru)
 Dean Armstrong (deanarm@gmail.com)
 Stefano Avallone (stefano.avallone@unina.it)
@@ -86,6 +87,7 @@
 Joe Kopena (tjkopena@cs.drexel.edu)
 Christopher Kosecki (christopher.l.kosecki.ctr@mail.mil)
 Aleksey Kovalenko (kovalenko@iitp.ru)
+Hossam Khader (hossamkhader@gmail.com)
 Alexander Krotov (ilabdsf@yandex.ru)
 Mathieu Lacage (mathieu.lacage@inria.fr)
 Emmanuelle Laprise (emmmanuelle.laprise@bluekazoo.ca)
@@ -95,6 +97,7 @@
 Björn Lichtblau (lichtbla@informatik.hu-berlin.de)
 Timo Lindhorst (tlnd@online.de)
 Erwan Livolant (erwan.livolant@inria.fr)
+Andrea Lupia (alupia@dimes.unical.it)
 Keith Ma (keith.nwsuaf@gmail.com)
 Federico Maguolo (maguolof@dei.unipd.it)
 Antti Makela (zarhan@cc.hut.fi)
@@ -110,6 +113,7 @@
 Marco Miozzo (mmiozzo@cttc.es)
 Faker Moatamri (faker.moatamri@inria.fr)
 Edvin Močibob (edvin.mocibob@gmail.com)
+Amir Modarresi (amodarresi@ittc.ku.edu)
 Mike Moreton (mjvm_ns@hotmail.com)
 Michele Muccio (michelemuccio@virgilio.it)
 Esteban Municio (esteban.municio@urjc.es)
@@ -133,6 +137,7 @@
 Fernando Pereira (ferdonfeup@gmail.com)
 Colin Perkins (csp@csperkins.org) 
 Giuseppe Piro (g.piro@poliba.it)
+Randall Plate (rplate@spawar.navy.mil)
 Yana Podkosova (yanapdk@rambler.ru)
 Ovidiu Poncea (ovidiu.poncea@cs.pub.ro)
 Vikas Pushkar (vikaskupushkar@gmail.com)
@@ -152,6 +157,7 @@
 Providence Salumu Munga (Providence.Salumu@gmail.com, Providence.Salumu_Munga@it-sudparis.eu)
 Francisco Javier Sánchez-Roselly (fnavarro@ujaen.es)
 Siddharth Santurkar (siddharth.santurkar@ieee.org)
+Robert R. Schmidt (rschmi@gmx.net)
 Florian Schmidt (Florian.Schmidt@cs.rwth-aachen.de)
 Guillaume Seguin (guillaume.seguin@inria.fr)
 Ioannis Selinis (selinis.g@gmail.com)
@@ -189,3 +195,4 @@
 Yoshihiko Yazawa (yoshiyaz@gmail.com)
 Dizhi Zhou (dizhi.zhou@gmail.com)
 Gaurav Sathe (gaurav.sathe@tcs.com)
+Ali Rostami (a.rostami@rutgers.edu)
diff -Naur ns-3.25/bindings/python/wscript ns-3.26/bindings/python/wscript
--- ns-3.25/bindings/python/wscript	2016-10-03 20:57:08.176248189 -0700
+++ ns-3.26/bindings/python/wscript	2016-10-03 19:49:01.486388853 -0700
@@ -14,7 +14,7 @@
 # after = TaskGen.after
 
 # https://github.com/gjcarneiro/pybindgen
-REQUIRED_PYBINDGEN_VERSION = '0.17.0.post49+ng0e4e3bc'
+REQUIRED_PYBINDGEN_VERSION = '0.17.0.post57+nga6376f2'
 REQUIRED_PYGCCXML_VERSION = (0, 9, 5)
 
 RUN_ME=-3
diff -Naur ns-3.25/CHANGES.html ns-3.26/CHANGES.html
--- ns-3.25/CHANGES.html	2016-10-03 20:57:08.157248338 -0700
+++ ns-3.26/CHANGES.html	2016-10-03 19:49:01.461389039 -0700
@@ -51,6 +51,115 @@
 us a note on ns-developers mailing list.</p>
 
 <hr>
+<h1>Changes from ns-3.25 to ns-3.26</h1>
+<h2>New API:</h2>
+<ul>
+<li>A <b>SocketPriorityTag</b> is introduced to carry the packet priority. Such a tag
+    is added to packets by sockets that support this mechanism (UdpSocketImpl,
+    TcpSocketBase and PacketSocket). The base class Socket has a new SetPriority
+    method to set the socket priority. When the IPv4 protocol is used, the
+    priority is set based on the ToS. See the Socket options section of the
+    Network model for more information.
+</li>
+<li>A <b>WifiNetDevice::SelectQueue</b> method has been added to determine the user
+    priority of an MSDU. This method is called by the traffic control layer before
+    enqueuing a packet in the queue disc, if a queue disc is installed on
+    the outgoing device, or passing a packet to the device, otherwise. The
+    user priority is set to the three most significant bits of the DS field
+    (TOS field in case of IPv4 and Traffic Class field in case of IPv6). The
+    packet priority carried by the SocketPriorityTag is set to the user priority.
+</li>
+<li>The <b>PfifoFastQueueDisc</b> classifies packets into bands based on their priority.
+    See the pfifo_fast queue disc section of the Traffic Control Layer model
+    for more information.
+</li>
+<li>A new class <b>SpectrumWifiPhy</b> has been introduced that makes use of the 
+    Spectrum module.  Its functionality and API is currently very similar to that 
+    of the YansWifiPhy, especially because it reuses the same InterferenceHelper 
+    and ErrorModel classes (for this release).  Some example programs in the 
+    'examples/wireless/' directory, such as 'wifi-spectrum-per-example.cc', 
+    illustrate how the SpectrumWifiPhy class can be substituted for the default 
+    YansWifiPhy PHY model.
+</li>
+<li>We have added support for generating traces for the
+    <a href="https://wilseypa.github.io/desMetrics">DES Metrics</a> project.
+    These can be enabled by adding <tt>--enable-des-metrics</tt> at configuration;
+    you must also use <tt>CommandLine</tt> in your script.  See the API docs
+    for class <b>DesMetrics</b> for more details.
+</li>
+<li> The traffic control module now includes the <b>FQ-CoDel</b> and <b>PIE</b> queue disc 
+    models, and behavior corresponding to Linux <b>Byte Queue Limits (BQL)</b>.
+</li>
+<li> Several new TCP congestion control variants were introduced, including
+    <b>TCP Vegas, Scalable, Veno, Illinois, Bic, YeAH, and H-TCP</b> 
+    congestion control algorithms.
+</li>
+</ul>
+<h2>Changes to existing API:</h2>
+<ul>
+<li><b>SocketAddressTag</b> was a long-standing approach to approximate the POSIX
+    socket recvfrom behavior (i.e., to know the source address of a packet) 
+    without actually calling RecvFrom.  Experience with this revealed that
+    this option was difficult to use with tunnels (the new tag has to 
+    replace the old one).  Moreover, there is no real need 
+    to create a new API when there is a an existing one (i.e., RecvFrom).
+    As a consequence, SocketAddressTag has been completely removed from ns-3.
+    Users can use RecvFrom (for UDP), GetPeerName (for TCP), or similar. 
+</li>
+<li><b>InetSockAddress</b> can now store a ToS value, which can be set through its
+    SetTos method. The Bind and Connect methods of UDP (UdpSocketImpl) and
+    TCP (TcpSocketBase) sockets set the socket ToS value to the value provided
+    through the address input parameter (of type InetSockAddress). See the
+    Socket options section of the Network model for more information.
+</li>
+<li>The <b>QosTag</b> is removed as it has been superseded by the SocketPriorityTag.</li>
+<li>The <b>Ipv4L3Protocol::DefaultTos</b> attribute is removed.</li>
+<li>The attributes <b>YansWifiPhy::Frequency, YansWifiPhy::ChannelNumber, and 
+    YansWifiPhy::ChannelWidth</b>, and the related accessor methods, were moved to 
+    base class WifiPhy.  YansWifiPhy::GetChannelFrequencyMhz() was deleted.  
+    A new method WifiPhy::DefineChannelNumber () was added to allow users to 
+    define relationships between channel number, standard, frequency, and channel width.
+</li>
+<li>The class <b>WifiSpectrumValueHelper</b> has been refactored; previously it 
+    was an abstract base class supporting the WifiSpectrumValue5MhzFactory spectrum 
+    model.  It now contains various static member methods supporting the creation 
+    of power spectral densities with the granularity of a Wi-Fi OFDM subcarrier 
+    bandwidth.  The class <b>WifiSpectrumValue5MhzFactory</b> and its API remain but 
+    it is not subclassed.
+ </li>
+<li>A new Wifi method <b>InterferenceHelper::AddForeignSignal</b> has been introduced to 
+    support use of the SpectrumWifiPhy (so that non-Wi-Fi signals may be handled 
+    as noise power).
+</li>
+<li>A new Wifi attribute <b>Dcf::TxopLimit</b> has been introduced to add support for 802.11e TXOP.
+</li>
+</ul>
+<h2>Changes to build system:</h2>
+<ul>
+  <li> A new waf build option, <tt>--check-config</tt>, was added to allow users to print the current configuration summary, as appears at the end of ./waf configure.  See bug 2459 for discussion.</li>
+  <li> The <tt>configure</tt> summary is now sorted, to make it easier to check the status of optional features.</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>The relationship between Wi-Fi channel number, frequency, channel width, 
+      and Wi-Fi standard has been revised (see bug 2412).  Previously, ChannelNumber 
+      and Frequency were attributes of class YansWifiPhy, and the frequency was 
+      defined as the start of the band.  Now, Frequency has been redefined to be 
+      the center frequency of the channel, and the underlying device relies on 
+      the pair of frequency and channel width to control behavior; the channel 
+      number and Wi-Fi standard are used as attributes to configure frequency 
+      and channel width.  The wifi module documentation discusses this change 
+      and the new behavior.
+  </li>
+  <li>AODV now honors the TTL in RREQ/RREP and it uses a method 
+      compliant with <a href="http://www.ietf.org/rfc/rfc3561.txt">RFC 3561</a>.      The node search radius is increased progressively. This could increase 
+      slightly the node search time, but it also decreases the network 
+      congestion.
+  </li>
+</ul>
+
+<hr>
 <h1>Changes from ns-3.24 to ns-3.25</h1>
 <h2>New API:</h2>
 <ul>
diff -Naur ns-3.25/doc/.gitignore ns-3.26/doc/.gitignore
--- ns-3.25/doc/.gitignore	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/doc/.gitignore	2016-10-03 19:49:01.487388845 -0700
@@ -0,0 +1,12 @@
+html/
+latex/
+ns3-object.txt
+introspected-doxygen.h
+doxygen.log
+doxygen.warnings.log
+*/build/
+*/figures/*.eps
+*/figures/*.pdf
+*/figures/*.png
+*/source-temp/
+ns3_html_theme/static/ns3_version.js
diff -Naur ns-3.25/doc/manual/source/conf.py ns-3.26/doc/manual/source/conf.py
--- ns-3.25/doc/manual/source/conf.py	2016-10-03 20:57:08.188248096 -0700
+++ ns-3.26/doc/manual/source/conf.py	2016-10-03 19:49:01.499388756 -0700
@@ -48,9 +48,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.25'
+version = 'ns-3.26'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.25'
+release = 'ns-3.26'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur ns-3.25/doc/manual/source/documentation.rst ns-3.26/doc/manual/source/documentation.rst
--- ns-3.25/doc/manual/source/documentation.rst	2016-10-03 20:57:08.188248096 -0700
+++ ns-3.26/doc/manual/source/documentation.rst	2016-10-03 19:49:01.499388756 -0700
@@ -39,7 +39,7 @@
 the design and usage of each module.  Right now you are reading the
 :doc:`Documentation <documentation>` Chapter.
 If you are reading the html version, the
-`Show Source <_sources/documentation.txt>`_ link in the sidebar
+`Show Source <_sources/documentation.rst>`_ link in the sidebar
 will show you the reStructuredText source for this chapter.
 
 Adding New Chapters
diff -Naur ns-3.25/doc/manual/source/python.rst ns-3.26/doc/manual/source/python.rst
--- ns-3.25/doc/manual/source/python.rst	2016-10-03 20:57:08.205247963 -0700
+++ ns-3.26/doc/manual/source/python.rst	2016-10-03 19:49:01.508388689 -0700
@@ -11,13 +11,14 @@
 Introduction
 ************
 
-The goal of Python bindings for |ns3| are two fold:
+Python bindings provide support for importing |ns3| model libraries as Python
+modules.  Coverage of most of the |ns3| C++ API is provided.  The intent
+has been to allow the programmer to write complete simulation scripts in
+Python, to allow integration of |ns3| with other Python tools and workflows.
+The intent is not to provide a different language choice to author new
+|ns3| models implemented in Python.
 
-#. Allow the programmer to write complete simulation scripts in Python (http://www.python.org);
-#. Prototype new models (e.g. routing protocols).
-
-For the time being, the primary focus of the bindings is the first goal, but the second goal will eventually be supported as well.
-Python bindings for |ns3| are being developed using a new tool called PyBindGen (http://code.google.com/p/pybindgen).
+Python bindings for |ns3| use a tool called PyBindGen (https://github.com/gjcarneiro/pybindgen).
 
 An Example Python Script that Runs |ns3|
 ****************************************
@@ -131,8 +132,8 @@
 
 ::
 
- ipAddrs = ns3.Ipv4AddressHelper()
- ipAddrs.SetBase(ns3.Ipv4Address("192.168.0.0"), ns3.Ipv4Mask("255.255.255.0"))
+ ipAddrs = ns.internet.Ipv4AddressHelper()
+ ipAddrs.SetBase(ns.network.Ipv4Address("192.168.0.0"), ns.network.Ipv4Mask("255.255.255.0"))
  ipAddrs.Assign(backboneDevices)
 
 CommandLine
@@ -183,7 +184,7 @@
 Python bindings do not work on Cygwin.  This is due to a gccxml bug.
 
 You might get away with it by re-scanning API definitions from within the
-cygwin environment (./waf --python-scan).  However the most likely solution
+cygwin environment (./waf --apiscan=all).  However the most likely solution
 will probably have to be that we disable python bindings in CygWin.
 
 If you really care about Python bindings on Windows, try building with mingw and native
@@ -196,10 +197,7 @@
 Working with Python Bindings
 ****************************
 
-There are currently two kinds of Python bindings in |ns3|:
-
-#. Monolithic bindings contain API definitions for all of the modules and can be found in a single directory, ``bindings/python``.
-#. Modular bindings contain API definitions for a single module and can be found in each module's  ``bindings`` directory. 
+Python bindings are built on a module-by-module basis, and can be found in each module's  ``bindings`` directory. 
 
 Python Bindings Workflow
 ++++++++++++++++++++++++
@@ -221,54 +219,77 @@
 
 So you have been changing existing |ns3| APIs and Python bindings no longer compile?  Do not despair, you can rescan the bindings to create new bindings that reflect the changes to the |ns3| API.
 
-Depending on if you are using monolithic or modular bindings, see the discussions below to learn how to rescan your Python bindings. 
+Overview
+++++++++
 
-Monolithic Python Bindings
-**************************
+The python bindings are generated into an 'ns' namespace.  Examples:
 
-Scanning the Monolithic Python Bindings
-+++++++++++++++++++++++++++++++++++++++
+::
 
-To scan the monolithic Python bindings do the following:
+  from ns.network import Node
+  n1 = Node()
 
-.. sourcecode:: bash
+or
 
-  $ ./waf --python-scan  
+::
+
+  import ns.network
+  n1 = ns.network.Node()
 
-Organization of the Monolithic Python Bindings
-++++++++++++++++++++++++++++++++++++++++++++++
+The best way to explore the bindings is to look at the various example
+programs provided in |ns3|; some C++ examples have a corresponding Python
+example.  There is no structured documentation for the Python bindings
+like there is Doxygen for the C++ API, but the Doxygen can be consulted
+to understand how the C++ API works.
 
-The monolithic Python API definitions are organized as follows. For each |ns3| module <name>, the file ``bindings/python/ns3_module_<name>.py`` describes its API.  Each of those files have 3 toplevel functions:
+Scanning the Modular Python Bindings
+++++++++++++++++++++++++++++++++++++
 
-#. :py:func:`def register_types(module)`: this function takes care of registering new types (e.g. C++ classes, enums) that are defined in tha module;
-#. :py:func:`def register_methods(module)`: this function calls, for each class <name>, another function register_methods_Ns3<name>(module).  These latter functions add method definitions for each class;
-#. :py:func:`def register_functions(module)`: this function registers |ns3| functions that belong to that module.
+Scanning of the C++ API is only necessary if a user is using Python and
+is changing the C++ API to introduce new methods (that he or she wishes
+to be accessible from Python) or is changing the C++ API in a way that
+breaks the compilation of the existing Python bindings.
+
+There are two steps.  First, the bindings toolchain must be enabled in
+the |ns3| build.  This requires that the gccxml and pygccxml tools be
+installed on the system or using the bake build tool.  Second, Waf
+can be used to update the bindings.
 
-Modular Python Bindings
-***********************
+The output of './waf configure' can be inspected to see if Python API scanning
+support is enabled:
 
-Overview
-++++++++
+::
 
-Since ns 3.11, the modular bindings are being added, in parallel to the old monolithic bindings.  
+  Python API Scanning Support   : enabled
 
-The new python bindings are generated into an 'ns' namespace, instead of 'ns3' for the old bindings.  Example:
+It may say something like this, if the support is not active:
 
 ::
 
-  from ns.network import Node
-  n1 = Node()
+  Python API Scanning Support   : not enabled (Missing 'pygccxml' Python module)
 
-With modular Python bindings:
+In this case, the user must take steps to install gccxml and pygccxml;
+gccxml binary must be in the shell's path, and pygccxml must be in the
+Python path.
+
+An automated setup for this is provided by the `bake` build system, if the
+user selects the 'ns-allinone-3.nn' configuration target (where 'nn' is the
+release number.  For example:
 
-#. There is one separate Python extension module for each |ns3| module;
-#. Scanning API definitions (apidefs) is done on a per ns- module basis;
-#. Each module's apidefs files are stored in a 'bindings' subdirectory of the module directory;
+::
 
-Scanning the Modular Python Bindings
-+++++++++++++++++++++++++++++++++++++++
+  ./bake.py configure -e ns-allinone-3.26
+  ./bake.py download
+  ./bake.py build
+
+At present, this toolchain is only supported for gcc version 4; gcc-5
+and gcc-6 are not supported due to the gccxml project stopping maintenance
+a few years ago.  clang compiler is also not supported.  The |ns3| project
+plans to convert to the CastXML project to replace gccxml in the future,
+in which case newer versions of gcc as well as clang will be supported.
 
-To scan the modular Python bindings for the core module, for example, do the following:
+Once API scanning support is enabled, to scan the modular Python bindings 
+for the core module, for example, do the following:
 
 .. sourcecode:: bash
 
@@ -280,17 +301,10 @@
 
   $ ./waf --apiscan=all
 
-Creating a New Module
-+++++++++++++++++++++
-
-If you are adding a new module, Python bindings will continue to compile but will not cover the new module.  
-
-To cover a new module, you have to create a ``bindings/python/ns3_module_<name>.py`` file, similar to the what is described in the previous sections, and register it in the variable :cpp:func:`LOCAL_MODULES` in ``bindings/python/ns3modulegen.py``
-
-Adding Modular Bindings To A Existing Module
-++++++++++++++++++++++++++++++++++++++++++++
+Adding Modular Bindings To A Existing or New Module
++++++++++++++++++++++++++++++++++++++++++++++++++++
 
-To add support for modular bindings to an existing |ns3| module, simply add the following line to its wscript build() function:
+To add support for modular bindings to an existing or new |ns3| module, simply add the following line to its wscript build() function:
 
 ::
 
diff -Naur ns-3.25/doc/models/Makefile ns-3.26/doc/models/Makefile
--- ns-3.25/doc/models/Makefile	2016-10-03 20:57:08.211247917 -0700
+++ ns-3.26/doc/models/Makefile	2016-10-03 19:49:01.514388644 -0700
@@ -57,6 +57,7 @@
 	$(SRC)/network/doc/sockets-api.rst \
 	$(SRC)/network/doc/simple.rst \
 	$(SRC)/network/doc/queue.rst \
+	$(SRC)/network/doc/queue-limits.rst \
 	$(SRC)/internet/doc/internet-stack.rst \
 	$(SRC)/internet/doc/ipv4.rst \
 	$(SRC)/internet/doc/ipv6.rst \
@@ -80,6 +81,8 @@
 	$(SRC)/traffic-control/doc/pfifo-fast.rst \
 	$(SRC)/traffic-control/doc/red.rst \
 	$(SRC)/traffic-control/doc/codel.rst \
+	$(SRC)/traffic-control/doc/fq-codel.rst \
+	$(SRC)/traffic-control/doc/pie.rst \
 	$(SRC)/spectrum/doc/spectrum.rst \
 	$(SRC)/stats/doc/adaptor.rst \
 	$(SRC)/stats/doc/aggregator.rst \
@@ -113,6 +116,7 @@
 	$(SRC)/internet/doc/internet-node-recv.dia \
 	$(SRC)/internet/doc/routing.dia \
 	$(SRC)/internet/doc/routing-specialization.dia \
+	$(SRC)/internet/doc/figures/tcp-state-machine.png \
 	$(SRC)/wifi/doc/source/figures/WifiArchitecture.dia \
 	$(SRC)/wifi/doc/source/figures/snir.dia \
 	$(SRC)/wifi/doc/source/figures/clear-channel.eps \
diff -Naur ns-3.25/doc/models/source/conf.py ns-3.26/doc/models/source/conf.py
--- ns-3.25/doc/models/source/conf.py	2016-10-03 20:57:08.213247901 -0700
+++ ns-3.26/doc/models/source/conf.py	2016-10-03 19:49:01.516388629 -0700
@@ -48,9 +48,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.25'
+version = 'ns-3.26'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.25'
+release = 'ns-3.26'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur ns-3.25/doc/models/source/internet-models.rst ns-3.26/doc/models/source/internet-models.rst
--- ns-3.25/doc/models/source/internet-models.rst	2016-10-03 20:57:08.214247893 -0700
+++ ns-3.26/doc/models/source/internet-models.rst	2016-10-03 19:49:01.517388622 -0700
@@ -1,4 +1,4 @@
-Internet Models (IP, TCP, Routing, UDP, Internet Applications, Codel)
+Internet Models (IP, TCP, Routing, UDP, Internet Applications)
 ---------------------------------------------------------------------
 
 .. toctree::
diff -Naur ns-3.25/doc/models/source/network.rst ns-3.26/doc/models/source/network.rst
--- ns-3.25/doc/models/source/network.rst	2016-10-03 20:57:08.214247893 -0700
+++ ns-3.26/doc/models/source/network.rst	2016-10-03 19:49:01.517388622 -0700
@@ -9,3 +9,4 @@
     sockets-api
     simple
     queue
+    queue-limits
diff -Naur ns-3.25/doc/models/source/traffic-control.rst ns-3.26/doc/models/source/traffic-control.rst
--- ns-3.25/doc/models/source/traffic-control.rst	2016-10-03 20:57:08.215247885 -0700
+++ ns-3.26/doc/models/source/traffic-control.rst	2016-10-03 19:49:01.518388614 -0700
@@ -8,3 +8,5 @@
    pfifo-fast
    red
    codel
+   fq-codel
+   pie
diff -Naur ns-3.25/doc/tutorial/source/conf.py ns-3.26/doc/tutorial/source/conf.py
--- ns-3.25/doc/tutorial/source/conf.py	2016-10-03 20:57:08.245247651 -0700
+++ ns-3.26/doc/tutorial/source/conf.py	2016-10-03 19:49:01.548388391 -0700
@@ -48,9 +48,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.25'
+version = 'ns-3.26'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.25'
+release = 'ns-3.26'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur ns-3.25/doc/tutorial/source/getting-started.rst ns-3.26/doc/tutorial/source/getting-started.rst
--- ns-3.25/doc/tutorial/source/getting-started.rst	2016-10-03 20:57:08.247247636 -0700
+++ ns-3.26/doc/tutorial/source/getting-started.rst	2016-10-03 19:49:01.550388376 -0700
@@ -96,17 +96,17 @@
   $ cd
   $ mkdir workspace
   $ cd workspace
-  $ wget http://www.nsnam.org/release/ns-allinone-3.25.tar.bz2
-  $ tar xjf ns-allinone-3.25.tar.bz2
+  $ wget http://www.nsnam.org/release/ns-allinone-3.26.tar.bz2
+  $ tar xjf ns-allinone-3.26.tar.bz2
 
-If you change into the directory ``ns-allinone-3.25`` you should see a
+If you change into the directory ``ns-allinone-3.26`` you should see a
 number of files and directories:
 
 ::
 
   $ ls
-  bake      constants.py   ns-3.25                            README
-  build.py  netanim-3.107  pybindgen-0.17.0.post49+ng0e4e3bc  util.py
+  bake      constants.py   ns-3.26                            README
+  build.py  netanim-3.107  pybindgen-0.17.0.post57+nga6376f2  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.25``:  the module corresponding to the release; it will download
+1.  ``ns-3.26``:  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.25``:  the module that includes other optional features
+3.  ``ns-allinone-3.26``:  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.25``.
+this tutorial example with ``ns-3.26``.
 
 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.25
+  $ ./bake.py configure -e ns-3.26
 
 Next, we'l ask bake to check whether we have enough tools to download
 various components.  Type::
@@ -265,14 +265,14 @@
    >> Searching for system dependency qt4 - OK
    >> Downloading pygccxml - OK
    >> Downloading netanim-3.107 - OK
-   >> Downloading pybindgen-0.17.0.post49+ng0e4e3bc (target directory:pybindgen) - OK
-   >> Downloading ns-3.25 - OK
+   >> Downloading pybindgen-0.17.0.post57+nga6376f2 (target directory:pybindgen) - OK
+   >> Downloading ns-3.26 - 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.107  ns-3.25  pybindgen  pygccxml  pygccxml-1.0.0.zip
+  gccxml  netanim-3.107  ns-3.26  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.25`` under your ``~/workspace`` directory.  
+``ns-allinone-3.26`` under your ``~/workspace`` directory.  
 Type the following::
 
   $ ./build.py --enable-examples --enable-tests
@@ -307,7 +307,7 @@
 script builds the various pieces you downloaded.  Eventually you should see the
 following::
 
-   Waf: Leaving directory `/path/to/workspace/ns-allinone-3.25/ns-3.25/build'
+   Waf: Leaving directory `/path/to/workspace/ns-allinone-3.26/ns-3.26/build'
    'build' finished successfully (6m25.032s)
   
    Modules built:
@@ -326,10 +326,8 @@
    uan                       virtual-net-device        visualizer               
    wave                      wifi                      wimax                    
    
-Modules not built (see ns-3 tutorial for explanation):
-brite                     click   
-
-   Leaving directory `./ns-3.25'
+   Modules not built (see ns-3 tutorial for explanation):
+   brite                     click   
 
 Regarding the portion about modules not built::
 
@@ -357,10 +355,10 @@
   >> Building gccxml-ns3 - OK
   >> Building pygccxml - OK
   >> Building netanim-3.107 - OK
-  >> Building pybindgen-0.17.0.post49+ng0e4e3bc - OK
-  >> Building ns-3.25 - OK
+  >> Building pybindgen-0.17.0.post57+nga6376f2 - OK
+  >> Building ns-3.26 - OK
 
-*Hint:  you can also perform both steps, download and build, by calling 'bake.py deploy'.*
+*Hint:  you can also perform both steps, download and build, by calling ``bake.py deploy``.*
 
 If there happens to be a failure, please have a look at what the following
 command tells you; it may give a hint as to a missing dependency::
@@ -392,7 +390,7 @@
 following commands::
 
   $ ./waf clean
-  $ ./waf --build-profile=optimized --enable-examples --enable-tests configure
+  $ ./waf configure --build-profile=optimized --enable-examples --enable-tests
 
 This runs Waf out of the local directory (which is provided as a convenience
 for you).  The first command to clean out the previous build is not 
@@ -453,29 +451,29 @@
   Checking for program doxygen                                     : /usr/local/bin/doxygen 
   ---- Summary of optional NS-3 features:
   Build profile                 : debug
-  Build directory               : build
-  Python Bindings               : enabled
   BRITE Integration             : not enabled (BRITE not enabled (see option --with-brite))
-  NS-3 Click Integration        : not enabled (nsclick not enabled (see option --with-nsclick))
-  GtkConfigStore                : enabled
-  XmlIo                         : enabled
-  Threading Primitives          : enabled
-  Real Time Simulator           : enabled (librt is not available)
+  Build directory               : build
+  Build examples                : enabled
+  Build tests                   : enabled
   Emulated Net Device           : enabled (<netpacket/packet.h> include not detected)
-  File descriptor NetDevice     : enabled
-  Tap FdNetDevice               : not enabled (needs linux/if_tun.h)
   Emulation FdNetDevice         : not enabled (needs netpacket/packet.h)
-  PlanetLab FdNetDevice         : not enabled (PlanetLab operating system not detected (see option --force-planetlab))
-  Network Simulation Cradle     : not enabled (NSC not found (see option --with-nsc))
+  File descriptor NetDevice     : enabled
+  GNU Scientific Library (GSL)  : enabled
+  GtkConfigStore                : enabled
   MPI Support                   : enabled
+  NS-3 Click Integration        : not enabled (nsclick not enabled (see option --with-nsclick))
   NS-3 OpenFlow Integration     : not enabled (Required boost libraries not found, missing: system, signals, filesystem)
+  Network Simulation Cradle     : not enabled (NSC not found (see option --with-nsc))
+  PlanetLab FdNetDevice         : not enabled (PlanetLab operating system not detected (see option --force-planetlab))
+  PyViz visualizer              : enabled
+  Python Bindings               : enabled
+  Real Time Simulator           : enabled (librt is not available)
   SQlite stats data output      : enabled
   Tap Bridge                    : not enabled (<linux/if_tun.h> include not detected)
-  PyViz visualizer              : enabled
+  Tap FdNetDevice               : not enabled (needs linux/if_tun.h)
+  Threading Primitives          : enabled
   Use sudo to set suid bit      : not enabled (option --enable-sudo not selected)
-  Build tests                   : enabled
-  Build examples                : enabled
-  GNU Scientific Library (GSL)  : enabled
+  XmlIo                         : enabled
   'configure' finished successfully (1.944s)
 
 Note the last part of the above output.  Some |ns3| options are not enabled by
@@ -485,13 +483,15 @@
 would not be enabled and a message would be displayed.  Note further that there is 
 a feature to use the program ``sudo`` to set the suid bit of certain programs.
 This is not enabled by default and so this feature is reported as "not enabled."
+Finally, to reprint this summary of which optional features are enabled, use
+the ``--check-config`` option to waf.
 
 Now go ahead and switch back to the debug build that includes the examples and tests.
 
 ::
 
   $ ./waf clean
-  $ ./waf --build-profile=debug --enable-examples --enable-tests configure
+  $ ./waf configure --build-profile=debug --enable-examples --enable-tests
 
 The build system is now configured and you can build the debug versions of 
 the |ns3| programs by simply typing
@@ -504,10 +504,10 @@
 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:
+for an already configured project::
 
   $ ./waf --check-profile
-  Waf: Entering directory `/path/to/ns-3-allinone/ns-3.25/build'
+  Waf: Entering directory \`/path/to/ns-3-allinone/ns-3.26/build'
   Build profile: debug
 
 The build.py script discussed above supports also the ``--enable-examples``
diff -Naur ns-3.25/doc/tutorial-pt-br/source/conf.py ns-3.26/doc/tutorial-pt-br/source/conf.py
--- ns-3.25/doc/tutorial-pt-br/source/conf.py	2016-10-03 20:57:08.232247753 -0700
+++ ns-3.26/doc/tutorial-pt-br/source/conf.py	2016-10-03 19:49:01.535388488 -0700
@@ -50,9 +50,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.25'
+version = 'ns-3.26'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.25'
+release = 'ns-3.26'
 
 # The language for content autogenerated by . Refer to babel documentation
 # for a list of supported languages.
diff -Naur ns-3.25/examples/energy/wscript ns-3.26/examples/energy/wscript
--- ns-3.25/examples/energy/wscript	2016-10-03 20:57:08.254247581 -0700
+++ ns-3.26/examples/energy/wscript	2016-10-03 19:49:01.557388324 -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_program('energy-model-example', ['core', 'mobility', 'wifi', 'energy', 'internet'])
+    obj = bld.create_ns3_program('energy-model-example', ['core', 'mobility', 'wifi', 'energy', 'internet', 'config-store'])
     obj.source = 'energy-model-example.cc'
-    obj = bld.create_ns3_program('energy-model-with-harvesting-example', ['core', 'mobility', 'wifi', 'energy', 'internet'])
-    obj.source = 'energy-model-with-harvesting-example.cc'
\ No newline at end of file
+    obj = bld.create_ns3_program('energy-model-with-harvesting-example', ['core', 'mobility', 'wifi', 'energy', 'internet', 'config-store'])
+    obj.source = 'energy-model-with-harvesting-example.cc'
diff -Naur ns-3.25/examples/matrix-topology/matrix-topology.cc ns-3.26/examples/matrix-topology/matrix-topology.cc
--- ns-3.25/examples/matrix-topology/matrix-topology.cc	2016-10-03 20:57:08.261247527 -0700
+++ ns-3.26/examples/matrix-topology/matrix-topology.cc	2016-10-03 19:49:01.563388279 -0700
@@ -99,6 +99,9 @@
   std::string adj_mat_file_name ("examples/matrix-topology/adjacency_matrix.txt");
   std::string node_coordinates_file_name ("examples/matrix-topology/node_coordinates.txt");
 
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
   // ---------- End of Simulation Variables ----------------------------------
 
   // ---------- Read Adjacency Matrix ----------------------------------------
diff -Naur ns-3.25/examples/routing/manet-routing-compare.cc ns-3.26/examples/routing/manet-routing-compare.cc
--- ns-3.25/examples/routing/manet-routing-compare.cc	2016-10-03 20:57:08.266247488 -0700
+++ ns-3.26/examples/routing/manet-routing-compare.cc	2016-10-03 19:49:01.569388234 -0700
@@ -120,18 +120,15 @@
 }
 
 static inline std::string
-PrintReceivedPacket (Ptr<Socket> socket, Ptr<Packet> packet)
+PrintReceivedPacket (Ptr<Socket> socket, Ptr<Packet> packet, Address senderAddress)
 {
-  SocketAddressTag tag;
-  bool found;
-  found = packet->PeekPacketTag (tag);
   std::ostringstream oss;
 
   oss << Simulator::Now ().GetSeconds () << " " << socket->GetNode ()->GetId ();
 
-  if (found)
+  if (InetSocketAddress::IsMatchingType (senderAddress))
     {
-      InetSocketAddress addr = InetSocketAddress::ConvertFrom (tag.GetAddress ());
+      InetSocketAddress addr = InetSocketAddress::ConvertFrom (senderAddress);
       oss << " received one packet from " << addr.GetIpv4 ();
     }
   else
@@ -145,11 +142,12 @@
 RoutingExperiment::ReceivePacket (Ptr<Socket> socket)
 {
   Ptr<Packet> packet;
-  while ((packet = socket->Recv ()))
+  Address senderAddress;
+  while ((packet = socket->RecvFrom (senderAddress)))
     {
       bytesTotal += packet->GetSize ();
       packetsReceived += 1;
-      NS_LOG_UNCOND (PrintReceivedPacket (socket, packet));
+      NS_LOG_UNCOND (PrintReceivedPacket (socket, packet, senderAddress));
     }
 }
 
diff -Naur ns-3.25/examples/tcp/tcp-nsc-lfn.cc ns-3.26/examples/tcp/tcp-nsc-lfn.cc
--- ns-3.25/examples/tcp/tcp-nsc-lfn.cc	2016-10-03 20:57:08.278247394 -0700
+++ ns-3.26/examples/tcp/tcp-nsc-lfn.cc	2016-10-03 19:49:01.580388152 -0700
@@ -100,9 +100,9 @@
 
   DoubleValue rate (errRate);
   Ptr<RateErrorModel> em1 = 
-    CreateObjectWithAttributes<RateErrorModel> ("RanVar", StringValue ("ns3::UniformRandomVariable[Min=0.0,Max=1.0]"), "ErrorRate", rate);
+    CreateObjectWithAttributes<RateErrorModel> ("RanVar", StringValue ("ns3::UniformRandomVariable[Min=0.0|Max=1.0]"), "ErrorRate", rate);
   Ptr<RateErrorModel> em2 = 
-    CreateObjectWithAttributes<RateErrorModel> ("RanVar", StringValue ("ns3::UniformRandomVariable[Min=0.0,Max=1.0]"), "ErrorRate", rate);
+    CreateObjectWithAttributes<RateErrorModel> ("RanVar", StringValue ("ns3::UniformRandomVariable[Min=0.0|Max=1.0]"), "ErrorRate", rate);
 
   // This enables the specified errRate on both link endpoints.
   p2pInterfaces.Get (0)->SetAttribute ("ReceiveErrorModel", PointerValue (em1));
diff -Naur ns-3.25/examples/tcp/tcp-variants-comparison.cc ns-3.26/examples/tcp/tcp-variants-comparison.cc
--- ns-3.25/examples/tcp/tcp-variants-comparison.cc	2016-10-03 20:57:08.279247386 -0700
+++ ns-3.26/examples/tcp/tcp-variants-comparison.cc	2016-10-03 19:49:01.582388137 -0700
@@ -63,6 +63,9 @@
 Ptr<OutputStreamWrapper> ssThreshStream;
 Ptr<OutputStreamWrapper> rttStream;
 Ptr<OutputStreamWrapper> rtoStream;
+Ptr<OutputStreamWrapper> nextTxStream;
+Ptr<OutputStreamWrapper> nextRxStream;
+Ptr<OutputStreamWrapper> inFlightStream;
 uint32_t cWndValue;
 uint32_t ssThreshValue;
 
@@ -123,6 +126,23 @@
   *rtoStream->GetStream () << Simulator::Now ().GetSeconds () << " " << newval.GetSeconds () << std::endl;
 }
 
+static void
+NextTxTracer (SequenceNumber32 old, SequenceNumber32 nextTx)
+{
+  *nextTxStream->GetStream () << Simulator::Now ().GetSeconds () << " " << nextTx << std::endl;
+}
+
+static void
+InFlightTracer (uint32_t old, uint32_t inFlight)
+{
+  *inFlightStream->GetStream () << Simulator::Now ().GetSeconds () << " " << inFlight << std::endl;
+}
+
+static void
+NextRxTracer (SequenceNumber32 old, SequenceNumber32 nextRx)
+{
+  *nextRxStream->GetStream () << Simulator::Now ().GetSeconds () << " " << nextRx << std::endl;
+}
 
 static void
 TraceCwnd (std::string cwnd_tr_file_name)
@@ -156,6 +176,31 @@
   Config::ConnectWithoutContext ("/NodeList/1/$ns3::TcpL4Protocol/SocketList/0/RTO", MakeCallback (&RtoTracer));
 }
 
+static void
+TraceNextTx (std::string &next_tx_seq_file_name)
+{
+  AsciiTraceHelper ascii;
+  nextTxStream = ascii.CreateFileStream (next_tx_seq_file_name.c_str ());
+  Config::ConnectWithoutContext ("/NodeList/1/$ns3::TcpL4Protocol/SocketList/0/NextTxSequence", MakeCallback (&NextTxTracer));
+}
+
+static void
+TraceInFlight (std::string &in_flight_file_name)
+{
+  AsciiTraceHelper ascii;
+  inFlightStream = ascii.CreateFileStream (in_flight_file_name.c_str ());
+  Config::ConnectWithoutContext ("/NodeList/1/$ns3::TcpL4Protocol/SocketList/0/BytesInFlight", MakeCallback (&InFlightTracer));
+}
+
+
+static void
+TraceNextRx (std::string &next_rx_seq_file_name)
+{
+  AsciiTraceHelper ascii;
+  nextRxStream = ascii.CreateFileStream (next_rx_seq_file_name.c_str ());
+  Config::ConnectWithoutContext ("/NodeList/2/$ns3::TcpL4Protocol/SocketList/1/RxBuffer/NextRxSequence", MakeCallback (&NextRxTracer));
+}
+
 int main (int argc, char *argv[])
 {
   std::string transport_prot = "TcpWestwood";
@@ -178,7 +223,8 @@
 
   CommandLine cmd;
   cmd.AddValue ("transport_prot", "Transport protocol to use: TcpNewReno, "
-                " TcpWestwood, TcpWestwoodPlus ", transport_prot);
+                "TcpHybla, TcpHighSpeed, TcpHtcp, TcpVegas, TcpScalable, TcpVeno, "
+                "TcpBic, TcpYeah, TcpIllinois, 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);
@@ -229,6 +275,42 @@
     {
       Config::SetDefault ("ns3::TcpL4Protocol::SocketType", TypeIdValue (TcpNewReno::GetTypeId ()));
     }
+  else if (transport_prot.compare ("TcpHybla") == 0)
+    {
+      Config::SetDefault ("ns3::TcpL4Protocol::SocketType", TypeIdValue (TcpHybla::GetTypeId ()));
+    }
+  else if (transport_prot.compare ("TcpHighSpeed") == 0)
+    {
+      Config::SetDefault ("ns3::TcpL4Protocol::SocketType", TypeIdValue (TcpHighSpeed::GetTypeId ()));
+    }
+  else if (transport_prot.compare ("TcpVegas") == 0)
+    {
+      Config::SetDefault ("ns3::TcpL4Protocol::SocketType", TypeIdValue (TcpVegas::GetTypeId ()));
+    }
+  else if (transport_prot.compare ("TcpScalable") == 0)
+    {
+      Config::SetDefault ("ns3::TcpL4Protocol::SocketType", TypeIdValue (TcpScalable::GetTypeId ()));
+    }
+  else if (transport_prot.compare ("TcpHtcp") == 0)
+    {
+      Config::SetDefault ("ns3::TcpL4Protocol::SocketType", TypeIdValue (TcpHtcp::GetTypeId ()));
+    }
+  else if (transport_prot.compare ("TcpVeno") == 0)
+    {
+      Config::SetDefault ("ns3::TcpL4Protocol::SocketType", TypeIdValue (TcpVeno::GetTypeId ()));
+    }
+  else if (transport_prot.compare ("TcpBic") == 0)
+    {
+      Config::SetDefault ("ns3::TcpL4Protocol::SocketType", TypeIdValue (TcpBic::GetTypeId ()));
+    }
+  else if (transport_prot.compare ("TcpYeah") == 0)
+    {
+      Config::SetDefault ("ns3::TcpL4Protocol::SocketType", TypeIdValue (TcpYeah::GetTypeId ()));
+    }
+  else if (transport_prot.compare ("TcpIllinois") == 0)
+    {
+      Config::SetDefault ("ns3::TcpL4Protocol::SocketType", TypeIdValue (TcpIllinois::GetTypeId ()));
+    }
   else if (transport_prot.compare ("TcpWestwood") == 0)
     { // the default protocol type in ns3::TcpWestwood is WESTWOOD
       Config::SetDefault ("ns3::TcpL4Protocol::SocketType", TypeIdValue (TcpWestwood::GetTypeId ()));
@@ -273,8 +355,7 @@
   stack.InstallAll ();
 
   TrafficControlHelper tchPfifo;
-  uint32_t handle = tchPfifo.SetRootQueueDisc ("ns3::PfifoFastQueueDisc");
-  tchPfifo.AddPacketFilter (handle, "ns3::PfifoFastIpv4PacketFilter");
+  tchPfifo.SetRootQueueDisc ("ns3::PfifoFastQueueDisc");
 
   TrafficControlHelper tchCoDel;
   tchCoDel.SetRootQueueDisc ("ns3::CoDelQueueDisc");
@@ -345,8 +426,13 @@
           || transport_prot.compare ("TcpWestwoodPlus") == 0
           || transport_prot.compare ("TcpHybla") == 0
           || transport_prot.compare ("TcpHighSpeed") == 0
+          || transport_prot.compare ("TcpHtcp") == 0
+          || transport_prot.compare ("TcpVegas") == 0
+          || transport_prot.compare ("TcpVeno") == 0
           || transport_prot.compare ("TcpBic") == 0
-          || transport_prot.compare ("TcpCubic") == 0)
+          || transport_prot.compare ("TcpScalable") == 0
+          || transport_prot.compare ("TcpYeah") == 0
+          || transport_prot.compare ("TcpIllinois") == 0)
         {
           Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (tcp_adu_size));
           BulkSendHelper ftp ("ns3::TcpSocketFactory", Address ());
@@ -384,6 +470,9 @@
       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");
+      Simulator::Schedule (Seconds (0.00001), &TraceNextTx, prefix_file_name + "-next-tx.data");
+      Simulator::Schedule (Seconds (0.00001), &TraceInFlight, prefix_file_name + "-inflight.data");
+      Simulator::Schedule (Seconds (0.1), &TraceNextRx, prefix_file_name + "-next-rx.data");
     }
 
   if (pcap)
diff -Naur ns-3.25/examples/traffic-control/queue-discs-benchmark.cc ns-3.26/examples/traffic-control/queue-discs-benchmark.cc
--- ns-3.25/examples/traffic-control/queue-discs-benchmark.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/examples/traffic-control/queue-discs-benchmark.cc	2016-10-03 19:49:01.583388130 -0700
@@ -0,0 +1,305 @@
+/* -*- 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
+ *
+ * Authors: Pasquale Imputato <p.imputato@gmail.com>
+ *          Stefano Avallone <stefano.avallone@unina.it>
+ */
+
+// This example serves as a benchmark for all the queue discs (with BQL enabled or not)
+//
+// Network topology
+//
+//                192.168.1.0                             192.168.2.0
+// n1 ------------------------------------ n2 ----------------------------------- n3
+//   point-to-point (access link)                point-to-point (bottleneck link)
+//   100 Mbps, 0.1 ms                            bandwidth [10 Mbps], delay [5 ms]
+//   qdiscs PfifoFast with capacity              qdiscs queueDiscType in {PfifoFast, ARED, CoDel, FqCoDel, PIE} [PfifoFast]
+//   of 1000 packets                             with capacity of queueDiscSize packets [1000]
+//   netdevices queues with size of 100 packets  netdevices queues with size of netdevicesQueueSize packets [100]
+//   without BQL                                 bql BQL [false]
+//   *** fixed configuration ***
+//
+// Two TCP flows are generated: one from n1 to n3 and the other from n3 to n1.
+// Additionally, n1 pings n3, so that the RTT can be measured.
+//
+// The output will consist of a number of ping Rtt such as:
+//
+//    /NodeList/0/ApplicationList/2/$ns3::V4Ping/Rtt=111 ms
+//    /NodeList/0/ApplicationList/2/$ns3::V4Ping/Rtt=111 ms
+//    /NodeList/0/ApplicationList/2/$ns3::V4Ping/Rtt=110 ms
+//    /NodeList/0/ApplicationList/2/$ns3::V4Ping/Rtt=111 ms
+//    /NodeList/0/ApplicationList/2/$ns3::V4Ping/Rtt=111 ms
+//    /NodeList/0/ApplicationList/2/$ns3::V4Ping/Rtt=112 ms
+//    /NodeList/0/ApplicationList/2/$ns3::V4Ping/Rtt=111 ms
+//
+// The files output will consist of a trace file with bytes in queue and of a trace file for limits
+// (when BQL is enabled) both for bottleneck NetDevice on n2, two files with upload and download
+// goodput for flows configuration and a file with flow monitor stats.
+//
+// If you use an AQM as queue disc on the bottleneck netdevices, you can observe that the ping Rtt
+// decrease. A further decrease can be observed when you enable BQL.
+
+#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/internet-apps-module.h"
+#include "ns3/traffic-control-module.h"
+#include "ns3/flow-monitor-module.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("BenchmarkQueueDiscs");
+
+void
+LimitsTrace (Ptr<OutputStreamWrapper> stream, uint32_t oldVal, uint32_t newVal)
+{
+  *stream->GetStream () << Simulator::Now ().GetSeconds () << " " << newVal << std::endl;
+}
+
+void
+BytesInQueueTrace (Ptr<OutputStreamWrapper> stream, uint32_t oldVal, uint32_t newVal)
+{
+  *stream->GetStream () << Simulator::Now ().GetSeconds () << " " << newVal << std::endl;
+}
+
+static void
+GoodputSampling (std::string fileName, ApplicationContainer app, Ptr<OutputStreamWrapper> stream, float period)
+{
+  Simulator::Schedule (Seconds (period), &GoodputSampling, fileName, app, stream, period);
+  double goodput;
+  uint32_t totalPackets = DynamicCast<PacketSink> (app.Get (0))->GetTotalRx ();
+  goodput = totalPackets * 8 / (Simulator::Now ().GetSeconds () * 1024); // Kbit/s
+  *stream->GetStream () << Simulator::Now ().GetSeconds () << " " << goodput << std::endl;
+}
+
+static void PingRtt (std::string context, Time rtt)
+{
+  std::cout << context << "=" << rtt.GetMilliSeconds () << " ms" << std::endl;
+}
+
+int main (int argc, char *argv[])
+{
+  std::string bandwidth = "10Mbps";
+  std::string delay = "5ms";
+  std::string queueDiscType = "PfifoFast";
+  uint32_t queueDiscSize = 1000;
+  uint32_t netdevicesQueueSize = 100;
+  bool bql = false;
+
+  std::string flowsDatarate = "20Mbps";
+  uint32_t flowsPacketsSize = 1000;
+
+  float startTime = 0.1; // in s
+  float simDuration = 60;
+  float samplingPeriod = 1;
+
+  CommandLine cmd;
+  cmd.AddValue ("bandwidth", "Bottleneck bandwidth", bandwidth);
+  cmd.AddValue ("delay", "Bottleneck delay", delay);
+  cmd.AddValue ("queueDiscType", "Bottleneck queue disc type in {PfifoFast, ARED, CoDel, FqCoDel, PIE}", queueDiscType);
+  cmd.AddValue ("queueDiscSize", "Bottleneck queue disc size in packets", queueDiscSize);
+  cmd.AddValue ("netdevicesQueueSize", "Bottleneck netdevices queue size in packets", netdevicesQueueSize);
+  cmd.AddValue ("bql", "Enable byte queue limits on bottleneck netdevices", bql);
+  cmd.AddValue ("flowsDatarate", "Upload and download flows datarate", flowsDatarate);
+  cmd.AddValue ("flowsPacketsSize", "Upload and download flows packets sizes", flowsPacketsSize);
+  cmd.AddValue ("startTime", "Simulation start time", startTime);
+  cmd.AddValue ("simDuration", "Simulation duration in seconds", simDuration);
+  cmd.AddValue ("samplingPeriod", "Goodput sampling period in seconds", samplingPeriod);
+  cmd.Parse (argc, argv);
+
+  float stopTime = startTime + simDuration;
+
+  // Create nodes
+  NodeContainer n1, n2, n3;
+  n1.Create (1);
+  n2.Create (1);
+  n3.Create (1);
+
+  // Create and configure access link and bottleneck link
+  PointToPointHelper accessLink;
+  accessLink.SetDeviceAttribute ("DataRate", StringValue ("100Mbps"));
+  accessLink.SetChannelAttribute ("Delay", StringValue ("0.1ms"));
+
+  PointToPointHelper bottleneckLink;
+  bottleneckLink.SetDeviceAttribute ("DataRate", StringValue (bandwidth));
+  bottleneckLink.SetChannelAttribute ("Delay", StringValue (delay));
+
+  InternetStackHelper stack;
+  stack.InstallAll ();
+
+  // Access link traffic control configuration
+  TrafficControlHelper tchPfifoFastAccess;
+  uint32_t handle = tchPfifoFastAccess.SetRootQueueDisc ("ns3::PfifoFastQueueDisc", "Limit", UintegerValue (1000));
+
+  // Bottleneck link traffic control configuration
+  TrafficControlHelper tchBottleneck;
+
+  if (queueDiscType.compare ("PfifoFast") == 0)
+    {
+      tchBottleneck.SetRootQueueDisc ("ns3::PfifoFastQueueDisc", "Limit", UintegerValue (queueDiscSize));
+    }
+  else if (queueDiscType.compare ("ARED") == 0)
+    {
+      handle = tchBottleneck.SetRootQueueDisc ("ns3::RedQueueDisc");
+      Config::SetDefault ("ns3::RedQueueDisc::ARED", BooleanValue (true));
+      Config::SetDefault ("ns3::RedQueueDisc::Mode", EnumValue (Queue::QUEUE_MODE_PACKETS));
+      Config::SetDefault ("ns3::RedQueueDisc::QueueLimit", UintegerValue (queueDiscSize));
+    }
+  else if (queueDiscType.compare ("CoDel") == 0)
+    {
+      handle = tchBottleneck.SetRootQueueDisc ("ns3::CoDelQueueDisc");
+      Config::SetDefault ("ns3::CoDelQueueDisc::Mode", EnumValue (Queue::QUEUE_MODE_PACKETS));
+      Config::SetDefault ("ns3::CoDelQueueDisc::MaxPackets", UintegerValue (queueDiscSize));
+    }
+  else if (queueDiscType.compare ("FqCoDel") == 0)
+    {
+      handle = tchBottleneck.SetRootQueueDisc ("ns3::FqCoDelQueueDisc");
+      Config::SetDefault ("ns3::FqCoDelQueueDisc::Packet limit", UintegerValue (queueDiscSize));
+      tchBottleneck.AddPacketFilter (handle, "ns3::FqCoDelIpv4PacketFilter");
+      tchBottleneck.AddPacketFilter (handle, "ns3::FqCoDelIpv6PacketFilter");
+    }
+  else if (queueDiscType.compare ("PIE") == 0)
+    {
+      handle = tchBottleneck.SetRootQueueDisc ("ns3::PieQueueDisc");
+      Config::SetDefault ("ns3::PieQueueDisc::Mode", EnumValue (Queue::QUEUE_MODE_PACKETS));
+      Config::SetDefault ("ns3::PieQueueDisc::QueueLimit", UintegerValue (queueDiscSize));
+    }
+  else
+    {
+      NS_ABORT_MSG ("--queueDiscType not valid");
+    }
+
+  if (bql)
+    {
+      tchBottleneck.SetQueueLimits ("ns3::DynamicQueueLimits");
+    }
+
+  Config::SetDefault ("ns3::Queue::Mode", StringValue ("QUEUE_MODE_PACKETS"));
+  Config::SetDefault ("ns3::Queue::MaxPackets", UintegerValue (100));
+
+  NetDeviceContainer devicesAccessLink = accessLink.Install (n1.Get (0), n2.Get (0));
+  tchPfifoFastAccess.Install (devicesAccessLink);
+  Ipv4AddressHelper address;
+  address.SetBase ("192.168.0.0", "255.255.255.0");
+  address.NewNetwork ();
+  Ipv4InterfaceContainer interfacesAccess = address.Assign (devicesAccessLink);
+
+  Config::SetDefault ("ns3::Queue::MaxPackets", UintegerValue (netdevicesQueueSize));
+
+  NetDeviceContainer devicesBottleneckLink = bottleneckLink.Install (n2.Get (0), n3.Get (0));
+  QueueDiscContainer qdiscs;
+  qdiscs = tchBottleneck.Install (devicesBottleneckLink);
+
+  address.NewNetwork ();
+  Ipv4InterfaceContainer interfacesBottleneck = address.Assign (devicesBottleneckLink);
+
+  Ptr<NetDeviceQueueInterface> interface = devicesBottleneckLink.Get (0)->GetObject<NetDeviceQueueInterface> ();
+  Ptr<NetDeviceQueue> queueInterface = interface->GetTxQueue (0);
+  Ptr<DynamicQueueLimits> queueLimits = StaticCast<DynamicQueueLimits> (queueInterface->GetQueueLimits ());
+
+  AsciiTraceHelper ascii;
+  if (bql)
+    {
+      queueDiscType = queueDiscType + "-bql";
+      Ptr<OutputStreamWrapper> streamLimits = ascii.CreateFileStream (queueDiscType + "-limits.txt");
+      queueLimits->TraceConnectWithoutContext ("Limit",MakeBoundCallback (&LimitsTrace, streamLimits));
+    }
+  Ptr<Queue> queue = StaticCast<PointToPointNetDevice> (devicesBottleneckLink.Get (0))->GetQueue ();
+  Ptr<OutputStreamWrapper> streamBytesInQueue = ascii.CreateFileStream (queueDiscType + "-bytesInQueue.txt");
+  queue->TraceConnectWithoutContext ("BytesInQueue",MakeBoundCallback (&BytesInQueueTrace, streamBytesInQueue));
+
+  Ipv4InterfaceContainer n1Interface;
+  n1Interface.Add (interfacesAccess.Get (0));
+
+  Ipv4InterfaceContainer n3Interface;
+  n3Interface.Add (interfacesBottleneck.Get (1));
+
+  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+  Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (flowsPacketsSize));
+
+  // Flows configuration
+  // Bidirectional TCP streams with ping like flent tcp_bidirectional test.
+  uint16_t port = 7;
+  ApplicationContainer uploadApp, downloadApp, sourceApps;
+  // Configure and install upload flow
+  Address addUp (InetSocketAddress (Ipv4Address::GetAny (), port));
+  PacketSinkHelper sinkHelperUp ("ns3::TcpSocketFactory", addUp);
+  sinkHelperUp.SetAttribute ("Protocol", TypeIdValue (TcpSocketFactory::GetTypeId ()));
+  uploadApp.Add (sinkHelperUp.Install (n3));
+
+  InetSocketAddress socketAddressUp = InetSocketAddress (n3Interface.GetAddress (0), port);
+  OnOffHelper onOffHelperUp ("ns3::TcpSocketFactory", Address ());
+  onOffHelperUp.SetAttribute ("Remote", AddressValue (socketAddressUp));
+  onOffHelperUp.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+  onOffHelperUp.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+  onOffHelperUp.SetAttribute ("PacketSize", UintegerValue (flowsPacketsSize));
+  onOffHelperUp.SetAttribute ("DataRate", StringValue (flowsDatarate));
+  sourceApps.Add (onOffHelperUp.Install (n1));
+
+  port = 8;
+  // Configure and install download flow
+  Address addDown (InetSocketAddress (Ipv4Address::GetAny (), port));
+  PacketSinkHelper sinkHelperDown ("ns3::TcpSocketFactory", addDown);
+  sinkHelperDown.SetAttribute ("Protocol", TypeIdValue (TcpSocketFactory::GetTypeId ()));
+  downloadApp.Add (sinkHelperDown.Install (n1));
+
+  InetSocketAddress socketAddressDown = InetSocketAddress (n1Interface.GetAddress (0), port);
+  OnOffHelper onOffHelperDown ("ns3::TcpSocketFactory", Address ());
+  onOffHelperDown.SetAttribute ("Remote", AddressValue (socketAddressDown));
+  onOffHelperDown.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+  onOffHelperDown.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+  onOffHelperDown.SetAttribute ("PacketSize", UintegerValue (flowsPacketsSize));
+  onOffHelperDown.SetAttribute ("DataRate", StringValue (flowsDatarate));
+  sourceApps.Add (onOffHelperDown.Install (n3));
+
+  // Configure and install ping
+  V4PingHelper ping = V4PingHelper (n3Interface.GetAddress (0));
+  ping.Install (n1);
+
+  Config::Connect ("/NodeList/*/ApplicationList/*/$ns3::V4Ping/Rtt", MakeCallback (&PingRtt));
+
+  uploadApp.Start (Seconds (0));
+  uploadApp.Stop (Seconds (stopTime));
+  downloadApp.Start (Seconds (0));
+  downloadApp.Stop (Seconds (stopTime));
+
+  sourceApps.Start (Seconds (0 + 0.1));
+  sourceApps.Stop (Seconds (stopTime - 0.1));
+
+  Ptr<OutputStreamWrapper> uploadGoodputStream = ascii.CreateFileStream (queueDiscType + "-upGoodput.txt");
+  Simulator::Schedule (Seconds (samplingPeriod), &GoodputSampling, queueDiscType + "-upGoodput.txt", uploadApp,
+                       uploadGoodputStream, samplingPeriod);
+  Ptr<OutputStreamWrapper> downloadGoodputStream = ascii.CreateFileStream (queueDiscType + "-downGoodput.txt");
+  Simulator::Schedule (Seconds (samplingPeriod), &GoodputSampling, queueDiscType + "-downGoodput.txt", downloadApp,
+                       downloadGoodputStream, samplingPeriod);
+
+  // Flow monitor
+  Ptr<FlowMonitor> flowMonitor;
+  FlowMonitorHelper flowHelper;
+  flowMonitor = flowHelper.InstallAll();
+
+  Simulator::Stop (Seconds (stopTime));
+  Simulator::Run ();
+
+  flowMonitor->SerializeToXmlFile(queueDiscType + "-flowMonitor.xml", true, true);
+
+  Simulator::Destroy ();
+  return 0;
+}
diff -Naur ns-3.25/examples/traffic-control/traffic-control.cc ns-3.26/examples/traffic-control/traffic-control.cc
--- ns-3.25/examples/traffic-control/traffic-control.cc	2016-10-03 20:57:08.281247371 -0700
+++ ns-3.26/examples/traffic-control/traffic-control.cc	2016-10-03 19:49:01.584388122 -0700
@@ -25,13 +25,14 @@
 #include "ns3/point-to-point-module.h"
 #include "ns3/applications-module.h"
 #include "ns3/traffic-control-module.h"
+#include "ns3/flow-monitor-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.
+// The default QueueDisc is a pfifo_fast with a capacity of 1000 packets (as in
+// Linux). However, in this example, we install a RedQueueDisc with a capacity
+// of 10000 packets.
 //
 // Network topology
 //
@@ -39,38 +40,27 @@
 // n0 -------------- n1
 //    point-to-point
 //
-// The output will consist of a number of traced changes to queue lengths
-// such as:
+// The output will consist of all the traced changes in the length of the RED
+// internal queue and in the length of the netdevice queue:
 //
 //    DevicePacketsInQueue 0 to 1
-//    TcPacketsInQueue 5 to 4
-//    TcPacketsInQueue 4 to 5
+//    TcPacketsInQueue 7 to 8
+//    TcPacketsInQueue 8 to 9
 //    DevicePacketsInQueue 1 to 0
+//    TcPacketsInQueue 9 to 8
 //
-// 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.
+// plus some statistics collected at the network layer (by the flow monitor)
+// and the application layer. Finally, the number of packets dropped by the
+// queuing discipline, the number of packets dropped by the netdevice and
+// the number of packets requeued by the queuing discipline are reported.
+//
+// If the size of the DropTail queue of the netdevice were increased from 1
+// to a large number (e.g. 1000), one would observe that the number of dropped
+// packets goes to zero, but the latency grows in an uncontrolled manner. 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;
 
@@ -130,6 +120,9 @@
 
   Ptr<QueueDisc> q = qdiscs.Get (1);
   q->TraceConnectWithoutContext ("PacketsInQueue", MakeCallback (&TcPacketsInQueueTrace));
+  // Alternatively:
+  // Config::ConnectWithoutContext ("/NodeList/1/$ns3::TrafficControlLayer/RootQueueDiscList/0/PacketsInQueue",
+  //                                MakeCallback (&TcPacketsInQueueTrace));
 
   Ptr<NetDevice> nd = devices.Get (1);
   Ptr<PointToPointNetDevice> ptpnd = DynamicCast<PointToPointNetDevice> (nd);
@@ -166,21 +159,41 @@
   apps.Start (Seconds (1.0));
   apps.Stop (Seconds (simulationTime + 0.1));
 
-  Simulator::Stop (Seconds (simulationTime + 0.1));
+  FlowMonitorHelper flowmon;
+  Ptr<FlowMonitor> monitor = flowmon.InstallAll();
+
+  Simulator::Stop (Seconds (simulationTime + 5));
   Simulator::Run ();
+
+  Ptr<Ipv4FlowClassifier> classifier = DynamicCast<Ipv4FlowClassifier> (flowmon.GetClassifier ());
+  std::map<FlowId, FlowMonitor::FlowStats> stats = monitor->GetFlowStats ();
+  std::cout << std::endl << "*** Flow monitor statistics ***" << std::endl;
+  std::cout << "  Tx Packets:   " << stats[1].txPackets << std::endl;
+  std::cout << "  Tx Bytes:   " << stats[1].txBytes << std::endl;
+  std::cout << "  Offered Load: " << stats[1].txBytes * 8.0 / (stats[1].timeLastTxPacket.GetSeconds () - stats[1].timeFirstTxPacket.GetSeconds ()) / 1000000 << " Mbps" << std::endl;
+  std::cout << "  Rx Packets:   " << stats[1].rxPackets << std::endl;
+  std::cout << "  Rx Bytes:   " << stats[1].rxBytes << std::endl;
+  std::cout << "  Packets Dropped by Queue Disc:   " << stats[1].packetsDropped[Ipv4FlowProbe::DROP_QUEUE_DISC] << std::endl;
+  std::cout << "  Bytes Dropped by Queue Disc:   " << stats[1].bytesDropped[Ipv4FlowProbe::DROP_QUEUE_DISC] << std::endl;
+  std::cout << "  Packets Dropped by NetDevice:   " << stats[1].packetsDropped[Ipv4FlowProbe::DROP_QUEUE] << std::endl;
+  std::cout << "  Bytes Dropped by NetDevice:   " << stats[1].bytesDropped[Ipv4FlowProbe::DROP_QUEUE] << std::endl;
+  std::cout << "  Throughput: " << stats[1].rxBytes * 8.0 / (stats[1].timeLastRxPacket.GetSeconds () - stats[1].timeFirstRxPacket.GetSeconds ()) / 1000000 << " Mbps" << std::endl;
+  std::cout << "  Mean delay:   " << stats[1].delaySum.GetSeconds () / stats[1].rxPackets << std::endl;
+  std::cout << "  Mean jitter:   " << stats[1].jitterSum.GetSeconds () / (stats[1].rxPackets - 1) << std::endl;
+
   Simulator::Destroy ();
 
+  std::cout << std::endl << "*** Application statistics ***" << std::endl;
   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;
+  std::cout << "  Rx Bytes: " << totalPacketsThr << std::endl;
+  std::cout << "  Average Goodput: " << thr << " Mbit/s" << std::endl;
+  std::cout << std::endl << "*** TC Layer statistics ***" << std::endl;
+  std::cout << "  Packets dropped by the TC layer: " << q->GetTotalDroppedPackets () << std::endl;
+  std::cout << "  Bytes dropped by the TC layer: " << q->GetTotalDroppedBytes () << std::endl;
+  std::cout << "  Packets dropped by the netdevice: " << queue->GetTotalDroppedPackets () << std::endl;
+  std::cout << "  Packets requeued by the TC layer: " << q->GetTotalRequeuedPackets () << std::endl;
 
   return 0;
 }
diff -Naur ns-3.25/examples/traffic-control/wscript ns-3.26/examples/traffic-control/wscript
--- ns-3.25/examples/traffic-control/wscript	2016-10-03 20:57:08.281247371 -0700
+++ ns-3.26/examples/traffic-control/wscript	2016-10-03 19:49:01.584388122 -0700
@@ -2,5 +2,9 @@
 
 def build(bld):
     obj = bld.create_ns3_program('traffic-control',
-                                 ['internet', 'point-to-point', 'applications', 'traffic-control'])
+                                 ['internet', 'point-to-point', 'applications', 'traffic-control', 'flow-monitor'])
     obj.source = 'traffic-control.cc'
+
+    obj = bld.create_ns3_program('queue-discs-benchmark',
+                                 ['internet', 'point-to-point', 'applications', 'internet-apps', 'traffic-control', 'flow-monitor'])
+    obj.source = 'queue-discs-benchmark.cc'
diff -Naur ns-3.25/examples/tutorial/fifth.cc ns-3.26/examples/tutorial/fifth.cc
--- ns-3.25/examples/tutorial/fifth.cc	2016-10-03 20:57:08.282247363 -0700
+++ ns-3.26/examples/tutorial/fifth.cc	2016-10-03 19:49:01.585388115 -0700
@@ -175,6 +175,9 @@
 int 
 main (int argc, char *argv[])
 {
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
   NodeContainer nodes;
   nodes.Create (2);
 
diff -Naur ns-3.25/examples/tutorial/first.cc ns-3.26/examples/tutorial/first.cc
--- ns-3.25/examples/tutorial/first.cc	2016-10-03 20:57:08.282247363 -0700
+++ ns-3.26/examples/tutorial/first.cc	2016-10-03 19:49:01.585388115 -0700
@@ -27,6 +27,9 @@
 int
 main (int argc, char *argv[])
 {
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
   Time::SetResolution (Time::NS);
   LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);
   LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);
diff -Naur ns-3.25/examples/tutorial/sixth.cc ns-3.26/examples/tutorial/sixth.cc
--- ns-3.25/examples/tutorial/sixth.cc	2016-10-03 20:57:08.284247347 -0700
+++ ns-3.26/examples/tutorial/sixth.cc	2016-10-03 19:49:01.588388093 -0700
@@ -192,6 +192,9 @@
 int
 main (int argc, char *argv[])
 {
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
   NodeContainer nodes;
   nodes.Create (2);
 
diff -Naur ns-3.25/examples/wireless/80211e-txop.cc ns-3.26/examples/wireless/80211e-txop.cc
--- ns-3.25/examples/wireless/80211e-txop.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/examples/wireless/80211e-txop.cc	2016-10-03 19:49:01.591388070 -0700
@@ -0,0 +1,327 @@
+/* -*- 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/internet-module.h"
+
+// This is an example that illustrates 802.11 QoS for different Access Categories.
+// It defines 4 independant Wi-Fi networks (working on different logical channels
+// on the same "ns3::YansWifiPhy" channel object).
+// Each network contains one access point and one station. Each station continuously
+// transmits data packets to its respective AP.
+//
+// Network topology (numbers in parentheses are channel numbers):
+//
+//  BSS A (36)        BSS B (40)       BSS C (44)        BSS D (48)
+//   *      *          *      *         *      *          *      *
+//   |      |          |      |         |      |          |      |
+//  AP A   STA A      AP B   STA B     AP C   STA C      AP D   STA D
+//
+// The configuration is the following on the 4 networks:
+// - STA A sends AC_BE traffic to AP A with default AC_BE TXOP value of 0 (1 MSDU);
+// - STA B sends AC_BE traffic to AP B with non-default AC_BE TXOP of 3.008 ms;
+// - STA C sends AC_VI traffic to AP C with default AC_VI TXOP of 3.008 ms;
+// - STA D sends AC_VI traffic to AP D with non-default AC_VI TXOP value of 0 (1 MSDU);
+//
+// The user can select the distance between the stations and the APs, can enable/disable the RTS/CTS mechanism
+// and can choose the payload size and the simulation duration.
+// Example: ./waf --run "80211e-txop --distance=10 --enableRts=0 --simulationTime=20 --payloadSize=1000"
+//
+// The output prints the throughput measured for the 4 cases/networks decribed above. When TXOP is enabled, results show
+// increased throughput since the channel is granted for a longer duration. TXOP is enabled by default for AC_VI and AC_VO,
+// so that they can use the channel for a longer duration than AC_BE and AC_BK.
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("80211eTxop");
+
+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; //the default standard of 802.11a will be selected by this helper since the program doesn't specify another one
+  wifi.SetRemoteStationManager ("ns3::IdealWifiManager");
+  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",
+               "QosSupported", BooleanValue (true),
+               "Ssid", SsidValue (ssid));
+  staDeviceA = wifi.Install (phy, mac, wifiStaNode.Get(0));
+
+  mac.SetType ("ns3::ApWifiMac",
+               "QosSupported", BooleanValue (true),
+               "Ssid", SsidValue (ssid),
+               "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",
+               "QosSupported", BooleanValue (true),
+               "Ssid", SsidValue (ssid));
+
+  staDeviceB = wifi.Install (phy, mac, wifiStaNode.Get(1));
+
+  mac.SetType ("ns3::ApWifiMac",
+               "QosSupported", BooleanValue (true),
+               "Ssid", SsidValue (ssid),
+               "BeaconGeneration", BooleanValue (true));
+  apDeviceB = wifi.Install (phy, mac, wifiApNode.Get(1));
+  
+  //Modify EDCA configuration (TXOP limit) for AC_BE
+  Ptr<NetDevice> dev = wifiApNode.Get(1)->GetDevice(0);
+  Ptr<WifiNetDevice> wifi_dev = DynamicCast<WifiNetDevice>(dev);
+  Ptr<WifiMac> wifi_mac = wifi_dev->GetMac();
+  PointerValue ptr;
+  Ptr<EdcaTxopN> edca;
+  wifi_mac->GetAttribute("BE_EdcaTxopN", ptr);
+  edca = ptr.Get<EdcaTxopN>();
+  edca->SetTxopLimit (MicroSeconds (3008));
+  
+  //Network C
+  ssid = Ssid ("network-C");
+  phy.Set ("ChannelNumber", UintegerValue(44));
+  mac.SetType ("ns3::StaWifiMac",
+               "QosSupported", BooleanValue (true),
+               "Ssid", SsidValue (ssid));
+
+  staDeviceC = wifi.Install (phy, mac, wifiStaNode.Get(2));
+
+  mac.SetType ("ns3::ApWifiMac",
+               "QosSupported", BooleanValue (true),
+               "Ssid", SsidValue (ssid),
+               "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",
+               "QosSupported", BooleanValue (true),
+               "Ssid", SsidValue (ssid));
+
+  staDeviceD = wifi.Install (phy, mac, wifiStaNode.Get(3));
+
+  mac.SetType ("ns3::ApWifiMac",
+               "QosSupported", BooleanValue (true),
+               "Ssid", SsidValue (ssid),
+               "BeaconGeneration", BooleanValue (true));
+  apDeviceD = wifi.Install (phy, mac, wifiApNode.Get(3));
+  
+  //Modify EDCA configuration (TXOP limit) for AC_VO
+  dev = wifiApNode.Get(3)->GetDevice(0);
+  wifi_dev = DynamicCast<WifiNetDevice>(dev);
+  wifi_mac = wifi_dev->GetMac();
+  wifi_mac->GetAttribute("VI_EdcaTxopN", ptr);
+  edca = ptr.Get<EdcaTxopN>();
+  edca->SetTxopLimit (MicroSeconds (0));
+
+  /* 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 (5001);
+  ApplicationContainer serverAppA = myServerA.Install (wifiApNode.Get (0));
+  serverAppA.Start (Seconds (0.0));
+  serverAppA.Stop (Seconds (simulationTime + 1));
+  
+  InetSocketAddress destA (ApInterfaceA.GetAddress (0), 5001);
+  destA.SetTos (0x70); //AC_BE
+  
+  OnOffHelper myClientA ("ns3::UdpSocketFactory", destA);
+  myClientA.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+  myClientA.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+  myClientA.SetAttribute ("DataRate", StringValue("100000kb/s"));
+  myClientA.SetAttribute ("PacketSize", UintegerValue(payloadSize));
+
+  ApplicationContainer clientAppA = myClientA.Install (wifiStaNode.Get (0));
+  clientAppA.Start (Seconds (1.0));
+  clientAppA.Stop (Seconds (simulationTime + 1));
+  
+  UdpServerHelper myServerB (5001);
+  ApplicationContainer serverAppB = myServerB.Install (wifiApNode.Get (1));
+  serverAppB.Start (Seconds (0.0));
+  serverAppB.Stop (Seconds (simulationTime + 1));
+
+  InetSocketAddress destB (ApInterfaceB.GetAddress (0), 5001);
+  destB.SetTos (0x70); //AC_BE
+
+  OnOffHelper myClientB ("ns3::UdpSocketFactory", destB);
+  myClientB.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+  myClientB.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+  myClientB.SetAttribute ("DataRate", StringValue("100000kb/s"));
+  myClientB.SetAttribute ("PacketSize", UintegerValue(payloadSize));
+
+  ApplicationContainer clientAppB = myClientB.Install (wifiStaNode.Get (1));
+  clientAppB.Start (Seconds (1.0));
+  clientAppB.Stop (Seconds (simulationTime + 1));
+  
+  UdpServerHelper myServerC (5001);
+  ApplicationContainer serverAppC = myServerC.Install (wifiApNode.Get (2));
+  serverAppC.Start (Seconds (0.0));
+  serverAppC.Stop (Seconds (simulationTime + 1));
+
+  InetSocketAddress destC (ApInterfaceC.GetAddress (0), 5001);
+  destC.SetTos (0xb8); //AC_VI
+
+  OnOffHelper myClientC ("ns3::UdpSocketFactory", destC);
+  myClientC.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+  myClientC.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+  myClientC.SetAttribute ("DataRate", StringValue("100000kb/s"));
+  myClientC.SetAttribute ("PacketSize", UintegerValue(payloadSize));
+
+  ApplicationContainer clientAppC = myClientC.Install (wifiStaNode.Get (2));
+  clientAppC.Start (Seconds (1.0));
+  clientAppC.Stop (Seconds (simulationTime + 1));
+  
+  UdpServerHelper myServerD (5001);
+  ApplicationContainer serverAppD = myServerD.Install (wifiApNode.Get (3));
+  serverAppD.Start (Seconds (0.0));
+  serverAppD.Stop (Seconds (simulationTime + 1));
+
+  InetSocketAddress destD (ApInterfaceD.GetAddress (0), 5001);
+  destD.SetTos (0xb8); //AC_VI
+
+  OnOffHelper myClientD ("ns3::UdpSocketFactory", destD);
+  myClientD.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+  myClientD.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+  myClientD.SetAttribute ("DataRate", StringValue("100000kb/s"));
+  myClientD.SetAttribute ("PacketSize", UintegerValue(payloadSize));
+
+  ApplicationContainer clientAppD = myClientD.Install (wifiStaNode.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 for AC_BE with default TXOP limit (0ms): " << throughput << " Mbit/s" << '\n';
+  
+  totalPacketsThrough = DynamicCast<UdpServer> (serverAppB.Get (0))->GetReceived ();
+  throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0);
+  std::cout << "Throughput for AC_BE with non-default TXOP limit (3.008ms): " << throughput << " Mbit/s" << '\n';
+  
+  totalPacketsThrough = DynamicCast<UdpServer> (serverAppC.Get (0))->GetReceived ();
+  throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0);
+  std::cout << "Throughput for AC_VI with default TXOP limit (3.008ms): " << throughput << " Mbit/s" << '\n';
+  
+  totalPacketsThrough = DynamicCast<UdpServer> (serverAppD.Get (0))->GetReceived ();
+  throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0);
+  std::cout << "Throughput for AC_VI with non-default TXOP limit (0ms): " << throughput << " Mbit/s" << '\n';
+
+  return 0;
+}
diff -Naur ns-3.25/examples/wireless/80211n-mimo.cc ns-3.26/examples/wireless/80211n-mimo.cc
--- ns-3.25/examples/wireless/80211n-mimo.cc	2016-10-03 20:57:08.288247316 -0700
+++ ns-3.26/examples/wireless/80211n-mimo.cc	2016-10-03 19:49:01.592388063 -0700
@@ -158,8 +158,7 @@
           Ssid ssid = Ssid ("ns3-80211n");
 
           mac.SetType ("ns3::StaWifiMac",
-                       "Ssid", SsidValue (ssid),
-                       "ActiveProbing", BooleanValue (false));
+                       "Ssid", SsidValue (ssid));
 
           NetDeviceContainer staDevice;
           staDevice = wifi.Install (phy, mac, wifiStaNode);
diff -Naur ns-3.25/examples/wireless/examples-to-run.py ns-3.26/examples/wireless/examples-to-run.py
--- ns-3.25/examples/wireless/examples-to-run.py	2016-10-03 20:57:08.289247308 -0700
+++ ns-3.26/examples/wireless/examples-to-run.py	2016-10-03 19:49:01.592388063 -0700
@@ -32,6 +32,10 @@
     ("ofdm-vht-validation", "True", "True"),
     ("mixed-bg-network", "True", "True"),
     ("wifi-tcp", "True", "True"),
+    ("wifi-spectrum-per-example --distance=52 --index=3 --wifiType=ns3::SpectrumWifiPhy --simulationTime=1", "True", "True"),
+    ("wifi-spectrum-per-example --distance=24 --index=31 --wifiType=ns3::YansWifiPhy --simulationTime=1", "True", "True"),
+    ("wifi-spectrum-per-interference --distance=24 --index=31 --simulationTime=1 --waveformPower=0.1", "True", "True"),
+    ("wifi-spectrum-saturation-example --simulationTime=1 --index=63", "True", "True"),
 ]
 
 # A list of Python examples to run in order to ensure that they remain
diff -Naur ns-3.25/examples/wireless/ht-wifi-network.cc ns-3.26/examples/wireless/ht-wifi-network.cc
--- ns-3.25/examples/wireless/ht-wifi-network.cc	2016-10-03 20:57:08.289247308 -0700
+++ ns-3.26/examples/wireless/ht-wifi-network.cc	2016-10-03 19:49:01.593388055 -0700
@@ -117,8 +117,7 @@
               Ssid ssid = Ssid ("ns3-80211n");
 
               mac.SetType ("ns3::StaWifiMac",
-                           "Ssid", SsidValue (ssid),
-                           "ActiveProbing", BooleanValue (false));
+                           "Ssid", SsidValue (ssid));
 
               NetDeviceContainer staDevice;
               staDevice = wifi.Install (phy, mac, wifiStaNode);
diff -Naur ns-3.25/examples/wireless/mixed-bg-network.cc ns-3.26/examples/wireless/mixed-bg-network.cc
--- ns-3.25/examples/wireless/mixed-bg-network.cc	2016-10-03 20:57:08.290247301 -0700
+++ ns-3.26/examples/wireless/mixed-bg-network.cc	2016-10-03 19:49:01.593388055 -0700
@@ -102,7 +102,6 @@
 
   mac.SetType ("ns3::StaWifiMac",
                "Ssid", SsidValue (ssid),
-               "ActiveProbing", BooleanValue (false),
                "ShortSlotTimeSupported", BooleanValue (enableShortSlotTime));
     
   // Configure the PLCP preamble type: long or short
diff -Naur ns-3.25/examples/wireless/mixed-wireless.cc ns-3.26/examples/wireless/mixed-wireless.cc
--- ns-3.25/examples/wireless/mixed-wireless.cc	2016-10-03 20:57:08.290247301 -0700
+++ ns-3.26/examples/wireless/mixed-wireless.cc	2016-10-03 19:49:01.594388048 -0700
@@ -295,8 +295,7 @@
       wifiInfra.SetRemoteStationManager ("ns3::ArfWifiManager");
       // setup stas
       macInfra.SetType ("ns3::StaWifiMac",
-                        "Ssid", SsidValue (ssid),
-                        "ActiveProbing", BooleanValue (false));
+                        "Ssid", SsidValue (ssid));
       NetDeviceContainer staDevices = wifiInfra.Install (wifiPhy, macInfra, stas);
       // setup ap.
       macInfra.SetType ("ns3::ApWifiMac",
diff -Naur ns-3.25/examples/wireless/power-adaptation-distance.cc ns-3.26/examples/wireless/power-adaptation-distance.cc
--- ns-3.25/examples/wireless/power-adaptation-distance.cc	2016-10-03 20:57:08.293247277 -0700
+++ ns-3.26/examples/wireless/power-adaptation-distance.cc	2016-10-03 19:49:01.597388026 -0700
@@ -362,8 +362,7 @@
 
   Ssid ssid = Ssid ("AP");
   wifiMac.SetType ("ns3::StaWifiMac",
-                   "Ssid", SsidValue (ssid),
-                   "ActiveProbing", BooleanValue (false));
+                   "Ssid", SsidValue (ssid));
   wifiStaDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiStaNodes.Get (0)));
 
   //Configure the AP node
diff -Naur ns-3.25/examples/wireless/power-adaptation-interference.cc ns-3.26/examples/wireless/power-adaptation-interference.cc
--- ns-3.25/examples/wireless/power-adaptation-interference.cc	2016-10-03 20:57:08.294247269 -0700
+++ ns-3.26/examples/wireless/power-adaptation-interference.cc	2016-10-03 19:49:01.597388026 -0700
@@ -402,14 +402,12 @@
   Ssid ssid = Ssid ("AP0");
   wifiMac.SetType ("ns3::StaWifiMac",
                    "Ssid", SsidValue (ssid),
-                   "ActiveProbing", BooleanValue (false),
                    "MaxMissedBeacons", UintegerValue (1000));
   wifiStaDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiStaNodes.Get (0)));
 
   ssid = Ssid ("AP1");
   wifiMac.SetType ("ns3::StaWifiMac",
-                   "Ssid", SsidValue (ssid),
-                   "ActiveProbing", BooleanValue (false));
+                   "Ssid", SsidValue (ssid));
   wifiStaDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiStaNodes.Get (1)));
 
   //Configure the AP nodes
diff -Naur ns-3.25/examples/wireless/rate-adaptation-distance.cc ns-3.26/examples/wireless/rate-adaptation-distance.cc
--- ns-3.25/examples/wireless/rate-adaptation-distance.cc	2016-10-03 20:57:08.294247269 -0700
+++ ns-3.26/examples/wireless/rate-adaptation-distance.cc	2016-10-03 19:49:01.598388018 -0700
@@ -221,8 +221,7 @@
 
       Ssid ssid = Ssid ("AP");
       wifiMac.SetType ("ns3::StaWifiMac",
-                       "Ssid", SsidValue (ssid),
-                       "ActiveProbing", BooleanValue (false));
+                       "Ssid", SsidValue (ssid));
       wifiStaDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiStaNodes.Get (0)));
 
       //Configure the AP node
@@ -252,7 +251,6 @@
       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)));
 
@@ -276,7 +274,6 @@
       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)));
 
diff -Naur ns-3.25/examples/wireless/simple-ht-hidden-stations.cc ns-3.26/examples/wireless/simple-ht-hidden-stations.cc
--- ns-3.25/examples/wireless/simple-ht-hidden-stations.cc	2016-10-03 20:57:08.295247262 -0700
+++ ns-3.26/examples/wireless/simple-ht-hidden-stations.cc	2016-10-03 19:49:01.598388018 -0700
@@ -71,8 +71,6 @@
       Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("0"));
     }
 
-  Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("990000"));
-
   //Set the maximum size for A-MPDU with regards to the payload size
   maxAmpduSize = nMpdus * (payloadSize + 200);
 
@@ -99,7 +97,6 @@
   Ssid ssid = Ssid ("simple-mpdu-aggregation");
   mac.SetType ("ns3::StaWifiMac",
                "Ssid", SsidValue (ssid),
-               "ActiveProbing", BooleanValue (false),
                "BE_MaxAmpduSize", UintegerValue (maxAmpduSize));
 
   NetDeviceContainer staDevices;
@@ -107,7 +104,6 @@
 
   mac.SetType ("ns3::ApWifiMac",
                "Ssid", SsidValue (ssid),
-               "BeaconInterval", TimeValue (MicroSeconds (102400)),
                "BeaconGeneration", BooleanValue (true),
                "BE_MaxAmpduSize", UintegerValue (maxAmpduSize));
 
diff -Naur ns-3.25/examples/wireless/vht-wifi-network.cc ns-3.26/examples/wireless/vht-wifi-network.cc
--- ns-3.25/examples/wireless/vht-wifi-network.cc	2016-10-03 20:57:08.295247262 -0700
+++ ns-3.26/examples/wireless/vht-wifi-network.cc	2016-10-03 19:49:01.598388018 -0700
@@ -106,8 +106,7 @@
               Ssid ssid = Ssid ("ns3-80211ac");
 
               mac.SetType ("ns3::StaWifiMac",
-                           "Ssid", SsidValue (ssid),
-                           "ActiveProbing", BooleanValue (false));
+                           "Ssid", SsidValue (ssid));
 
               NetDeviceContainer staDevice;
               staDevice = wifi.Install (phy, mac, wifiStaNode);
diff -Naur ns-3.25/examples/wireless/wifi-aggregation.cc ns-3.26/examples/wireless/wifi-aggregation.cc
--- ns-3.25/examples/wireless/wifi-aggregation.cc	2016-10-03 20:57:08.296247254 -0700
+++ ns-3.26/examples/wireless/wifi-aggregation.cc	2016-10-03 19:49:01.599388011 -0700
@@ -100,13 +100,11 @@
   ssid = Ssid ("network-A");
   phy.Set ("ChannelNumber", UintegerValue(36));
   mac.SetType ("ns3::StaWifiMac",
-               "Ssid", SsidValue (ssid),
-               "ActiveProbing", BooleanValue (false));
+               "Ssid", SsidValue (ssid));
   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));
   
@@ -115,14 +113,12 @@
   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));
   
@@ -131,7 +127,6 @@
   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)
 
@@ -139,7 +134,6 @@
 
   mac.SetType ("ns3::ApWifiMac",
                "Ssid", SsidValue (ssid),
-               "BeaconInterval", TimeValue (MicroSeconds (102400)),
                "BeaconGeneration", BooleanValue (true));
   apDeviceC = wifi.Install (phy, mac, wifiApNode.Get(2));
   
@@ -148,7 +142,6 @@
   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)
 
@@ -156,7 +149,6 @@
 
   mac.SetType ("ns3::ApWifiMac",
                "Ssid", SsidValue (ssid),
-               "BeaconInterval", TimeValue (MicroSeconds (102400)),
                "BeaconGeneration", BooleanValue (true));
   apDeviceD = wifi.Install (phy, mac, wifiApNode.Get(3));
 
diff -Naur ns-3.25/examples/wireless/wifi-ap.cc ns-3.26/examples/wireless/wifi-ap.cc
--- ns-3.25/examples/wireless/wifi-ap.cc	2016-10-03 20:57:08.296247254 -0700
+++ ns-3.26/examples/wireless/wifi-ap.cc	2016-10-03 19:49:01.600388003 -0700
@@ -150,8 +150,7 @@
   wifi.SetRemoteStationManager ("ns3::ArfWifiManager");
   // setup stas.
   wifiMac.SetType ("ns3::StaWifiMac",
-                   "Ssid", SsidValue (ssid),
-                   "ActiveProbing", BooleanValue (false));
+                   "Ssid", SsidValue (ssid));
   staDevs = wifi.Install (wifiPhy, wifiMac, stas);
   // setup ap.
   wifiMac.SetType ("ns3::ApWifiMac",
diff -Naur ns-3.25/examples/wireless/wifi-blockack.cc ns-3.26/examples/wireless/wifi-blockack.cc
--- ns-3.25/examples/wireless/wifi-blockack.cc	2016-10-03 20:57:08.297247246 -0700
+++ ns-3.26/examples/wireless/wifi-blockack.cc	2016-10-03 19:49:01.600388003 -0700
@@ -50,8 +50,11 @@
 
 NS_LOG_COMPONENT_DEFINE ("Test-block-ack");
 
-int main (int argc, char const* argv[])
+int main (int argc, char * argv[])
 {
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
   LogComponentEnable ("EdcaTxopN", LOG_LEVEL_DEBUG);
   LogComponentEnable ("BlockAckManager", LOG_LEVEL_INFO);
  
@@ -72,7 +75,6 @@
   mac.SetType ("ns3::StaWifiMac",
                "QosSupported", BooleanValue (true),
                "Ssid", SsidValue (ssid),
-               "ActiveProbing", BooleanValue (false),
   /* setting blockack threshold for sta's BE queue */
                "BE_BlockAckThreshold", UintegerValue (2),
   /* setting block inactivity timeout to 3*1024 = 3072 microseconds */
diff -Naur ns-3.25/examples/wireless/wifi-hidden-terminal.cc ns-3.26/examples/wireless/wifi-hidden-terminal.cc
--- ns-3.25/examples/wireless/wifi-hidden-terminal.cc	2016-10-03 20:57:08.298247238 -0700
+++ ns-3.26/examples/wireless/wifi-hidden-terminal.cc	2016-10-03 19:49:01.601387996 -0700
@@ -177,6 +177,9 @@
 
 int main (int argc, char **argv)
 {
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
   std::cout << "Hidden station experiment with RTS/CTS disabled:\n" << std::flush;
   experiment (false);
   std::cout << "------------------------------------------------\n";
diff -Naur ns-3.25/examples/wireless/wifi-simple-infra.cc ns-3.26/examples/wireless/wifi-simple-infra.cc
--- ns-3.25/examples/wireless/wifi-simple-infra.cc	2016-10-03 20:57:08.299247230 -0700
+++ ns-3.26/examples/wireless/wifi-simple-infra.cc	2016-10-03 19:49:01.603387981 -0700
@@ -157,8 +157,7 @@
   Ssid ssid = Ssid ("wifi-default");
   // setup sta.
   wifiMac.SetType ("ns3::StaWifiMac",
-                   "Ssid", SsidValue (ssid),
-                   "ActiveProbing", BooleanValue (false));
+                   "Ssid", SsidValue (ssid));
   NetDeviceContainer staDevice = wifi.Install (wifiPhy, wifiMac, c.Get (0));
   NetDeviceContainer devices = staDevice;
   // setup ap.
diff -Naur ns-3.25/examples/wireless/wifi-spectrum-per-example.cc ns-3.26/examples/wireless/wifi-spectrum-per-example.cc
--- ns-3.25/examples/wireless/wifi-spectrum-per-example.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/examples/wireless/wifi-spectrum-per-example.cc	2016-10-03 19:49:01.604387973 -0700
@@ -0,0 +1,568 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 MIRKO BANCHI
+ * Copyright (c) 2015 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: Mirko Banchi <mk.banchi@gmail.com>
+ *          Sebastien Deronne <sebastien.deronne@gmail.com>
+ *          Tom Henderson <tomhend@u.washington.edu>
+ *
+ * Adapted from ht-wifi-network.cc example
+ */
+#include <sstream>
+#include <iomanip>
+
+#include "ns3/core-module.h"
+#include "ns3/config-store-module.h"
+#include "ns3/network-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/wifi-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/spectrum-module.h"
+#include "ns3/internet-module.h"
+
+// This is a simple example of an IEEE 802.11n Wi-Fi network.
+//
+// The main use case is to enable and test SpectrumWifiPhy vs YansWifiPhy
+// for packet error ratio
+//
+// Network topology:
+//
+//  Wi-Fi 192.168.1.0
+//
+//   STA                  AP
+//    * <-- distance -->  *
+//    |                   |
+//    n1                  n2
+//
+// Users may vary the following command-line arguments in addition to the
+// attributes, global values, and default values typically available:
+//
+//    --simulationTime:  Simulation time in seconds [10]
+//    --udp:             UDP if set to 1, TCP otherwise [true]
+//    --distance:        meters separation between nodes [50]
+//    --index:           restrict index to single value between 0 and 31 [256]
+//    --wifiType:        select ns3::SpectrumWifiPhy or ns3::YansWifiPhy [ns3::SpectrumWifiPhy]
+//    --errorModelType:  select ns3::NistErrorRateModel or ns3::YansErrorRateModel [ns3::NistErrorRateModel]
+//    --enablePcap:      enable pcap output [false]
+//
+// By default, the program will step through 32 index values, corresponding
+// to the following MCS, channel width, and guard interval combinations:
+//   index 0-7:    MCS 0-7, long guard interval, 20 MHz channel
+//   index 8-15:   MCS 0-7, short guard interval, 20 MHz channel
+//   index 16-23:  MCS 0-7, long guard interval, 40 MHz channel
+//   index 24-31:  MCS 0-7, short guard interval, 40 MHz channel
+// and send 1000 UDP packets using each MCS, using the SpectrumWifiPhy and the
+// NistErrorRateModel, at a distance of 50 meters.  The program outputs
+// results such as:
+//
+// wifiType: ns3::SpectrumWifiPhy distance: 50m; sent: 1000
+// index   MCS Rate (Mb/s) Tput (Mb/s) Received Signal (dBm) Noise (dBm) SNR (dB)
+//     0     0       6.5      0.7776    1000    -77.6633    -100.966     23.3027
+//     1     1        13      0.7776    1000    -77.6633    -100.966     23.3027
+//     2     2      19.5      0.7776    1000    -77.6633    -100.966     23.3027
+//     3     3        26      0.7776    1000    -77.6633    -100.966     23.3027
+//  ...
+//
+// When UDP is used, the throughput will always be 0.7776 Mb/s since the
+// traffic generator does not attempt to match the maximum Phy data rate
+// but instead sends at a constant rate.  When TCP is used, the TCP flow
+// will exhibit different throughput depending on the index.
+
+using namespace ns3;
+
+// Global variables for use in callbacks.
+double g_signalDbmAvg;
+double g_noiseDbmAvg;
+uint32_t g_samples;
+uint16_t g_channelNumber;
+uint32_t g_rate;
+
+void MonitorSniffRx (Ptr<const Packet> packet, uint16_t channelFreqMhz,
+                     uint16_t channelNumber, uint32_t rate,
+                     WifiPreamble preamble, WifiTxVector txVector,
+                     struct mpduInfo aMpdu, struct signalNoiseDbm signalNoise)
+
+{
+  g_samples++;
+  g_signalDbmAvg += ((signalNoise.signal - g_signalDbmAvg) / g_samples);
+  g_noiseDbmAvg += ((signalNoise.noise - g_noiseDbmAvg) / g_samples);
+  g_rate = rate;
+  g_channelNumber = channelNumber;
+}
+
+NS_LOG_COMPONENT_DEFINE ("WifiSpectrumPerExample");
+
+int main (int argc, char *argv[])
+{
+  bool udp = true;
+  double distance = 50;
+  double simulationTime = 10; //seconds
+  uint16_t index = 256;
+  std::string wifiType = "ns3::SpectrumWifiPhy";
+  std::string errorModelType = "ns3::NistErrorRateModel";
+  bool enablePcap = false;
+  const uint32_t tcpPacketSize = 1448;
+
+  CommandLine cmd;
+  cmd.AddValue ("simulationTime", "Simulation time in seconds", simulationTime);
+  cmd.AddValue ("udp", "UDP if set to 1, TCP otherwise", udp);
+  cmd.AddValue ("distance", "meters separation between nodes", distance);
+  cmd.AddValue ("index", "restrict index to single value between 0 and 31", index);
+  cmd.AddValue ("wifiType", "select ns3::SpectrumWifiPhy or ns3::YansWifiPhy", wifiType);
+  cmd.AddValue ("errorModelType", "select ns3::NistErrorRateModel or ns3::YansErrorRateModel", errorModelType);
+  cmd.AddValue ("enablePcap", "enable pcap output", enablePcap);
+  cmd.Parse (argc,argv);
+
+  uint16_t startIndex = 0;
+  uint16_t stopIndex = 31;
+  if (index < 32)
+    {
+      startIndex = index;
+      stopIndex = index;
+    }
+
+  std::cout << "wifiType: " << wifiType << " distance: " << distance << "m; sent: 1000 TxPower: 1 dBm (1.3 mW)" << std::endl;
+  std::cout << std::setw (5) << "index" <<
+    std::setw (6) << "MCS" <<
+    std::setw (12) << "Rate (Mb/s)" <<
+    std::setw (12) << "Tput (Mb/s)" <<
+    std::setw (10) << "Received " <<
+    std::setw (12) << "Signal (dBm)" <<
+    std::setw (12) << "Noise (dBm)" <<
+    std::setw (10) << "SNR (dB)" <<
+    std::endl;
+  for (uint16_t i = startIndex; i <= stopIndex; i++)
+    {
+      uint32_t payloadSize;
+      if (udp)
+        {
+          payloadSize = 972; // 1000 bytes IPv4
+        }
+      else
+        {
+          payloadSize = 1448; // 1500 bytes IPv6
+          Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (payloadSize));
+        }
+
+      NodeContainer wifiStaNode;
+      wifiStaNode.Create (1);
+      NodeContainer wifiApNode;
+      wifiApNode.Create (1);
+
+      YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
+      SpectrumWifiPhyHelper spectrumPhy = SpectrumWifiPhyHelper::Default ();
+      if (wifiType == "ns3::YansWifiPhy")
+        {
+          YansWifiChannelHelper channel;
+          channel.AddPropagationLoss ("ns3::FriisPropagationLossModel");
+          channel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
+          phy.SetChannel (channel.Create ());
+          phy.Set ("TxPowerStart", DoubleValue (1)); // dBm (1.26 mW)
+          phy.Set ("TxPowerEnd", DoubleValue (1));
+
+          if (i <= 7)
+            {
+              phy.Set ("ShortGuardEnabled", BooleanValue (false));
+              phy.Set ("ChannelWidth", UintegerValue (20));
+            }
+          else if (i > 7 && i <= 15)
+            {
+              phy.Set ("ShortGuardEnabled", BooleanValue (true));
+              phy.Set ("ChannelWidth", UintegerValue (20));
+            }
+          else if (i > 15 && i <= 23)
+            {
+              phy.Set ("ShortGuardEnabled", BooleanValue (false));
+              phy.Set ("ChannelWidth", UintegerValue (40));
+            }
+          else
+            {
+              phy.Set ("ShortGuardEnabled", BooleanValue (true));
+              phy.Set ("ChannelWidth", UintegerValue (40));
+            }
+        }
+      else if (wifiType == "ns3::SpectrumWifiPhy")
+        {
+          //Bug 2460: CcaMode1Threshold default should be set to -62 dBm when using Spectrum
+          Config::SetDefault ("ns3::WifiPhy::CcaMode1Threshold", DoubleValue (-62.0));
+          
+          Ptr<MultiModelSpectrumChannel> spectrumChannel
+            = CreateObject<MultiModelSpectrumChannel> ();
+          Ptr<FriisPropagationLossModel> lossModel
+            = CreateObject<FriisPropagationLossModel> ();
+          spectrumChannel->AddPropagationLossModel (lossModel);
+
+          Ptr<ConstantSpeedPropagationDelayModel> delayModel
+            = CreateObject<ConstantSpeedPropagationDelayModel> ();
+          spectrumChannel->SetPropagationDelayModel (delayModel);
+
+          spectrumPhy.SetChannel (spectrumChannel);
+          spectrumPhy.SetErrorRateModel (errorModelType);
+          spectrumPhy.Set ("Frequency", UintegerValue (5180));
+          spectrumPhy.Set ("TxPowerStart", DoubleValue (1)); // dBm  (1.26 mW)
+          spectrumPhy.Set ("TxPowerEnd", DoubleValue (1));
+
+          if (i <= 7)
+            {
+              spectrumPhy.Set ("ShortGuardEnabled", BooleanValue (false));
+              spectrumPhy.Set ("ChannelWidth", UintegerValue (20));
+            }
+          else if (i > 7 && i <= 15)
+            {
+              spectrumPhy.Set ("ShortGuardEnabled", BooleanValue (true));
+              spectrumPhy.Set ("ChannelWidth", UintegerValue (20));
+            }
+          else if (i > 15 && i <= 23)
+            {
+              spectrumPhy.Set ("ShortGuardEnabled", BooleanValue (false));
+              spectrumPhy.Set ("ChannelWidth", UintegerValue (40));
+            }
+          else
+            {
+              spectrumPhy.Set ("ShortGuardEnabled", BooleanValue (true));
+              spectrumPhy.Set ("ChannelWidth", UintegerValue (40));
+            }
+        }
+      else
+        {
+          NS_FATAL_ERROR ("Unsupported WiFi type " << wifiType);
+        }
+
+
+      WifiHelper wifi;
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      WifiMacHelper mac;
+
+      Ssid ssid = Ssid ("ns380211n");
+
+      double datarate = 0;
+      StringValue DataRate;
+      if (i == 0)
+        {
+          DataRate = StringValue ("HtMcs0");
+          datarate = 6.5;
+        }
+      else if (i == 1)
+        {
+          DataRate = StringValue ("HtMcs1");
+          datarate = 13;
+        }
+      else if (i == 2)
+        {
+          DataRate = StringValue ("HtMcs2");
+          datarate = 19.5;
+        }
+      else if (i == 3)
+        {
+          DataRate = StringValue ("HtMcs3");
+          datarate = 26;
+        }
+      else if (i == 4)
+        {
+          DataRate = StringValue ("HtMcs4");
+          datarate = 39;
+        }
+      else if (i == 5)
+        {
+          DataRate = StringValue ("HtMcs5");
+          datarate = 52;
+        }
+      else if (i == 6)
+        {
+          DataRate = StringValue ("HtMcs6");
+          datarate = 58.5;
+        }
+      else if (i == 7)
+        {
+          DataRate = StringValue ("HtMcs7");
+          datarate = 65;
+        }
+      else if (i == 8)
+        {
+          DataRate = StringValue ("HtMcs0");
+          datarate = 7.2;
+        }
+      else if (i == 9)
+        {
+          DataRate = StringValue ("HtMcs1");
+          datarate = 14.4;
+        }
+      else if (i == 10)
+        {
+          DataRate = StringValue ("HtMcs2");
+          datarate = 21.7;
+        }
+      else if (i == 11)
+        {
+          DataRate = StringValue ("HtMcs3");
+          datarate = 28.9;
+        }
+      else if (i == 12)
+        {
+          DataRate = StringValue ("HtMcs4");
+          datarate = 43.3;
+        }
+      else if (i == 13)
+        {
+          DataRate = StringValue ("HtMcs5");
+          datarate = 57.8;
+        }
+      else if (i == 14)
+        {
+          DataRate = StringValue ("HtMcs6");
+          datarate = 65;
+        }
+      else if (i == 15)
+        {
+          DataRate = StringValue ("HtMcs7");
+          datarate = 72.2;
+        }
+      else if (i == 16)
+        {
+          DataRate = StringValue ("HtMcs0");
+          datarate = 13.5;
+        }
+      else if (i == 17)
+        {
+          DataRate = StringValue ("HtMcs1");
+          datarate = 27;
+        }
+      else if (i == 18)
+        {
+          DataRate = StringValue ("HtMcs2");
+          datarate = 40.5;
+        }
+      else if (i == 19)
+        {
+          DataRate = StringValue ("HtMcs3");
+          datarate = 54;
+        }
+      else if (i == 20)
+        {
+          DataRate = StringValue ("HtMcs4");
+          datarate = 81;
+        }
+      else if (i == 21)
+        {
+          DataRate = StringValue ("HtMcs5");
+          datarate = 108;
+        }
+      else if (i == 22)
+        {
+          DataRate = StringValue ("HtMcs6");
+          datarate = 121.5;
+        }
+      else if (i == 23)
+        {
+          DataRate = StringValue ("HtMcs7");
+          datarate = 135;
+        }
+      else if (i == 24)
+        {
+          DataRate = StringValue ("HtMcs0");
+          datarate = 15;
+        }
+      else if (i == 25)
+        {
+          DataRate = StringValue ("HtMcs1");
+          datarate = 30;
+        }
+      else if (i == 26)
+        {
+          DataRate = StringValue ("HtMcs2");
+          datarate = 45;
+        }
+      else if (i == 27)
+        {
+          DataRate = StringValue ("HtMcs3");
+          datarate = 60;
+        }
+      else if (i == 28)
+        {
+          DataRate = StringValue ("HtMcs4");
+          datarate = 90;
+        }
+      else if (i == 29)
+        {
+          DataRate = StringValue ("HtMcs5");
+          datarate = 120;
+        }
+      else if (i == 30)
+        {
+          DataRate = StringValue ("HtMcs6");
+          datarate = 135;
+        }
+      else
+        {
+          DataRate = StringValue ("HtMcs7");
+          datarate = 150;
+        }
+
+      wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager","DataMode", DataRate,
+                                    "ControlMode", DataRate);
+
+      NetDeviceContainer staDevice;
+      NetDeviceContainer apDevice;
+
+      if (wifiType == "ns3::YansWifiPhy")
+        {
+          mac.SetType ("ns3::StaWifiMac",
+                       "Ssid", SsidValue (ssid),
+                       "ActiveProbing", BooleanValue (false));
+          staDevice = wifi.Install (phy, mac, wifiStaNode);
+          mac.SetType ("ns3::ApWifiMac",
+                       "Ssid", SsidValue (ssid));
+          apDevice = wifi.Install (phy, mac, wifiApNode);
+
+        }
+      else if (wifiType == "ns3::SpectrumWifiPhy")
+        {
+          mac.SetType ("ns3::StaWifiMac",
+                       "Ssid", SsidValue (ssid),
+                       "ActiveProbing", BooleanValue (false));
+          staDevice = wifi.Install (spectrumPhy, mac, wifiStaNode);
+          mac.SetType ("ns3::ApWifiMac",
+                       "Ssid", SsidValue (ssid));
+          apDevice = wifi.Install (spectrumPhy, mac, wifiApNode);
+        }
+
+      // mobility.
+      MobilityHelper mobility;
+      Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+
+      positionAlloc->Add (Vector (0.0, 0.0, 0.0));
+      positionAlloc->Add (Vector (distance, 0.0, 0.0));
+      mobility.SetPositionAllocator (positionAlloc);
+
+      mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+
+      mobility.Install (wifiApNode);
+      mobility.Install (wifiStaNode);
+
+      /* Internet stack*/
+      InternetStackHelper stack;
+      stack.Install (wifiApNode);
+      stack.Install (wifiStaNode);
+
+      Ipv4AddressHelper address;
+
+      address.SetBase ("192.168.1.0", "255.255.255.0");
+      Ipv4InterfaceContainer staNodeInterface;
+      Ipv4InterfaceContainer apNodeInterface;
+
+      staNodeInterface = address.Assign (staDevice);
+      apNodeInterface = address.Assign (apDevice);
+
+      /* Setting applications */
+      ApplicationContainer serverApp, sinkApp;
+      if (udp)
+        {
+          //UDP flow
+          UdpServerHelper myServer (9);
+          serverApp = myServer.Install (wifiStaNode.Get (0));
+          serverApp.Start (Seconds (0.0));
+          serverApp.Stop (Seconds (simulationTime + 1));
+
+          UdpClientHelper myClient (staNodeInterface.GetAddress (0), 9);
+          myClient.SetAttribute ("MaxPackets", UintegerValue (1000));
+          myClient.SetAttribute ("Interval", TimeValue (MilliSeconds (5)));
+          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));
+        }
+
+      Config::ConnectWithoutContext ("/NodeList/0/DeviceList/*/Phy/MonitorSnifferRx", MakeCallback (&MonitorSniffRx));
+
+      if (enablePcap)
+        {
+          std::stringstream ss;
+          ss << "wifi-spectrum-per-example-" << i;
+          phy.EnablePcap (ss.str (), apDevice);
+        }
+      g_signalDbmAvg = 0;
+      g_noiseDbmAvg = 0;
+      g_samples = 0;
+      g_channelNumber = 0;
+      g_rate = 0;
+
+      Simulator::Stop (Seconds (simulationTime + 1));
+      Simulator::Run ();
+
+      double throughput = 0;
+      uint32_t totalPacketsThrough = 0;
+      if (udp)
+        {
+          //UDP
+          totalPacketsThrough = DynamicCast<UdpServer> (serverApp.Get (0))->GetReceived ();
+          throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0); //Mbit/s
+        }
+      else
+        {
+          //TCP
+          uint32_t totalBytesRx = DynamicCast<PacketSink> (sinkApp.Get (0))->GetTotalRx ();
+          totalPacketsThrough = totalBytesRx / tcpPacketSize;
+          throughput = totalBytesRx * 8 / (simulationTime * 1000000.0); //Mbit/s
+        }
+      std::cout << std::setw (5) << i <<
+        std::setw (6) << (i % 8) <<
+        std::setw (10) << datarate <<
+        std::setw (12) << throughput <<
+        std::setw (8) << totalPacketsThrough;
+      if (totalPacketsThrough > 0)
+        {
+          std::cout << std::setw (12) << g_signalDbmAvg <<
+            std::setw (12) << g_noiseDbmAvg <<
+            std::setw (12) << (g_signalDbmAvg - g_noiseDbmAvg) <<
+            std::endl;
+        }
+      else
+        {
+          std::cout << std::setw (12) << "N/A" <<
+            std::setw (12) << "N/A" <<
+            std::setw (12) << "N/A" <<
+            std::endl;
+        }
+      Simulator::Destroy ();
+    }
+  return 0;
+}
diff -Naur ns-3.25/examples/wireless/wifi-spectrum-per-interference.cc ns-3.26/examples/wireless/wifi-spectrum-per-interference.cc
--- ns-3.25/examples/wireless/wifi-spectrum-per-interference.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/examples/wireless/wifi-spectrum-per-interference.cc	2016-10-03 19:49:01.605387966 -0700
@@ -0,0 +1,630 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 MIRKO BANCHI
+ * Copyright (c) 2015 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: Mirko Banchi <mk.banchi@gmail.com>
+ *          Sebastien Deronne <sebastien.deronne@gmail.com>
+ *          Tom Henderson <tomhend@u.washington.edu>
+ *
+ * Adapted from ht-wifi-network.cc example
+ */
+#include <sstream>
+#include <iomanip>
+
+#include "ns3/core-module.h"
+#include "ns3/config-store-module.h"
+#include "ns3/network-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/wifi-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/spectrum-module.h"
+#include "ns3/internet-module.h"
+
+// This is a simple example of an IEEE 802.11n Wi-Fi network with a
+// non-Wi-Fi interferer.  It is an adaptation of the wifi-spectrum-per-example
+//
+// Unless the --waveformPower argument is passed, it will behave like
+// wifi-spectrum-per-example.  Adding --waveformPower=value for values
+// greater than 0.0001 will result in frame losses beyond those that
+// result from the normal SNR based on distance path loss.
+//
+// If YansWifiPhy is selected as the wifiType, --waveformPower will have
+// no effect.
+//
+// Network topology:
+//
+//  Wi-Fi 192.168.1.0
+//
+//   STA                  AP
+//    * <-- distance -->  *
+//    |                   |
+//    n1                  n2
+//
+// Users may vary the following command-line arguments in addition to the
+// attributes, global values, and default values typically available:
+//
+//    --simulationTime:  Simulation time in seconds [10]
+//    --udp:             UDP if set to 1, TCP otherwise [true]
+//    --distance:        meters separation between nodes [50]
+//    --index:           restrict index to single value between 0 and 31 [256]
+//    --wifiType:        select ns3::SpectrumWifiPhy or ns3::YansWifiPhy [ns3::SpectrumWifiPhy]
+//    --errorModelType:  select ns3::NistErrorRateModel or ns3::YansErrorRateModel [ns3::NistErrorRateModel]
+//    --enablePcap:      enable pcap output [false]
+//    --waveformPower:   Waveform power [0]
+//
+// By default, the program will step through 32 index values, corresponding
+// to the following MCS, channel width, and guard interval combinations:
+//   index 0-7:    MCS 0-7, long guard interval, 20 MHz channel
+//   index 8-15:   MCS 0-7, short guard interval, 20 MHz channel
+//   index 16-23:  MCS 0-7, long guard interval, 40 MHz channel
+//   index 24-31:  MCS 0-7, short guard interval, 40 MHz channel
+// and send 1000 UDP packets using each MCS, using the SpectrumWifiPhy and the
+// NistErrorRateModel, at a distance of 50 meters.  The program outputs
+// results such as:
+//
+// wifiType: ns3::SpectrumWifiPhy distance: 50m; sent: 1000
+// index   MCS Rate (Mb/s) Tput (Mb/s) Received Signal (dBm) Noise (dBm) SNR (dB)
+//     0     0       6.5      0.7776    1000    -77.6633    -100.966     23.3027
+//     1     1        13      0.7776    1000    -77.6633    -100.966     23.3027
+//     2     2      19.5      0.7776    1000    -77.6633    -100.966     23.3027
+//     3     3        26      0.7776    1000    -77.6633    -100.966     23.3027
+//  ...
+//
+// When UDP is used, the throughput will always be 0.7776 Mb/s since the
+// traffic generator does not attempt to match the maximum Phy data rate
+// but instead sends at a constant rate.  When TCP is used, the TCP flow
+// will exhibit different throughput depending on the index.
+
+using namespace ns3;
+
+// Global variables for use in callbacks.
+double g_signalDbmAvg;
+double g_noiseDbmAvg;
+uint32_t g_samples;
+uint16_t g_channelNumber;
+uint32_t g_rate;
+
+void MonitorSniffRx (Ptr<const Packet> packet, uint16_t channelFreqMhz,
+                     uint16_t channelNumber, uint32_t rate,
+                     WifiPreamble preamble, WifiTxVector txVector,
+                     struct mpduInfo aMpdu, struct signalNoiseDbm signalNoise)
+
+{
+  g_samples++;
+  g_signalDbmAvg += ((signalNoise.signal - g_signalDbmAvg) / g_samples);
+  g_noiseDbmAvg += ((signalNoise.noise - g_noiseDbmAvg) / g_samples);
+  g_rate = rate;
+  g_channelNumber = channelNumber;
+}
+
+NS_LOG_COMPONENT_DEFINE ("WifiSpectrumPerInterference");
+
+Ptr<SpectrumModel> SpectrumModelWifi5180MHz;
+
+class static_SpectrumModelWifi5180MHz_initializer
+{
+public:
+  static_SpectrumModelWifi5180MHz_initializer ()
+  {
+    BandInfo bandInfo;
+    bandInfo.fc = 5180e6;
+    bandInfo.fl = 5180e6 - 10e6;
+    bandInfo.fh = 5180e6 + 10e6;
+
+    Bands bands;
+    bands.push_back (bandInfo);
+
+    SpectrumModelWifi5180MHz = Create<SpectrumModel> (bands);
+  }
+
+} static_SpectrumModelWifi5180MHz_initializer_instance;
+
+int main (int argc, char *argv[])
+{
+  bool udp = true;
+  double distance = 50;
+  double simulationTime = 10; //seconds
+  uint16_t index = 256;
+  std::string wifiType = "ns3::SpectrumWifiPhy";
+  std::string errorModelType = "ns3::NistErrorRateModel";
+  bool enablePcap = false;
+  const uint32_t tcpPacketSize = 1448;
+  double waveformPower = 0;
+
+  CommandLine cmd;
+  cmd.AddValue ("simulationTime", "Simulation time in seconds", simulationTime);
+  cmd.AddValue ("udp", "UDP if set to 1, TCP otherwise", udp);
+  cmd.AddValue ("distance", "meters separation between nodes", distance);
+  cmd.AddValue ("index", "restrict index to single value between 0 and 31", index);
+  cmd.AddValue ("wifiType", "select ns3::SpectrumWifiPhy or ns3::YansWifiPhy", wifiType);
+  cmd.AddValue ("errorModelType", "select ns3::NistErrorRateModel or ns3::YansErrorRateModel", errorModelType);
+  cmd.AddValue ("enablePcap", "enable pcap output", enablePcap);
+  cmd.AddValue ("waveformPower", "Waveform power", waveformPower);
+  cmd.Parse (argc,argv);
+
+  uint16_t startIndex = 0;
+  uint16_t stopIndex = 31;
+  if (index < 32)
+    {
+      startIndex = index;
+      stopIndex = index;
+    }
+
+  std::cout << "wifiType: " << wifiType << " distance: " << distance << "m; sent: 1000 TxPower: 16 dBm (40 mW)" << std::endl;
+  std::cout << std::setw (5) << "index" <<
+    std::setw (6) << "MCS" <<
+    std::setw (12) << "Rate (Mb/s)" <<
+    std::setw (12) << "Tput (Mb/s)" <<
+    std::setw (10) << "Received " <<
+    std::setw (12) << "Signal (dBm)" <<
+    std::setw (12) << "Noi+Inf(dBm)" <<
+    std::setw (10) << "SNR (dB)" <<
+    std::endl;
+  for (uint16_t i = startIndex; i <= stopIndex; i++)
+    {
+      uint32_t payloadSize;
+      if (udp)
+        {
+          payloadSize = 972; // 1000 bytes IPv4
+        }
+      else
+        {
+          payloadSize = 1448; // 1500 bytes IPv6
+          Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (payloadSize));
+        }
+
+      NodeContainer wifiStaNode;
+      wifiStaNode.Create (1);
+      NodeContainer wifiApNode;
+      wifiApNode.Create (1);
+      NodeContainer interferingNode;
+      interferingNode.Create (1);
+
+      YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
+      SpectrumWifiPhyHelper spectrumPhy = SpectrumWifiPhyHelper::Default ();
+      Ptr<MultiModelSpectrumChannel> spectrumChannel;
+      if (wifiType == "ns3::YansWifiPhy")
+        {
+          YansWifiChannelHelper channel;
+          channel.AddPropagationLoss ("ns3::FriisPropagationLossModel");
+          channel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
+          phy.SetChannel (channel.Create ());
+          phy.Set ("Frequency", UintegerValue (5180));
+
+          if (i <= 7)
+            {
+              phy.Set ("ShortGuardEnabled", BooleanValue (false));
+              phy.Set ("ChannelWidth", UintegerValue (20));
+            }
+          else if (i > 7 && i <= 15)
+            {
+              phy.Set ("ShortGuardEnabled", BooleanValue (true));
+              phy.Set ("ChannelWidth", UintegerValue (20));
+            }
+          else if (i > 15 && i <= 23)
+            {
+              phy.Set ("ShortGuardEnabled", BooleanValue (false));
+              phy.Set ("ChannelWidth", UintegerValue (40));
+            }
+          else
+            {
+              phy.Set ("ShortGuardEnabled", BooleanValue (true));
+              phy.Set ("ChannelWidth", UintegerValue (40));
+            }
+        }
+      else if (wifiType == "ns3::SpectrumWifiPhy")
+        {
+          //Bug 2460: CcaMode1Threshold default should be set to -62 dBm when using Spectrum
+          Config::SetDefault ("ns3::WifiPhy::CcaMode1Threshold", DoubleValue (-62.0));
+
+          spectrumChannel
+            = CreateObject<MultiModelSpectrumChannel> ();
+          Ptr<FriisPropagationLossModel> lossModel
+            = CreateObject<FriisPropagationLossModel> ();
+          spectrumChannel->AddPropagationLossModel (lossModel);
+
+
+          Ptr<ConstantSpeedPropagationDelayModel> delayModel
+            = CreateObject<ConstantSpeedPropagationDelayModel> ();
+          spectrumChannel->SetPropagationDelayModel (delayModel);
+
+          spectrumPhy.SetChannel (spectrumChannel);
+          spectrumPhy.SetErrorRateModel (errorModelType);
+          spectrumPhy.Set ("Frequency", UintegerValue (5180)); // channel 36 at 20 MHz
+
+          if (i <= 7)
+            {
+              spectrumPhy.Set ("ShortGuardEnabled", BooleanValue (false));
+              spectrumPhy.Set ("ChannelWidth", UintegerValue (20));
+            }
+          else if (i > 7 && i <= 15)
+            {
+              spectrumPhy.Set ("ShortGuardEnabled", BooleanValue (true));
+              spectrumPhy.Set ("ChannelWidth", UintegerValue (20));
+            }
+          else if (i > 15 && i <= 23)
+            {
+              spectrumPhy.Set ("ShortGuardEnabled", BooleanValue (false));
+              spectrumPhy.Set ("ChannelWidth", UintegerValue (40));
+            }
+          else
+            {
+              spectrumPhy.Set ("ShortGuardEnabled", BooleanValue (true));
+              spectrumPhy.Set ("ChannelWidth", UintegerValue (40));
+            }
+        }
+      else
+        {
+          NS_FATAL_ERROR ("Unsupported WiFi type " << wifiType);
+        }
+
+
+      WifiHelper wifi;
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      WifiMacHelper mac;
+
+      Ssid ssid = Ssid ("ns380211n");
+
+      double datarate = 0;
+      StringValue DataRate;
+      if (i == 0)
+        {
+          DataRate = StringValue ("HtMcs0");
+          datarate = 6.5;
+        }
+      else if (i == 1)
+        {
+          DataRate = StringValue ("HtMcs1");
+          datarate = 13;
+        }
+      else if (i == 2)
+        {
+          DataRate = StringValue ("HtMcs2");
+          datarate = 19.5;
+        }
+      else if (i == 3)
+        {
+          DataRate = StringValue ("HtMcs3");
+          datarate = 26;
+        }
+      else if (i == 4)
+        {
+          DataRate = StringValue ("HtMcs4");
+          datarate = 39;
+        }
+      else if (i == 5)
+        {
+          DataRate = StringValue ("HtMcs5");
+          datarate = 52;
+        }
+      else if (i == 6)
+        {
+          DataRate = StringValue ("HtMcs6");
+          datarate = 58.5;
+        }
+      else if (i == 7)
+        {
+          DataRate = StringValue ("HtMcs7");
+          datarate = 65;
+        }
+      else if (i == 8)
+        {
+          DataRate = StringValue ("HtMcs0");
+          datarate = 7.2;
+        }
+      else if (i == 9)
+        {
+          DataRate = StringValue ("HtMcs1");
+          datarate = 14.4;
+        }
+      else if (i == 10)
+        {
+          DataRate = StringValue ("HtMcs2");
+          datarate = 21.7;
+        }
+      else if (i == 11)
+        {
+          DataRate = StringValue ("HtMcs3");
+          datarate = 28.9;
+        }
+      else if (i == 12)
+        {
+          DataRate = StringValue ("HtMcs4");
+          datarate = 43.3;
+        }
+      else if (i == 13)
+        {
+          DataRate = StringValue ("HtMcs5");
+          datarate = 57.8;
+        }
+      else if (i == 14)
+        {
+          DataRate = StringValue ("HtMcs6");
+          datarate = 65;
+        }
+      else if (i == 15)
+        {
+          DataRate = StringValue ("HtMcs7");
+          datarate = 72.2;
+        }
+      else if (i == 16)
+        {
+          DataRate = StringValue ("HtMcs0");
+          datarate = 13.5;
+        }
+      else if (i == 17)
+        {
+          DataRate = StringValue ("HtMcs1");
+          datarate = 27;
+        }
+      else if (i == 18)
+        {
+          DataRate = StringValue ("HtMcs2");
+          datarate = 40.5;
+        }
+      else if (i == 19)
+        {
+          DataRate = StringValue ("HtMcs3");
+          datarate = 54;
+        }
+      else if (i == 20)
+        {
+          DataRate = StringValue ("HtMcs4");
+          datarate = 81;
+        }
+      else if (i == 21)
+        {
+          DataRate = StringValue ("HtMcs5");
+          datarate = 108;
+        }
+      else if (i == 22)
+        {
+          DataRate = StringValue ("HtMcs6");
+          datarate = 121.5;
+        }
+      else if (i == 23)
+        {
+          DataRate = StringValue ("HtMcs7");
+          datarate = 135;
+        }
+      else if (i == 24)
+        {
+          DataRate = StringValue ("HtMcs0");
+          datarate = 15;
+        }
+      else if (i == 25)
+        {
+          DataRate = StringValue ("HtMcs1");
+          datarate = 30;
+        }
+      else if (i == 26)
+        {
+          DataRate = StringValue ("HtMcs2");
+          datarate = 45;
+        }
+      else if (i == 27)
+        {
+          DataRate = StringValue ("HtMcs3");
+          datarate = 60;
+        }
+      else if (i == 28)
+        {
+          DataRate = StringValue ("HtMcs4");
+          datarate = 90;
+        }
+      else if (i == 29)
+        {
+          DataRate = StringValue ("HtMcs5");
+          datarate = 120;
+        }
+      else if (i == 30)
+        {
+          DataRate = StringValue ("HtMcs6");
+          datarate = 135;
+        }
+      else
+        {
+          DataRate = StringValue ("HtMcs7");
+          datarate = 150;
+        }
+
+      wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager","DataMode", DataRate,
+                                    "ControlMode", DataRate);
+
+      NetDeviceContainer staDevice;
+      NetDeviceContainer apDevice;
+
+      if (wifiType == "ns3::YansWifiPhy")
+        {
+          mac.SetType ("ns3::StaWifiMac",
+                       "Ssid", SsidValue (ssid),
+                       "ActiveProbing", BooleanValue (false));
+          staDevice = wifi.Install (phy, mac, wifiStaNode);
+          mac.SetType ("ns3::ApWifiMac",
+                       "Ssid", SsidValue (ssid));
+          apDevice = wifi.Install (phy, mac, wifiApNode);
+
+        }
+      else if (wifiType == "ns3::SpectrumWifiPhy")
+        {
+          mac.SetType ("ns3::StaWifiMac",
+                       "Ssid", SsidValue (ssid),
+                       "ActiveProbing", BooleanValue (false));
+          staDevice = wifi.Install (spectrumPhy, mac, wifiStaNode);
+          mac.SetType ("ns3::ApWifiMac",
+                       "Ssid", SsidValue (ssid));
+          apDevice = wifi.Install (spectrumPhy, mac, wifiApNode);
+        }
+
+      // mobility.
+      MobilityHelper mobility;
+      Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+
+      positionAlloc->Add (Vector (0.0, 0.0, 0.0));
+      positionAlloc->Add (Vector (distance, 0.0, 0.0));
+      positionAlloc->Add (Vector (distance, distance, 0.0));
+      mobility.SetPositionAllocator (positionAlloc);
+
+      mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+
+      mobility.Install (wifiApNode);
+      mobility.Install (wifiStaNode);
+      mobility.Install (interferingNode);
+
+      /* 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 (1000));
+          myClient.SetAttribute ("Interval", TimeValue (MilliSeconds (5)));
+          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));
+        }
+      // Configure waveform generator
+
+      Ptr<SpectrumValue> wgPsd = Create<SpectrumValue> (SpectrumModelWifi5180MHz);
+      *wgPsd = waveformPower / (100 * 180000);
+      NS_LOG_INFO ("wgPsd : " << *wgPsd << " integrated power: " << Integral (*(GetPointer (wgPsd))));
+
+      if (wifiType == "ns3::SpectrumWifiPhy")
+        {
+          WaveformGeneratorHelper waveformGeneratorHelper;
+          waveformGeneratorHelper.SetChannel (spectrumChannel);
+          waveformGeneratorHelper.SetTxPowerSpectralDensity (wgPsd);
+
+          waveformGeneratorHelper.SetPhyAttribute ("Period", TimeValue (Seconds (0.0007)));
+          waveformGeneratorHelper.SetPhyAttribute ("DutyCycle", DoubleValue (1));
+          NetDeviceContainer waveformGeneratorDevices = waveformGeneratorHelper.Install (interferingNode);
+
+          Simulator::Schedule (Seconds (0.002), &WaveformGenerator::Start,
+                               waveformGeneratorDevices.Get (0)->GetObject<NonCommunicatingNetDevice> ()->GetPhy ()->GetObject<WaveformGenerator> ());
+        }
+
+      Config::ConnectWithoutContext ("/NodeList/0/DeviceList/*/Phy/MonitorSnifferRx", MakeCallback (&MonitorSniffRx));
+
+      if (enablePcap)
+        {
+          std::stringstream ss;
+          ss << "wifi-spectrum-per-example-" << i;
+          phy.EnablePcap (ss.str (), apDevice);
+        }
+      g_signalDbmAvg = 0;
+      g_noiseDbmAvg = 0;
+      g_samples = 0;
+      g_channelNumber = 0;
+      g_rate = 0;
+
+      // Make sure we are tuned to 5180 MHz; if not, the example will
+      // not work properly
+      Ptr<NetDevice> staDevicePtr = staDevice.Get (0);
+      Ptr<WifiNetDevice> wifiStaDevicePtr = staDevicePtr->GetObject <WifiNetDevice> ();
+      UintegerValue val;
+      wifiStaDevicePtr->GetPhy ()->GetAttribute ("Frequency", val);
+      if (val.Get () != 5180)
+        {
+          NS_FATAL_ERROR ("Error:  Wi-Fi nodes must be tuned to 5180 MHz to match the waveform generator");
+        }
+
+      Simulator::Stop (Seconds (simulationTime + 1));
+      Simulator::Run ();
+
+      double throughput = 0;
+      uint32_t totalPacketsThrough = 0;
+      if (udp)
+        {
+          //UDP
+          totalPacketsThrough = DynamicCast<UdpServer> (serverApp.Get (0))->GetReceived ();
+          throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0); //Mbit/s
+        }
+      else
+        {
+          //TCP
+          uint32_t totalBytesRx = DynamicCast<PacketSink> (sinkApp.Get (0))->GetTotalRx ();
+          totalPacketsThrough = totalBytesRx / tcpPacketSize;
+          throughput = totalBytesRx * 8 / (simulationTime * 1000000.0); //Mbit/s
+        }
+      std::cout << std::setw (5) << i <<
+        std::setw (6) << (i % 8) <<
+        std::setw (10) << datarate <<
+        std::setw (12) << throughput <<
+        std::setw (8) << totalPacketsThrough;
+      if (totalPacketsThrough > 0)
+        {
+          std::cout << std::setw (12) << g_signalDbmAvg <<
+            std::setw (12) << g_noiseDbmAvg <<
+            std::setw (12) << (g_signalDbmAvg - g_noiseDbmAvg) <<
+            std::endl;
+        }
+      else
+        {
+          std::cout << std::setw (12) << "N/A" <<
+            std::setw (12) << "N/A" <<
+            std::setw (12) << "N/A" <<
+            std::endl;
+        }
+      Simulator::Destroy ();
+    }
+  return 0;
+}
diff -Naur ns-3.25/examples/wireless/wifi-spectrum-saturation-example.cc ns-3.26/examples/wireless/wifi-spectrum-saturation-example.cc
--- ns-3.25/examples/wireless/wifi-spectrum-saturation-example.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/examples/wireless/wifi-spectrum-saturation-example.cc	2016-10-03 19:49:01.605387966 -0700
@@ -0,0 +1,704 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 MIRKO BANCHI
+ * Copyright (c) 2015 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: Mirko Banchi <mk.banchi@gmail.com>
+ *          Sebastien Deronne <sebastien.deronne@gmail.com>
+ *          Tom Henderson <tomhend@u.washington.edu>
+ *
+ * Adapted from ht-wifi-network.cc example
+ */
+#include <sstream>
+#include <iomanip>
+
+#include "ns3/core-module.h"
+#include "ns3/config-store-module.h"
+#include "ns3/network-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/wifi-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/spectrum-module.h"
+#include "ns3/internet-module.h"
+
+// This is a simple example of an IEEE 802.11n Wi-Fi network.
+//
+// The main use case is to enable and test SpectrumWifiPhy vs YansWifiPhy
+// under saturation conditions (for max throughput).
+//
+// Network topology:
+//
+//  Wi-Fi 192.168.1.0
+//
+//   STA                  AP
+//    * <-- distance -->  *
+//    |                   |
+//    n1                  n2
+//
+// Users may vary the following command-line arguments in addition to the
+// attributes, global values, and default values typically available:
+//
+//    --simulationTime:  Simulation time in seconds [10]
+//    --distance:        meters separation between nodes [50]
+//    --index:           restrict index to single value between 0 and 31 [256]
+//    --wifiType:        select ns3::SpectrumWifiPhy or ns3::YansWifiPhy [ns3::SpectrumWifiPhy]
+//    --errorModelType:  select ns3::NistErrorRateModel or ns3::YansErrorRateModel [ns3::NistErrorRateModel]
+//    --enablePcap:      enable pcap output [false]
+//
+// By default, the program will step through 64 index values, corresponding
+// to the following MCS, channel width, and guard interval combinations:
+//   index 0-7:    MCS 0-7, long guard interval, 20 MHz channel
+//   index 8-15:   MCS 0-7, short guard interval, 20 MHz channel
+//   index 16-23:  MCS 0-7, long guard interval, 40 MHz channel
+//   index 24-31:  MCS 0-7, short guard interval, 40 MHz channel
+//   index 32-39:    MCS 8-15, long guard interval, 20 MHz channel
+//   index 40-47:   MCS 8-15, short guard interval, 20 MHz channel
+//   index 48-55:  MCS 8-15, long guard interval, 40 MHz channel
+//   index 56-63:  MCS 8-15, short guard interval, 40 MHz channel
+// and send packets at a high rate using each MCS, using the SpectrumWifiPhy
+// and the NistErrorRateModel, at a distance of 1 meter.  The program outputs
+// results such as:
+//
+// wifiType: ns3::SpectrumWifiPhy distance: 1m
+// index   MCS   width Rate (Mb/s) Tput (Mb/s) Received
+//     0     0      20       6.5     5.96219    5063
+//     1     1      20        13     11.9491   10147
+//     2     2      20      19.5     17.9184   15216
+//     3     3      20        26     23.9253   20317
+//     ...
+//
+// selection of index values 32-63 will result in MCS selection 8-15
+// involving two spatial streams
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("WifiSpectrumSaturationExample");
+
+int main (int argc, char *argv[])
+{
+  double distance = 1;
+  double simulationTime = 10; //seconds
+  uint16_t index = 256;
+  uint32_t channelWidth = 0;
+  std::string wifiType = "ns3::SpectrumWifiPhy";
+  std::string errorModelType = "ns3::NistErrorRateModel";
+  bool enablePcap = false;
+
+  CommandLine cmd;
+  cmd.AddValue ("simulationTime", "Simulation time in seconds", simulationTime);
+  cmd.AddValue ("distance", "meters separation between nodes", distance);
+  cmd.AddValue ("index", "restrict index to single value between 0 and 63", index);
+  cmd.AddValue ("wifiType", "select ns3::SpectrumWifiPhy or ns3::YansWifiPhy", wifiType);
+  cmd.AddValue ("errorModelType", "select ns3::NistErrorRateModel or ns3::YansErrorRateModel", errorModelType);
+  cmd.AddValue ("enablePcap", "enable pcap output", enablePcap);
+  cmd.Parse (argc,argv);
+
+  uint16_t startIndex = 0;
+  uint16_t stopIndex = 63;
+  if (index < 64)
+    {
+      startIndex = index;
+      stopIndex = index;
+    }
+
+  std::cout << "wifiType: " << wifiType << " distance: " << distance << "m" << std::endl;
+  std::cout << std::setw (5) << "index" <<
+    std::setw (6) << "MCS" <<
+    std::setw (8) << "width" <<
+    std::setw (12) << "Rate (Mb/s)" <<
+    std::setw (12) << "Tput (Mb/s)" <<
+    std::setw (10) << "Received " <<
+    std::endl;
+  for (uint16_t i = startIndex; i <= stopIndex; i++)
+    {
+      uint32_t payloadSize;
+      payloadSize = 1472; // 1500 bytes IPv4
+
+      NodeContainer wifiStaNode;
+      wifiStaNode.Create (1);
+      NodeContainer wifiApNode;
+      wifiApNode.Create (1);
+
+      YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
+      SpectrumWifiPhyHelper spectrumPhy = SpectrumWifiPhyHelper::Default ();
+      if (wifiType == "ns3::YansWifiPhy")
+        {
+          YansWifiChannelHelper channel;
+          channel.AddPropagationLoss ("ns3::FriisPropagationLossModel");
+          channel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
+          phy.SetChannel (channel.Create ());
+          phy.Set ("TxPowerStart", DoubleValue (1));
+          phy.Set ("TxPowerEnd", DoubleValue (1));
+
+          if (i <= 7)
+            {
+              phy.Set ("ShortGuardEnabled", BooleanValue (false));
+              channelWidth = 20;
+            }
+          else if (i > 7 && i <= 15)
+            {
+              phy.Set ("ShortGuardEnabled", BooleanValue (true));
+              channelWidth = 20;
+            }
+          else if (i > 15 && i <= 23)
+            {
+              phy.Set ("ShortGuardEnabled", BooleanValue (false));
+              channelWidth = 40;
+            }
+          else if (i > 23 && i <= 31)
+            {
+              phy.Set ("ShortGuardEnabled", BooleanValue (true));
+              channelWidth = 40;
+            }
+          else if (i > 31 && i <= 39)
+            {
+              phy.Set ("ShortGuardEnabled", BooleanValue (false));
+              phy.Set ("RxAntennas", UintegerValue (2));
+              phy.Set ("TxAntennas", UintegerValue (2));
+              channelWidth = 20;
+            }
+          else if (i > 39 && i <= 47)
+            {
+              phy.Set ("ShortGuardEnabled", BooleanValue (true));
+              phy.Set ("RxAntennas", UintegerValue (2));
+              phy.Set ("TxAntennas", UintegerValue (2));
+              channelWidth = 20;
+            }
+          else if (i > 47 && i <= 55)
+            {
+              phy.Set ("ShortGuardEnabled", BooleanValue (false));
+              phy.Set ("RxAntennas", UintegerValue (2));
+              phy.Set ("TxAntennas", UintegerValue (2));
+              channelWidth = 40;
+            }
+          else if (i > 55 && i <= 63)
+            {
+              phy.Set ("ShortGuardEnabled", BooleanValue (true));
+              phy.Set ("RxAntennas", UintegerValue (2));
+              phy.Set ("TxAntennas", UintegerValue (2));
+              channelWidth = 40;
+            }
+        }
+      else if (wifiType == "ns3::SpectrumWifiPhy")
+        {
+          //Bug 2460: CcaMode1Threshold default should be set to -62 dBm when using Spectrum
+          Config::SetDefault ("ns3::WifiPhy::CcaMode1Threshold", DoubleValue (-62.0));
+
+          Ptr<SingleModelSpectrumChannel> spectrumChannel
+            = CreateObject<SingleModelSpectrumChannel> ();
+          Ptr<FriisPropagationLossModel> lossModel
+            = CreateObject<FriisPropagationLossModel> ();
+          spectrumChannel->AddPropagationLossModel (lossModel);
+
+          Ptr<ConstantSpeedPropagationDelayModel> delayModel
+            = CreateObject<ConstantSpeedPropagationDelayModel> ();
+          spectrumChannel->SetPropagationDelayModel (delayModel);
+
+          spectrumPhy.SetChannel (spectrumChannel);
+          spectrumPhy.SetErrorRateModel (errorModelType);
+          spectrumPhy.Set ("Frequency", UintegerValue (5180)); // channel 36 at 20 MHz
+          spectrumPhy.Set ("TxPowerStart", DoubleValue (1));
+          spectrumPhy.Set ("TxPowerEnd", DoubleValue (1));
+
+          if (i <= 7)
+            {
+              spectrumPhy.Set ("ShortGuardEnabled", BooleanValue (false));
+              channelWidth = 20;
+            }
+          else if (i > 7 && i <= 15)
+            {
+              spectrumPhy.Set ("ShortGuardEnabled", BooleanValue (true));
+              channelWidth = 20;
+            }
+          else if (i > 15 && i <= 23)
+            {
+              spectrumPhy.Set ("ShortGuardEnabled", BooleanValue (false));
+              channelWidth = 40;
+            }
+          else if (i > 23 && i <= 31)
+            {
+              spectrumPhy.Set ("ShortGuardEnabled", BooleanValue (true));
+              channelWidth = 40;
+            }
+          else if (i > 31 && i <= 39)
+            {
+              spectrumPhy.Set ("ShortGuardEnabled", BooleanValue (false));
+              spectrumPhy.Set ("RxAntennas", UintegerValue (2));
+              spectrumPhy.Set ("TxAntennas", UintegerValue (2));
+              channelWidth = 20;
+            }
+          else if (i > 39 && i <= 47)
+            {
+              spectrumPhy.Set ("ShortGuardEnabled", BooleanValue (true));
+              spectrumPhy.Set ("RxAntennas", UintegerValue (2));
+              spectrumPhy.Set ("TxAntennas", UintegerValue (2));
+              channelWidth = 20;
+            }
+          else if (i > 47 && i <= 55)
+            {
+              spectrumPhy.Set ("ShortGuardEnabled", BooleanValue (false));
+              spectrumPhy.Set ("RxAntennas", UintegerValue (2));
+              spectrumPhy.Set ("TxAntennas", UintegerValue (2));
+              channelWidth = 40;
+            }
+          else if (i > 55 && i <= 63)
+            {
+              spectrumPhy.Set ("ShortGuardEnabled", BooleanValue (true));
+              spectrumPhy.Set ("RxAntennas", UintegerValue (2));
+              spectrumPhy.Set ("TxAntennas", UintegerValue (2));
+              channelWidth = 40;
+            }
+        }
+      else
+        {
+          NS_FATAL_ERROR ("Unsupported WiFi type " << wifiType);
+        }
+
+
+      WifiHelper wifi;
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      WifiMacHelper mac;
+
+      Ssid ssid = Ssid ("ns380211n");
+
+      double datarate = 0;
+      StringValue DataRate;
+      if (i == 0)
+        {
+          DataRate = StringValue ("HtMcs0");
+          datarate = 6.5;
+        }
+      else if (i == 1)
+        {
+          DataRate = StringValue ("HtMcs1");
+          datarate = 13;
+        }
+      else if (i == 2)
+        {
+          DataRate = StringValue ("HtMcs2");
+          datarate = 19.5;
+        }
+      else if (i == 3)
+        {
+          DataRate = StringValue ("HtMcs3");
+          datarate = 26;
+        }
+      else if (i == 4)
+        {
+          DataRate = StringValue ("HtMcs4");
+          datarate = 39;
+        }
+      else if (i == 5)
+        {
+          DataRate = StringValue ("HtMcs5");
+          datarate = 52;
+        }
+      else if (i == 6)
+        {
+          DataRate = StringValue ("HtMcs6");
+          datarate = 58.5;
+        }
+      else if (i == 7)
+        {
+          DataRate = StringValue ("HtMcs7");
+          datarate = 65;
+        }
+      else if (i == 8)
+        {
+          DataRate = StringValue ("HtMcs0");
+          datarate = 7.2;
+        }
+      else if (i == 9)
+        {
+          DataRate = StringValue ("HtMcs1");
+          datarate = 14.4;
+        }
+      else if (i == 10)
+        {
+          DataRate = StringValue ("HtMcs2");
+          datarate = 21.7;
+        }
+      else if (i == 11)
+        {
+          DataRate = StringValue ("HtMcs3");
+          datarate = 28.9;
+        }
+      else if (i == 12)
+        {
+          DataRate = StringValue ("HtMcs4");
+          datarate = 43.3;
+        }
+      else if (i == 13)
+        {
+          DataRate = StringValue ("HtMcs5");
+          datarate = 57.8;
+        }
+      else if (i == 14)
+        {
+          DataRate = StringValue ("HtMcs6");
+          datarate = 65;
+        }
+      else if (i == 15)
+        {
+          DataRate = StringValue ("HtMcs7");
+          datarate = 72.2;
+        }
+      else if (i == 16)
+        {
+          DataRate = StringValue ("HtMcs0");
+          datarate = 13.5;
+        }
+      else if (i == 17)
+        {
+          DataRate = StringValue ("HtMcs1");
+          datarate = 27;
+        }
+      else if (i == 18)
+        {
+          DataRate = StringValue ("HtMcs2");
+          datarate = 40.5;
+        }
+      else if (i == 19)
+        {
+          DataRate = StringValue ("HtMcs3");
+          datarate = 54;
+        }
+      else if (i == 20)
+        {
+          DataRate = StringValue ("HtMcs4");
+          datarate = 81;
+        }
+      else if (i == 21)
+        {
+          DataRate = StringValue ("HtMcs5");
+          datarate = 108;
+        }
+      else if (i == 22)
+        {
+          DataRate = StringValue ("HtMcs6");
+          datarate = 121.5;
+        }
+      else if (i == 23)
+        {
+          DataRate = StringValue ("HtMcs7");
+          datarate = 135;
+        }
+      else if (i == 24)
+        {
+          DataRate = StringValue ("HtMcs0");
+          datarate = 15;
+        }
+      else if (i == 25)
+        {
+          DataRate = StringValue ("HtMcs1");
+          datarate = 30;
+        }
+      else if (i == 26)
+        {
+          DataRate = StringValue ("HtMcs2");
+          datarate = 45;
+        }
+      else if (i == 27)
+        {
+          DataRate = StringValue ("HtMcs3");
+          datarate = 60;
+        }
+      else if (i == 28)
+        {
+          DataRate = StringValue ("HtMcs4");
+          datarate = 90;
+        }
+      else if (i == 29)
+        {
+          DataRate = StringValue ("HtMcs5");
+          datarate = 120;
+        }
+      else if (i == 30)
+        {
+          DataRate = StringValue ("HtMcs6");
+          datarate = 135;
+        }
+      else if (i == 31)
+        {
+          DataRate = StringValue ("HtMcs7");
+          datarate = 150;
+        }
+      else if (i == 32)
+        {
+          DataRate = StringValue ("HtMcs8");
+          datarate = 13;
+        }
+      else if (i == 33)
+        {
+          DataRate = StringValue ("HtMcs9");
+          datarate = 26;
+        }
+      else if (i == 34)
+        {
+          DataRate = StringValue ("HtMcs10");
+          datarate = 39;
+        }
+      else if (i == 35)
+        {
+          DataRate = StringValue ("HtMcs11");
+          datarate = 52;
+        }
+      else if (i == 36)
+        {
+          DataRate = StringValue ("HtMcs12");
+          datarate = 78;
+        }
+      else if (i == 37)
+        {
+          DataRate = StringValue ("HtMcs13");
+          datarate = 104;
+        }
+      else if (i == 38)
+        {
+          DataRate = StringValue ("HtMcs14");
+          datarate = 117;
+        }
+      else if (i == 39)
+        {
+          DataRate = StringValue ("HtMcs15");
+          datarate = 130;
+        }
+      else if (i == 40)
+        {
+          DataRate = StringValue ("HtMcs8");
+          datarate = 14.4;
+        }
+      else if (i == 41)
+        {
+          DataRate = StringValue ("HtMcs9");
+          datarate = 28.9;
+        }
+      else if (i == 42)
+        {
+          DataRate = StringValue ("HtMcs10");
+          datarate = 43.3;
+        }
+      else if (i == 43)
+        {
+          DataRate = StringValue ("HtMcs11");
+          datarate = 57.8;
+        }
+      else if (i == 44)
+        {
+          DataRate = StringValue ("HtMcs12");
+          datarate = 86.7;
+        }
+      else if (i == 45)
+        {
+          DataRate = StringValue ("HtMcs13");
+          datarate = 115.6;
+        }
+      else if (i == 46)
+        {
+          DataRate = StringValue ("HtMcs14");
+          datarate = 130.3;
+        }
+      else if (i == 47)
+        {
+          DataRate = StringValue ("HtMcs15");
+          datarate = 144.4;
+        }
+      else if (i == 48)
+        {
+          DataRate = StringValue ("HtMcs8");
+          datarate = 27;
+        }
+      else if (i == 49)
+        {
+          DataRate = StringValue ("HtMcs9");
+          datarate = 54;
+        }
+      else if (i == 50)
+        {
+          DataRate = StringValue ("HtMcs10");
+          datarate = 81;
+        }
+      else if (i == 51)
+        {
+          DataRate = StringValue ("HtMcs11");
+          datarate = 108;
+        }
+      else if (i == 52)
+        {
+          DataRate = StringValue ("HtMcs12");
+          datarate = 162;
+        }
+      else if (i == 53)
+        {
+          DataRate = StringValue ("HtMcs13");
+          datarate = 216;
+        }
+      else if (i == 54)
+        {
+          DataRate = StringValue ("HtMcs14");
+          datarate = 243;
+        }
+      else if (i == 55)
+        {
+          DataRate = StringValue ("HtMcs15");
+          datarate = 270;
+        }
+      else if (i == 56)
+        {
+          DataRate = StringValue ("HtMcs8");
+          datarate = 30;
+        }
+      else if (i == 57)
+        {
+          DataRate = StringValue ("HtMcs9");
+          datarate = 60;
+        }
+      else if (i == 58)
+        {
+          DataRate = StringValue ("HtMcs10");
+          datarate = 90;
+        }
+      else if (i == 59)
+        {
+          DataRate = StringValue ("HtMcs11");
+          datarate = 120;
+        }
+      else if (i == 60)
+        {
+          DataRate = StringValue ("HtMcs12");
+          datarate = 180;
+        }
+      else if (i == 61)
+        {
+          DataRate = StringValue ("HtMcs13");
+          datarate = 240;
+        }
+      else if (i == 62)
+        {
+          DataRate = StringValue ("HtMcs14");
+          datarate = 270;
+        }
+      else if (i == 63)
+        {
+          DataRate = StringValue ("HtMcs15");
+          datarate = 300;
+        }
+      else
+        {
+          NS_FATAL_ERROR ("Illegal index i " << i);
+        }
+
+      wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager","DataMode", DataRate,
+                                    "ControlMode", DataRate);
+
+      NetDeviceContainer staDevice;
+      NetDeviceContainer apDevice;
+
+      if (wifiType == "ns3::YansWifiPhy")
+        {
+          mac.SetType ("ns3::StaWifiMac",
+                       "Ssid", SsidValue (ssid),
+                       "ActiveProbing", BooleanValue (false));
+          staDevice = wifi.Install (phy, mac, wifiStaNode);
+          mac.SetType ("ns3::ApWifiMac",
+                       "Ssid", SsidValue (ssid));
+          apDevice = wifi.Install (phy, mac, wifiApNode);
+
+        }
+      else if (wifiType == "ns3::SpectrumWifiPhy")
+        {
+          mac.SetType ("ns3::StaWifiMac",
+                       "Ssid", SsidValue (ssid),
+                       "ActiveProbing", BooleanValue (false));
+          staDevice = wifi.Install (spectrumPhy, mac, wifiStaNode);
+          mac.SetType ("ns3::ApWifiMac",
+                       "Ssid", SsidValue (ssid));
+          apDevice = wifi.Install (spectrumPhy, mac, wifiApNode);
+        }
+
+      // Channel width must be set *after* installation because the attribute
+      // is overwritten by the ConfigureStandard method ()
+      Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/ChannelWidth", UintegerValue (channelWidth));
+
+      // mobility.
+      MobilityHelper mobility;
+      Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+
+      positionAlloc->Add (Vector (0.0, 0.0, 0.0));
+      positionAlloc->Add (Vector (distance, 0.0, 0.0));
+      mobility.SetPositionAllocator (positionAlloc);
+
+      mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+
+      mobility.Install (wifiApNode);
+      mobility.Install (wifiStaNode);
+
+      /* Internet stack*/
+      InternetStackHelper stack;
+      stack.Install (wifiApNode);
+      stack.Install (wifiStaNode);
+
+      Ipv4AddressHelper address;
+
+      address.SetBase ("192.168.1.0", "255.255.255.0");
+      Ipv4InterfaceContainer staNodeInterface;
+      Ipv4InterfaceContainer apNodeInterface;
+
+      staNodeInterface = address.Assign (staDevice);
+      apNodeInterface = address.Assign (apDevice);
+
+      /* Setting applications */
+      ApplicationContainer serverApp, sinkApp;
+      //UDP flow
+      UdpServerHelper myServer (9);
+      serverApp = myServer.Install (wifiStaNode.Get (0));
+      serverApp.Start (Seconds (0.0));
+      serverApp.Stop (Seconds (simulationTime + 1));
+
+      UdpClientHelper myClient (staNodeInterface.GetAddress (0), 9);
+      myClient.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
+      myClient.SetAttribute ("Interval", TimeValue (Time ("0.00002"))); //packets/s
+      myClient.SetAttribute ("PacketSize", UintegerValue (payloadSize));
+
+      ApplicationContainer clientApp = myClient.Install (wifiApNode.Get (0));
+      clientApp.Start (Seconds (1.0));
+      clientApp.Stop (Seconds (simulationTime + 1));
+
+      if (enablePcap)
+        {
+          std::stringstream ss;
+          ss << "wifi-spectrum-saturation-example-" << i;
+          phy.EnablePcap (ss.str (), apDevice);
+        }
+
+      Simulator::Stop (Seconds (simulationTime + 1));
+      Simulator::Run ();
+
+      double throughput;
+      uint32_t totalPacketsThrough;
+      totalPacketsThrough = DynamicCast<UdpServer> (serverApp.Get (0))->GetReceived ();
+      throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0); //Mbit/s
+      std::cout << std::setw (5) << i <<
+        std::setw (6) << (i % 8) + 8 * (i / 32) <<
+        std::setw (8) << channelWidth <<
+        std::setw (10) << datarate <<
+        std::setw (12) << throughput <<
+        std::setw (8) << totalPacketsThrough <<
+        std::endl;
+      Simulator::Destroy ();
+    }
+  return 0;
+}
diff -Naur ns-3.25/examples/wireless/wifi-tcp.cc ns-3.26/examples/wireless/wifi-tcp.cc
--- ns-3.25/examples/wireless/wifi-tcp.cc	2016-10-03 20:57:08.301247215 -0700
+++ ns-3.26/examples/wireless/wifi-tcp.cc	2016-10-03 19:49:01.606387959 -0700
@@ -124,8 +124,7 @@
 
   /* Configure STA */
   wifiMac.SetType ("ns3::StaWifiMac",
-                    "Ssid", SsidValue (ssid),
-                    "ActiveProbing", BooleanValue (false));
+                    "Ssid", SsidValue (ssid));
 
   NetDeviceContainer staDevices;
   staDevices = wifiHelper.Install (wifiPhy, wifiMac, staWifiNode);
diff -Naur ns-3.25/examples/wireless/wifi-timing-attributes.cc ns-3.26/examples/wireless/wifi-timing-attributes.cc
--- ns-3.25/examples/wireless/wifi-timing-attributes.cc	2016-10-03 20:57:08.301247215 -0700
+++ ns-3.26/examples/wireless/wifi-timing-attributes.cc	2016-10-03 19:49:01.606387959 -0700
@@ -92,8 +92,7 @@
   //Install PHY and MAC
   Ssid ssid = Ssid ("ns3-wifi");
   mac.SetType ("ns3::StaWifiMac",
-               "Ssid", SsidValue (ssid),
-               "ActiveProbing", BooleanValue (false));
+               "Ssid", SsidValue (ssid));
 
   NetDeviceContainer staDevice;
   staDevice = wifi.Install (phy, mac, wifiStaNode);
diff -Naur ns-3.25/examples/wireless/wifi-wired-bridging.cc ns-3.26/examples/wireless/wifi-wired-bridging.cc
--- ns-3.25/examples/wireless/wifi-wired-bridging.cc	2016-10-03 20:57:08.302247207 -0700
+++ ns-3.26/examples/wireless/wifi-wired-bridging.cc	2016-10-03 19:49:01.607387951 -0700
@@ -147,8 +147,7 @@
                                  "Bounds", RectangleValue (Rectangle (wifiX, wifiX+5.0,0.0, (nStas+1)*5.0)));
       mobility.Install (sta);
       wifiMac.SetType ("ns3::StaWifiMac",
-                       "Ssid", SsidValue (ssid),
-                       "ActiveProbing", BooleanValue (false));
+                       "Ssid", SsidValue (ssid));
       staDev = wifi.Install (wifiPhy, wifiMac, sta);
       staInterface = ip.Assign (staDev);
 
diff -Naur ns-3.25/examples/wireless/wscript ns-3.26/examples/wireless/wscript
--- ns-3.25/examples/wireless/wscript	2016-10-03 20:57:08.302247207 -0700
+++ ns-3.26/examples/wireless/wscript	2016-10-03 19:49:01.607387951 -0700
@@ -85,5 +85,17 @@
     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 = bld.create_ns3_program('wifi-tcp', ['internet', 'mobility', 'wifi', 'applications', 'point-to-point'])    
     obj.source = 'wifi-tcp.cc'
+
+    obj = bld.create_ns3_program('80211e-txop', ['internet', 'mobility', 'wifi', 'applications'])
+    obj.source = '80211e-txop.cc'
+
+    obj = bld.create_ns3_program('wifi-spectrum-per-example', ['internet', 'mobility', 'wifi', 'applications', 'spectrum'])
+    obj.source = 'wifi-spectrum-per-example.cc'
+
+    obj = bld.create_ns3_program('wifi-spectrum-per-interference', ['internet', 'mobility', 'wifi', 'applications', 'spectrum'])
+    obj.source = 'wifi-spectrum-per-interference.cc'
+
+    obj = bld.create_ns3_program('wifi-spectrum-saturation-example', ['internet', 'mobility', 'wifi', 'applications', 'spectrum'])
+    obj.source = 'wifi-spectrum-saturation-example.cc'
diff -Naur ns-3.25/.gitignore ns-3.26/.gitignore
--- ns-3.25/.gitignore	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/.gitignore	2016-10-03 19:49:01.451389114 -0700
@@ -0,0 +1,37 @@
+*.diff
+*.orig
+*.patch
+*.rej
+
+*.o
+*.pyc
+*.pyo
+
+*.cwnd
+*.dat
+*.log
+*.mob
+*.pcap
+*.plt
+*.routes
+*.tr
+[D|U]l[A-Z][a-z]*Stats.txt
+seventh-packet-byte-count.png
+
+\#*#
+~*
+
+testpy-output
+
+bindings/python/pybindgen/
+
+ms_print.*
+massif.*
+coverity
+TAGS
+
+.lock-waf_*_build
+.waf*
+
+build-dir/
+build/
diff -Naur ns-3.25/.hgignore ns-3.26/.hgignore
--- ns-3.25/.hgignore	2016-10-03 20:57:08.148248408 -0700
+++ ns-3.26/.hgignore	2016-10-03 19:49:01.452389106 -0700
@@ -17,6 +17,7 @@
 ^\.waf
 ^doc/introspected-doxygen\.h$
 .*\.py[co]$
+\.json$
 \.pcap$
 \.mob$
 \.routes$
diff -Naur ns-3.25/.hgtags ns-3.26/.hgtags
--- ns-3.25/.hgtags	2016-10-03 20:57:08.150248392 -0700
+++ ns-3.26/.hgtags	2016-10-03 19:49:01.453389099 -0700
@@ -73,3 +73,4 @@
 8ea92bc090cdc01e683a2116d7668ce745ae92e2 ns-3.23
 e8634b0101f7be773074f6e42587fa4a6d0563ba ns-3.24
 3316e06767e7e6db79bb0bd537af8acb582c8e7d ns-3.25
+0287b775fa6c203283a3809ba846992e37e469fb ns-3.26
diff -Naur ns-3.25/RELEASE_NOTES ns-3.26/RELEASE_NOTES
--- ns-3.25/RELEASE_NOTES	2016-10-03 20:57:08.166248267 -0700
+++ ns-3.26/RELEASE_NOTES	2016-10-03 21:33:25.815895970 -0700
@@ -9,6 +9,141 @@
 Consult the file CHANGES.html for more detailed information about changed
 API and behavior across ns-3 releases.
 
+Release 3.26
+=============
+
+Availability
+------------
+This release is available from:
+https://www.nsnam.org/release/ns-allinone-3.26.tar.bz2
+
+Supported platforms
+-------------------
+This release is intended to work on systems with the following minimal
+requirements:
+- g++-4.8 or later
+- clang-3.3 or later
+- Python 2.7 (Python 2 series)
+- Python 3.4 or later (Python 3 series)
+
+This release has been tested on the following platforms:
+- Ubuntu 16.04 (64 bit) with g++-5.4.0
+- Ubuntu 14.04 (64 bit) with g++-4.8.2
+- Fedora Core 24 (64 bit) with g++-6.1.1
+- Fedora Core 22 (32 bit) with g++-5.3.1
+- Fedora Core 21 (64 bit) with g++-4.9.2
+- CentOS/RHEL 6.7 (64-bit) with g++-4.9.2
+- OS X El Capitan 10.11.4 with Xcode 7.3.1 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
+
+New user-visible features
+-------------------------
+- (aodv) The node search radius is increased progressively (as per standard). 
+- (build system) New --check-config option to waf to reprint the summary 
+  of optional features which are configured.
+- (build system) C++11 features are now supported in the codebase
+- (core) DES Metrics support; see the API docs for class DesMetrics.
+- (internet) Added TCP Vegas, Scalable, Veno, Illinois, Bic, YeAH, and
+  H-TCP congestion control algorithms
+- (internet) Add a TOS field to the InetSocketAddress class
+- (network) SocketAddressTag has been removed from the codebase.
+  Users can use RecvFrom (for UDP) or GetPeerName (for TCP) instead.
+- (traffic control) Added the FQ-CoDel and PIE queue disc models
+- (traffic control) Introduce Byte Queue Limits (BQL)
+- (wifi) A new SpectrumWifiPhy physical layer model, making use of the 
+  ns-3 spectrum framework, has been introduced.  The current version of
+  this model matches the API and behavior of YansWifiPhy closely, but
+  over time is expected to support a different PHY abstraction and error
+  models.
+- (wifi) IEEE 802.11e TXOP limits are now enforced for different access
+  categories when a QoS MAC is configured.
+
+Bugs fixed
+----------
+- Bug 231 - Avoid adding SocketAddressTag (at all)
+- Bug 1579 - Final fix for segfault caused by EDCA fragmentation
+- Bug 1797 - Rate adaptation algorithms don't work with new 802.11n/ac standards
+- Bug 1911 - AODV doesn't work with more than one NetDevice
+- Bug 1939 - Aggregating the same object to two nodes produce unexpected results
+- Bug 1977 - v4Ping verbose output when not explicitly stopped
+- Bug 2057 - ARP and Ndisc caches should be updated by receiving valid L3 packets
+- Bug 2069 - Avoid integer overflow in ByteTagList
+- Bug 2102 - Ipv4GlobalRouting confused by bridged interfaces
+- Bug 2123 - AODV doesn't use / honor IP TTL in the RREQ / RREP
+- Bug 2149 - support deprecating attributes and trace sources
+- Bug 2222 - incorrect EDCA behavior in case of internal collision
+- Bug 2270 - Support -std=c++11 by default
+- Bug 2306 - Raise DCF IsBusy() condition for CCA busy
+- Bug 2307 - Get rid of m_receivedAtLeastOneMpdu flag
+- Bug 2308 - PacketTag instead of ByteTag in LTE PDCP/RLC
+- Bug 2344 - Attribute names can't have spaces
+- Bug 2346 - sixlowpan CompressionThreshold limit can be violated
+- Bug 2347 - LrWpan Ascii traces are hooked to the wrong traces.
+- Bug 2351 - Fix symbol rate calculation for channels with 10 and 5 MHz width
+- Bug 2352 - Add 'drop oldest' drop policy to WifiMacQueue
+- Bug 2369 - Generate backoff if DCF requests access during AIFS
+- Bug 2375 - Flowmonitor parse crashes when no pkt is received
+- Bug 2376 - New A-MPDU might not be received if MPDUs of a previous A-MPDU are lost
+- Bug 2377 - SocketIpTosTag and SocketIpv6TclassTag may be added twice in UDP
+- Bug 2378 - A-MPDU variables are not correctly reset in YansWifiPhy when a PLCP preamble/header failed
+- Bug 2379 - BlockAckRequest should not be part of single-TID A-MPDUs
+- Bug 2380 - EdcaTxopN fails to retrieve TID for ADDBA requests, ADDBA responses and DELBA frames
+- Bug 2383 - IPv4 header for reassembled packets reports a wrong payload size
+- Bug 2386 - Move UanPhyGen out of Tx mode when energy depleted
+- Bug 2387 - Fix waf --check-profile command
+- Bug 2390 - WaypointMobilityModel::AddWaypoint lazy notify schedules an event using absolute time (should be relative time)
+- Bug 2392 - SYN segment advertised window should not be scaled
+- Bug 2395 - Upgrade pybindgen for Python >= 3.5
+- Bug 2396 - move utility functions to WifiPhy
+- Bug 2397 - add backoff and cw tracing to EDCA
+- Bug 2398 - add SNR tag to beacons and probe responses
+- Bug 2401 - Deserialize correctly the len of options in TcpHeader
+- Bug 2402 - IPv4 Interface forwarding state is not honored
+- Bug 2406 - Poor 802.11g performance in ad-hoc mode
+- Bug 2408 - Simulation fails when 802.11n/ac is running with HT Minstrel and pcap enabled
+- Bug 2412 - align WifiPhy frequency and channel number
+- Bug 2414 - UdpSocket doesn't call NotifyConnectionFailed
+- Bug 2419 - BsmApplication should use RecvFrom and not SocketAddressTag
+- Bug 2420 - Remove code duplication between Wifi and Wave modules
+- Bug 2421 - Forbid negative RemainingAmpduDuration for the last A-MPDU
+- Bug 2425 - UdpSocketImpl simplification
+- Bug 2427 - 802.11ac selects wrong slot duration
+- Bug 2433 - Bic does not copy private parameters
+- Bug 2436 - Do not send block ack if received A-MPDU not addressed to station
+- Bug 2438 - Routing protocols should stop processing packets coming from a non-forwarding interface
+- Bug 2439 - SixLowPan Compression kind need to be casted to int in the Print function
+- Bug 2440 - SocketIpTosTag might be added twice if a packet is sent multiple times
+- Bug 2442 - ConfigStore crash if object container has null item
+- Bug 2443 - Increase application counters to accommodate Gbps transfer rates
+- Bug 2444 - PcapHelper DataLinkType enum should have a name
+- Bug 2445 - Out of bounds array access in Minstrel HT rate control
+- Bug 2446 - Fix comma delimiter instead of pipe delimiter in Attributes
+- Bug 2448 - Run examples in traffic control test suite
+- Bug 2452 - Add Object::IsInitialized method
+- Bug 2454 - DsrRouting::NotifyDataReceipt is also triggered for wifi management packets
+- Bug 2461 - TCP BIC should copy private members
+- Bug 2468 - Simulation with A-MPDU enabled hangs when fragmentation threshold is smaller than MSDU size
+- Bug 2469 - send Block Ack Request upon short/long retry failures
+- Bug 2474 - UdpEchoClient does not call Connect with addresses of type Inet[6]SocketAddress
+- Bug 2477 - Partial fix for wifi asserts when transmit cancels a reception
+- Bug 2479 - Flow monitor does not a have a "DROP_QUEUE_DISC" drop reason
+- Bug 2480 - Use SQLite prepared statements
+- Bug 2481 - Missing or incorrect group names
+- Bug 2484 - Corrected the exit from CA_LOSS state in TCP
+- Bug 2486 - NextTxSequence was not traced back from TCB
+- Bug 2488 - Error in UanPdp::SumTapsFromMaxNc
+- Bug 2496 - BSS membership selector in SupportedRates
+- Bug 2500 - Ipv[4,6]RawSocket ignores IpTtl tag
+- Bug 2507 - ConfigStore RawTextConfigLoad doesn't reset stream error state
+- Bug 2508 - Duplicate of bug 2507
+- Bug 2514 - The maximum transmission time for VHT A-MPDUs is not correct 
+- No BugId - Arp logging: label with request or reply properly
+
+Known issues
+------------
+In general, known issues are tracked on the project tracker available
+at http://www.nsnam.org/bugzilla/
+
 Release 3.25
 ============
 
diff -Naur ns-3.25/scratch/subdir/scratch-simulator-subdir.cc ns-3.26/scratch/subdir/scratch-simulator-subdir.cc
--- ns-3.25/scratch/subdir/scratch-simulator-subdir.cc	2016-10-03 20:57:08.303247199 -0700
+++ ns-3.26/scratch/subdir/scratch-simulator-subdir.cc	2016-10-03 19:49:01.608387944 -0700
@@ -24,4 +24,6 @@
 main (int argc, char *argv[])
 {
   NS_LOG_UNCOND ("Scratch Simulator");
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
 }
diff -Naur ns-3.25/src/antenna/bindings/modulegen__gcc_ILP32.py ns-3.26/src/antenna/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/antenna/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.305247184 -0700
+++ ns-3.26/src/antenna/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.610387929 -0700
@@ -40,6 +40,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -84,6 +86,10 @@
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## cosine-antenna-model.h (module 'antenna'): ns3::CosineAntennaModel [class]
     module.add_class('CosineAntennaModel', parent=root_module['ns3::AntennaModel'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## isotropic-antenna-model.h (module 'antenna'): ns3::IsotropicAntennaModel [class]
@@ -193,6 +199,8 @@
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3CosineAntennaModel_methods(root_module, root_module['ns3::CosineAntennaModel'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3IsotropicAntennaModel_methods(root_module, root_module['ns3::IsotropicAntennaModel'])
     register_Ns3ParabolicAntennaModel_methods(root_module, root_module['ns3::ParabolicAntennaModel'])
@@ -406,23 +414,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -537,6 +545,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -558,10 +571,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -583,6 +596,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -598,6 +615,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Vector2D_methods(root_module, cls):
@@ -667,6 +688,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -1002,6 +1028,70 @@
                    [param('double', 'orientationDegrees')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
diff -Naur ns-3.25/src/antenna/bindings/modulegen__gcc_LP64.py ns-3.26/src/antenna/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/antenna/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.306247176 -0700
+++ ns-3.26/src/antenna/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.611387921 -0700
@@ -40,6 +40,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -84,6 +86,10 @@
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## cosine-antenna-model.h (module 'antenna'): ns3::CosineAntennaModel [class]
     module.add_class('CosineAntennaModel', parent=root_module['ns3::AntennaModel'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## isotropic-antenna-model.h (module 'antenna'): ns3::IsotropicAntennaModel [class]
@@ -193,6 +199,8 @@
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3CosineAntennaModel_methods(root_module, root_module['ns3::CosineAntennaModel'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3IsotropicAntennaModel_methods(root_module, root_module['ns3::IsotropicAntennaModel'])
     register_Ns3ParabolicAntennaModel_methods(root_module, root_module['ns3::ParabolicAntennaModel'])
@@ -406,23 +414,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -537,6 +545,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -558,10 +571,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -583,6 +596,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -598,6 +615,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Vector2D_methods(root_module, cls):
@@ -667,6 +688,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -1002,6 +1028,70 @@
                    [param('double', 'orientationDegrees')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
diff -Naur ns-3.25/src/antenna/test/test-isotropic-antenna.cc ns-3.26/src/antenna/test/test-isotropic-antenna.cc
--- ns-3.25/src/antenna/test/test-isotropic-antenna.cc	2016-10-03 20:57:08.315247106 -0700
+++ ns-3.26/src/antenna/test/test-isotropic-antenna.cc	2016-10-03 19:49:01.620387854 -0700
@@ -60,7 +60,7 @@
 void
 IsotropicAntennaModelTestCase::DoRun ()
 {
-  Ptr<IsotropicAntennaModel> a = Create<IsotropicAntennaModel> ();
+  Ptr<IsotropicAntennaModel> a = CreateObject<IsotropicAntennaModel> ();
   double actualGain = a->GetGainDb (m_a);
   NS_TEST_EXPECT_MSG_EQ_TOL (actualGain, m_expectedGain, 0.01, "wrong value of the radiation pattern");
 }
diff -Naur ns-3.25/src/antenna/wscript ns-3.26/src/antenna/wscript
--- ns-3.25/src/antenna/wscript	2016-10-03 20:57:08.315247106 -0700
+++ ns-3.26/src/antenna/wscript	2016-10-03 19:49:01.621387847 -0700
@@ -7,11 +7,11 @@
     module.source = [
         'model/angles.cc',
         'model/antenna-model.cc',
-        'model/isotropic-antenna-model.cc',	
+        'model/isotropic-antenna-model.cc',
         'model/cosine-antenna-model.cc',
         'model/parabolic-antenna-model.cc',
-	 ]		
-	 
+        ]
+ 
     module_test = bld.create_ns3_module_test_library('antenna')
     module_test.source = [
         'test/test-angles.cc',
@@ -26,9 +26,9 @@
     headers.source = [
         'model/angles.h',
         'model/antenna-model.h',
-        'model/isotropic-antenna-model.h',		
+        'model/isotropic-antenna-model.h',
         'model/cosine-antenna-model.h',
         'model/parabolic-antenna-model.h',
-	]
+        ]
 
     bld.ns3_python_bindings()
diff -Naur ns-3.25/src/aodv/bindings/callbacks_list.py ns-3.26/src/aodv/bindings/callbacks_list.py
--- ns-3.25/src/aodv/bindings/callbacks_list.py	2016-10-03 20:57:08.316247098 -0700
+++ ns-3.26/src/aodv/bindings/callbacks_list.py	2016-10-03 19:49:01.621387847 -0700
@@ -1,7 +1,9 @@
 callback_classes = [
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::Ptr<ns3::QueueItem>', '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::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'],
@@ -10,5 +12,4 @@
     ['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.25/src/aodv/bindings/modulegen__gcc_ILP32.py ns-3.26/src/aodv/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/aodv/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.323247043 -0700
+++ ns-3.26/src/aodv/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.628387795 -0700
@@ -138,6 +138,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -158,6 +160,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -234,10 +238,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -246,6 +250,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -304,6 +310,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -382,6 +392,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -401,6 +413,7 @@
     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::list< ns3::ArpCache::Entry * >', 'ns3::ArpCache::Entry *', 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
@@ -497,6 +510,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_aodv(module):
     root_module = module.get_root()
@@ -621,11 +637,11 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -651,6 +667,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -924,6 +942,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1332,6 +1355,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1345,6 +1373,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3IntToType__0_methods(root_module, cls):
@@ -2712,23 +2744,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2843,6 +2875,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2864,10 +2901,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2889,6 +2926,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2904,6 +2945,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -3262,6 +3307,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3404,10 +3454,19 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
@@ -3420,10 +3479,10 @@
     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]
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
@@ -3440,6 +3499,11 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3QueueDisc_methods(root_module, cls):
@@ -3573,6 +3637,11 @@
     cls.add_method('SetNetDevice', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetParentDropCallback(ns3::Callback<void, 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('SetParentDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetQuota(uint32_t const quota) [member function]
     cls.add_method('SetQuota', 
                    'void', 
@@ -3588,10 +3657,10 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::CheckConfig() [member function]
     cls.add_method('CheckConfig', 
@@ -3981,6 +4050,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -4006,6 +4080,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -4154,6 +4233,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -4181,11 +4264,6 @@
                    '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', 
@@ -4248,52 +4326,6 @@
                    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')])
@@ -4478,6 +4510,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -4766,11 +4844,11 @@
                    '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]
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::TrafficControlLayer::GetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('GetRootQueueDiscOnDevice', 
                    'ns3::Ptr< ns3::QueueDisc >', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## traffic-control-layer.h (module 'traffic-control'): static ns3::TypeId ns3::TrafficControlLayer::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -5529,6 +5607,10 @@
     cls.add_method('Lookup', 
                    'ns3::ArpCache::Entry *', 
                    [param('ns3::Ipv4Address', 'destination')])
+    ## arp-cache.h (module 'internet'): std::list<ns3::ArpCache::Entry*,std::allocator<ns3::ArpCache::Entry*> > ns3::ArpCache::LookupInverse(ns3::Address destination) [member function]
+    cls.add_method('LookupInverse', 
+                   'std::list< ns3::ArpCache::Entry * >', 
+                   [param('ns3::Address', 'destination')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::PrintArpCache(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintArpCache', 
                    'void', 
@@ -5649,6 +5731,10 @@
     cls.add_method('SetMacAddresss', 
                    'void', 
                    [param('ns3::Address', 'macAddress')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::UpdateSeen() [member function]
+    cls.add_method('UpdateSeen', 
+                   'void', 
+                   [])
     ## 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', 
@@ -5968,6 +6054,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -7300,16 +7450,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -7337,35 +7502,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -7853,6 +8013,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/aodv/bindings/modulegen__gcc_LP64.py ns-3.26/src/aodv/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/aodv/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.328247004 -0700
+++ ns-3.26/src/aodv/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.633387757 -0700
@@ -138,6 +138,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -158,6 +160,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -234,10 +238,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -246,6 +250,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -304,6 +310,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -382,6 +392,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -401,6 +413,7 @@
     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::list< ns3::ArpCache::Entry * >', 'ns3::ArpCache::Entry *', 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
@@ -497,6 +510,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_aodv(module):
     root_module = module.get_root()
@@ -621,11 +637,11 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -651,6 +667,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -924,6 +942,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1332,6 +1355,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1345,6 +1373,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3IntToType__0_methods(root_module, cls):
@@ -2712,23 +2744,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2843,6 +2875,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2864,10 +2901,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2889,6 +2926,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2904,6 +2945,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -3262,6 +3307,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3404,10 +3454,19 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
@@ -3420,10 +3479,10 @@
     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]
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
@@ -3440,6 +3499,11 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3QueueDisc_methods(root_module, cls):
@@ -3573,6 +3637,11 @@
     cls.add_method('SetNetDevice', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetParentDropCallback(ns3::Callback<void, 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('SetParentDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetQuota(uint32_t const quota) [member function]
     cls.add_method('SetQuota', 
                    'void', 
@@ -3588,10 +3657,10 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::CheckConfig() [member function]
     cls.add_method('CheckConfig', 
@@ -3981,6 +4050,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -4006,6 +4080,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -4154,6 +4233,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -4181,11 +4264,6 @@
                    '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', 
@@ -4248,52 +4326,6 @@
                    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')])
@@ -4478,6 +4510,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -4766,11 +4844,11 @@
                    '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]
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::TrafficControlLayer::GetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('GetRootQueueDiscOnDevice', 
                    'ns3::Ptr< ns3::QueueDisc >', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## traffic-control-layer.h (module 'traffic-control'): static ns3::TypeId ns3::TrafficControlLayer::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -5529,6 +5607,10 @@
     cls.add_method('Lookup', 
                    'ns3::ArpCache::Entry *', 
                    [param('ns3::Ipv4Address', 'destination')])
+    ## arp-cache.h (module 'internet'): std::list<ns3::ArpCache::Entry*,std::allocator<ns3::ArpCache::Entry*> > ns3::ArpCache::LookupInverse(ns3::Address destination) [member function]
+    cls.add_method('LookupInverse', 
+                   'std::list< ns3::ArpCache::Entry * >', 
+                   [param('ns3::Address', 'destination')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::PrintArpCache(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintArpCache', 
                    'void', 
@@ -5649,6 +5731,10 @@
     cls.add_method('SetMacAddresss', 
                    'void', 
                    [param('ns3::Address', 'macAddress')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::UpdateSeen() [member function]
+    cls.add_method('UpdateSeen', 
+                   'void', 
+                   [])
     ## 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', 
@@ -5968,6 +6054,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -7300,16 +7450,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -7337,35 +7502,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -7853,6 +8013,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/aodv/model/aodv-routing-protocol.cc ns-3.26/src/aodv/model/aodv-routing-protocol.cc
--- ns-3.25/src/aodv/model/aodv-routing-protocol.cc	2016-10-03 20:57:08.335246950 -0700
+++ ns-3.26/src/aodv/model/aodv-routing-protocol.cc	2016-10-03 19:49:01.640387705 -0700
@@ -35,6 +35,8 @@
 #include "ns3/inet-socket-address.h"
 #include "ns3/trace-source-accessor.h"
 #include "ns3/udp-socket-factory.h"
+#include "ns3/udp-l4-protocol.h"
+#include "ns3/udp-header.h"
 #include "ns3/wifi-net-device.h"
 #include "ns3/adhoc-wifi-mac.h"
 #include "ns3/string.h"
@@ -118,32 +120,36 @@
 
 //-----------------------------------------------------------------------------
 RoutingProtocol::RoutingProtocol () :
-  RreqRetries (2),
-  RreqRateLimit (10),
-  RerrRateLimit (10),
-  ActiveRouteTimeout (Seconds (3)),
-  NetDiameter (35),
-  NodeTraversalTime (MilliSeconds (40)),
-  NetTraversalTime (Time ((2 * NetDiameter) * NodeTraversalTime)),
-  PathDiscoveryTime ( Time (2 * NetTraversalTime)),
-  MyRouteTimeout (Time (2 * std::max (PathDiscoveryTime, ActiveRouteTimeout))),
-  HelloInterval (Seconds (1)),
-  AllowedHelloLoss (2),
-  DeletePeriod (Time (5 * std::max (ActiveRouteTimeout, HelloInterval))),
-  NextHopWait (NodeTraversalTime + MilliSeconds (10)),
-  BlackListTimeout (Time (RreqRetries * NetTraversalTime)),
-  MaxQueueLen (64),
-  MaxQueueTime (Seconds (30)),
-  DestinationOnly (false),
-  GratuitousReply (true),
-  EnableHello (false),
-  m_routingTable (DeletePeriod),
-  m_queue (MaxQueueLen, MaxQueueTime),
+  m_rreqRetries (2),
+  m_ttlStart (1),
+  m_ttlIncrement (2),
+  m_ttlThreshold (7),
+  m_timeoutBuffer (2),
+  m_rreqRateLimit (10),
+  m_rerrRateLimit (10),
+  m_activeRouteTimeout (Seconds (3)),
+  m_netDiameter (35),
+  m_nodeTraversalTime (MilliSeconds (40)),
+  m_netTraversalTime (Time ((2 * m_netDiameter) * m_nodeTraversalTime)),
+  m_pathDiscoveryTime ( Time (2 * m_netTraversalTime)),
+  m_myRouteTimeout (Time (2 * std::max (m_pathDiscoveryTime, m_activeRouteTimeout))),
+  m_helloInterval (Seconds (1)),
+  m_allowedHelloLoss (2),
+  m_deletePeriod (Time (5 * std::max (m_activeRouteTimeout, m_helloInterval))),
+  m_nextHopWait (m_nodeTraversalTime + MilliSeconds (10)),
+  m_blackListTimeout (Time (m_rreqRetries * m_netTraversalTime)),
+  m_maxQueueLen (64),
+  m_maxQueueTime (Seconds (30)),
+  m_destinationOnly (false),
+  m_gratuitousReply (true),
+  m_enableHello (false),
+  m_routingTable (m_deletePeriod),
+  m_queue (m_maxQueueLen, m_maxQueueTime),
   m_requestId (0),
   m_seqNo (0),
-  m_rreqIdCache (PathDiscoveryTime),
-  m_dpd (PathDiscoveryTime),
-  m_nb (HelloInterval),
+  m_rreqIdCache (m_pathDiscoveryTime),
+  m_dpd (m_pathDiscoveryTime),
+  m_nb (m_helloInterval),
   m_rreqCount (0),
   m_rerrCount (0),
   m_htimer (Timer::CANCEL_ON_DESTROY),
@@ -163,58 +169,74 @@
     .AddConstructor<RoutingProtocol> ()
     .AddAttribute ("HelloInterval", "HELLO messages emission interval.",
                    TimeValue (Seconds (1)),
-                   MakeTimeAccessor (&RoutingProtocol::HelloInterval),
+                   MakeTimeAccessor (&RoutingProtocol::m_helloInterval),
                    MakeTimeChecker ())
+    .AddAttribute ("TtlStart", "Initial TTL value for RREQ.",
+                   UintegerValue (1),
+                   MakeUintegerAccessor (&RoutingProtocol::m_ttlStart),
+                   MakeUintegerChecker<uint16_t> ())
+    .AddAttribute ("TtlIncrement", "TTL increment for each attempt using the expanding ring search for RREQ dissemination.",
+                   UintegerValue (2),
+                   MakeUintegerAccessor (&RoutingProtocol::m_ttlIncrement),
+                   MakeUintegerChecker<uint16_t> ())
+    .AddAttribute ("TtlThreshold", "Maximum TTL value for expanding ring search, TTL = NetDiameter is used beyond this value.",
+                   UintegerValue (7),
+                   MakeUintegerAccessor (&RoutingProtocol::m_ttlThreshold),
+                   MakeUintegerChecker<uint16_t> ())
+    .AddAttribute ("TimeoutBuffer", "Provide a buffer for the timeout.",
+                   UintegerValue (2),
+                   MakeUintegerAccessor (&RoutingProtocol::m_timeoutBuffer),
+                   MakeUintegerChecker<uint16_t> ())
     .AddAttribute ("RreqRetries", "Maximum number of retransmissions of RREQ to discover a route",
                    UintegerValue (2),
-                   MakeUintegerAccessor (&RoutingProtocol::RreqRetries),
+                   MakeUintegerAccessor (&RoutingProtocol::m_rreqRetries),
                    MakeUintegerChecker<uint32_t> ())
     .AddAttribute ("RreqRateLimit", "Maximum number of RREQ per second.",
                    UintegerValue (10),
-                   MakeUintegerAccessor (&RoutingProtocol::RreqRateLimit),
+                   MakeUintegerAccessor (&RoutingProtocol::m_rreqRateLimit),
                    MakeUintegerChecker<uint32_t> ())
     .AddAttribute ("RerrRateLimit", "Maximum number of RERR per second.",
                    UintegerValue (10),
-                   MakeUintegerAccessor (&RoutingProtocol::RerrRateLimit),
+                   MakeUintegerAccessor (&RoutingProtocol::m_rerrRateLimit),
                    MakeUintegerChecker<uint32_t> ())
     .AddAttribute ("NodeTraversalTime", "Conservative estimate of the average one hop traversal time for packets and should include "
                    "queuing delays, interrupt processing times and transfer times.",
                    TimeValue (MilliSeconds (40)),
-                   MakeTimeAccessor (&RoutingProtocol::NodeTraversalTime),
+                   MakeTimeAccessor (&RoutingProtocol::m_nodeTraversalTime),
                    MakeTimeChecker ())
     .AddAttribute ("NextHopWait", "Period of our waiting for the neighbour's RREP_ACK = 10 ms + NodeTraversalTime",
                    TimeValue (MilliSeconds (50)),
-                   MakeTimeAccessor (&RoutingProtocol::NextHopWait),
+                   MakeTimeAccessor (&RoutingProtocol::m_nextHopWait),
                    MakeTimeChecker ())
     .AddAttribute ("ActiveRouteTimeout", "Period of time during which the route is considered to be valid",
                    TimeValue (Seconds (3)),
-                   MakeTimeAccessor (&RoutingProtocol::ActiveRouteTimeout),
+                   MakeTimeAccessor (&RoutingProtocol::m_activeRouteTimeout),
                    MakeTimeChecker ())
     .AddAttribute ("MyRouteTimeout", "Value of lifetime field in RREP generating by this node = 2 * max(ActiveRouteTimeout, PathDiscoveryTime)",
                    TimeValue (Seconds (11.2)),
-                   MakeTimeAccessor (&RoutingProtocol::MyRouteTimeout),
+                   MakeTimeAccessor (&RoutingProtocol::m_myRouteTimeout),
                    MakeTimeChecker ())
     .AddAttribute ("BlackListTimeout", "Time for which the node is put into the blacklist = RreqRetries * NetTraversalTime",
                    TimeValue (Seconds (5.6)),
-                   MakeTimeAccessor (&RoutingProtocol::BlackListTimeout),
+                   MakeTimeAccessor (&RoutingProtocol::m_blackListTimeout),
                    MakeTimeChecker ())
     .AddAttribute ("DeletePeriod", "DeletePeriod is intended to provide an upper bound on the time for which an upstream node A "
                    "can have a neighbor B as an active next hop for destination D, while B has invalidated the route to D."
                    " = 5 * max (HelloInterval, ActiveRouteTimeout)",
                    TimeValue (Seconds (15)),
-                   MakeTimeAccessor (&RoutingProtocol::DeletePeriod),
+                   MakeTimeAccessor (&RoutingProtocol::m_deletePeriod),
                    MakeTimeChecker ())
     .AddAttribute ("NetDiameter", "Net diameter measures the maximum possible number of hops between two nodes in the network",
                    UintegerValue (35),
-                   MakeUintegerAccessor (&RoutingProtocol::NetDiameter),
+                   MakeUintegerAccessor (&RoutingProtocol::m_netDiameter),
                    MakeUintegerChecker<uint32_t> ())
     .AddAttribute ("NetTraversalTime", "Estimate of the average net traversal time = 2 * NodeTraversalTime * NetDiameter",
                    TimeValue (Seconds (2.8)),
-                   MakeTimeAccessor (&RoutingProtocol::NetTraversalTime),
+                   MakeTimeAccessor (&RoutingProtocol::m_netTraversalTime),
                    MakeTimeChecker ())
     .AddAttribute ("PathDiscoveryTime", "Estimate of maximum time needed to find route in network = 2 * NetTraversalTime",
                    TimeValue (Seconds (5.6)),
-                   MakeTimeAccessor (&RoutingProtocol::PathDiscoveryTime),
+                   MakeTimeAccessor (&RoutingProtocol::m_pathDiscoveryTime),
                    MakeTimeChecker ())
     .AddAttribute ("MaxQueueLen", "Maximum number of packets that we allow a routing protocol to buffer.",
                    UintegerValue (64),
@@ -228,7 +250,7 @@
                    MakeTimeChecker ())
     .AddAttribute ("AllowedHelloLoss", "Number of hello messages which may be loss for valid link.",
                    UintegerValue (2),
-                   MakeUintegerAccessor (&RoutingProtocol::AllowedHelloLoss),
+                   MakeUintegerAccessor (&RoutingProtocol::m_allowedHelloLoss),
                    MakeUintegerChecker<uint16_t> ())
     .AddAttribute ("GratuitousReply", "Indicates whether a gratuitous RREP should be unicast to the node originated route discovery.",
                    BooleanValue (true),
@@ -262,13 +284,13 @@
 void
 RoutingProtocol::SetMaxQueueLen (uint32_t len)
 {
-  MaxQueueLen = len;
+  m_maxQueueLen = len;
   m_queue.SetMaxQueueLen (len);
 }
 void
 RoutingProtocol::SetMaxQueueTime (Time t)
 {
-  MaxQueueTime = t;
+  m_maxQueueTime = t;
   m_queue.SetQueueTimeout (t);
 }
 
@@ -319,7 +341,7 @@
 RoutingProtocol::Start ()
 {
   NS_LOG_FUNCTION (this);
-  if (EnableHello)
+  if (m_enableHello)
     {
       m_nb.ScheduleTimer ();
     }
@@ -365,8 +387,8 @@
           sockerr = Socket::ERROR_NOROUTETOHOST;
           return Ptr<Ipv4Route> ();
         }
-      UpdateRouteLifeTime (dst, ActiveRouteTimeout);
-      UpdateRouteLifeTime (route->GetGateway (), ActiveRouteTimeout);
+      UpdateRouteLifeTime (dst, m_activeRouteTimeout);
+      UpdateRouteLifeTime (route->GetGateway (), m_activeRouteTimeout);
       return route;
     }
 
@@ -459,7 +481,7 @@
                 NS_LOG_DEBUG ("Duplicated packet " << p->GetUid () << " from " << origin << ". Drop.");
                 return true;
               }
-            UpdateRouteLifeTime (origin, ActiveRouteTimeout);
+            UpdateRouteLifeTime (origin, m_activeRouteTimeout);
             Ptr<Packet> packet = p->Copy ();
             if (lcb.IsNull () == false)
               {
@@ -472,10 +494,20 @@
                 NS_LOG_ERROR ("Unable to deliver packet locally due to null callback " << p->GetUid () << " from " << origin);
                 ecb (p, header, Socket::ERROR_NOROUTETOHOST);
               }
-            if (!EnableBroadcast)
+            if (!m_enableBroadcast)
               {
                 return true;
               }
+            if (header.GetProtocol () == UdpL4Protocol::PROT_NUMBER)
+              {
+                UdpHeader udpHeader;
+                p->PeekHeader (udpHeader);
+                if (udpHeader.GetDestinationPort () == AODV_PORT)
+                  {
+                    // AODV packets sent in broadcast are already managed
+                    return true;
+                  }
+              }
             if (header.GetTtl () > 1)
               {
                 NS_LOG_LOGIC ("Forward broadcast. TTL " << (uint16_t) header.GetTtl ());
@@ -501,12 +533,12 @@
   // Unicast local delivery
   if (m_ipv4->IsDestinationAddress (dst, iif))
     {
-      UpdateRouteLifeTime (origin, ActiveRouteTimeout);
+      UpdateRouteLifeTime (origin, m_activeRouteTimeout);
       RoutingTableEntry toOrigin;
       if (m_routingTable.LookupValidRoute (origin, toOrigin))
         {
-          UpdateRouteLifeTime (toOrigin.GetNextHop (), ActiveRouteTimeout);
-          m_nb.Update (toOrigin.GetNextHop (), ActiveRouteTimeout);
+          UpdateRouteLifeTime (toOrigin.GetNextHop (), m_activeRouteTimeout);
+          m_nb.Update (toOrigin.GetNextHop (), m_activeRouteTimeout);
         }
       if (lcb.IsNull () == false)
         {
@@ -521,6 +553,14 @@
       return true;
     }
 
+  // Check if input device supports IP forwarding
+  if (m_ipv4->IsForwarding (iif) == false)
+    {
+      NS_LOG_LOGIC ("Forwarding disabled for this interface");
+      ecb (p, header, Socket::ERROR_NOROUTETOHOST);
+      return true;
+    }
+
   // Forwarding
   return Forwarding (p, header, ucb, ecb);
 }
@@ -547,9 +587,9 @@
            *  path to the destination is updated to be no less than the current
            *  time plus ActiveRouteTimeout.
            */
-          UpdateRouteLifeTime (origin, ActiveRouteTimeout);
-          UpdateRouteLifeTime (dst, ActiveRouteTimeout);
-          UpdateRouteLifeTime (route->GetGateway (), ActiveRouteTimeout);
+          UpdateRouteLifeTime (origin, m_activeRouteTimeout);
+          UpdateRouteLifeTime (dst, m_activeRouteTimeout);
+          UpdateRouteLifeTime (route->GetGateway (), m_activeRouteTimeout);
           /*
            *  Since the route between each originator and destination pair is expected to be symmetric, the
            *  Active Route Lifetime for the previous hop, along the reverse path back to the IP source, is also updated
@@ -557,10 +597,10 @@
            */
           RoutingTableEntry toOrigin;
           m_routingTable.LookupRoute (origin, toOrigin);
-          UpdateRouteLifeTime (toOrigin.GetNextHop (), ActiveRouteTimeout);
+          UpdateRouteLifeTime (toOrigin.GetNextHop (), m_activeRouteTimeout);
 
-          m_nb.Update (route->GetGateway (), ActiveRouteTimeout);
-          m_nb.Update (toOrigin.GetNextHop (), ActiveRouteTimeout);
+          m_nb.Update (route->GetGateway (), m_activeRouteTimeout);
+          m_nb.Update (toOrigin.GetNextHop (), m_activeRouteTimeout);
 
           ucb (route, p, header);
           return true;
@@ -621,10 +661,10 @@
                                              UdpSocketFactory::GetTypeId ());
   NS_ASSERT (socket != 0);
   socket->SetRecvCallback (MakeCallback (&RoutingProtocol::RecvAodv, this));
-  socket->Bind (InetSocketAddress (Ipv4Address::GetAny (), AODV_PORT));
+  socket->Bind (InetSocketAddress (iface.GetLocal (), AODV_PORT));
   socket->BindToNetDevice (l3->GetNetDevice (i));
   socket->SetAllowBroadcast (true);
-  socket->SetAttribute ("IpTtl", UintegerValue (1));
+  socket->SetIpRecvTtl (true);
   m_socketAddresses.insert (std::make_pair (socket, iface));
 
   // create also a subnet broadcast socket
@@ -635,7 +675,7 @@
   socket->Bind (InetSocketAddress (iface.GetBroadcast (), AODV_PORT));
   socket->BindToNetDevice (l3->GetNetDevice (i));
   socket->SetAllowBroadcast (true);
-  socket->SetAttribute ("IpTtl", UintegerValue (1));
+  socket->SetIpRecvTtl (true);
   m_socketSubnetBroadcastAddresses.insert (std::make_pair (socket, iface));
 
   // Add local broadcast record to the routing table
@@ -736,7 +776,7 @@
           socket->Bind (InetSocketAddress (iface.GetBroadcast (), AODV_PORT));
           socket->BindToNetDevice (l3->GetNetDevice (i));
           socket->SetAllowBroadcast (true);
-          socket->SetAttribute ("IpTtl", UintegerValue (1));
+          socket->SetIpRecvTtl (true);
           m_socketSubnetBroadcastAddresses.insert (std::make_pair (socket, iface));
 
           // Add local broadcast record to the routing table
@@ -785,7 +825,7 @@
           socket->Bind (InetSocketAddress (iface.GetLocal (), AODV_PORT));
           socket->BindToNetDevice (l3->GetNetDevice (i));
           socket->SetAllowBroadcast (true);
-          socket->SetAttribute ("IpTtl", UintegerValue (1));
+          socket->SetIpRecvTtl (true);
           m_socketAddresses.insert (std::make_pair (socket, iface));
 
           // create also a unicast socket
@@ -796,7 +836,7 @@
           socket->Bind (InetSocketAddress (iface.GetBroadcast (), AODV_PORT));
           socket->BindToNetDevice (l3->GetNetDevice (i));
           socket->SetAllowBroadcast (true);
-          socket->SetAttribute ("IpTtl", UintegerValue (1));
+          socket->SetIpRecvTtl (true);
           m_socketSubnetBroadcastAddresses.insert (std::make_pair (socket, iface));
 
           // Add local broadcast record to the routing table
@@ -889,7 +929,7 @@
 {
   NS_LOG_FUNCTION ( this << dst);
   // A node SHOULD NOT originate more than RREQ_RATELIMIT RREQ messages per second.
-  if (m_rreqCount == RreqRateLimit)
+  if (m_rreqCount == m_rreqRateLimit)
     {
       Simulator::Schedule (m_rreqRateLimitTimer.GetDelayLeft () + MicroSeconds (100),
                            &RoutingProtocol::SendRequest, this, dst);
@@ -902,14 +942,29 @@
   rreqHeader.SetDst (dst);
 
   RoutingTableEntry rt;
+  // Using the Hop field in Routing Table to manage the expanding ring search
+  uint16_t ttl = m_ttlStart;
   if (m_routingTable.LookupRoute (dst, rt))
     {
-      rreqHeader.SetHopCount (rt.GetHop ());
+      if (rt.GetFlag () != IN_SEARCH)
+        {
+          ttl = std::min<uint16_t> (rt.GetHop () + m_ttlIncrement, m_netDiameter);
+        }
+      else
+        {
+          ttl = rt.GetHop () + m_ttlIncrement;
+          if (ttl > m_ttlThreshold)
+            ttl = m_netDiameter;
+        }
+      if (ttl == m_netDiameter)
+        rt.IncrementRreqCnt ();
       if (rt.GetValidSeqNo ())
         rreqHeader.SetDstSeqno (rt.GetSeqNo ());
       else
         rreqHeader.SetUnknownSeqno (true);
+      rt.SetHop (ttl);
       rt.SetFlag (IN_SEARCH);
+      rt.SetLifeTime (m_pathDiscoveryTime);
       m_routingTable.Update (rt);
     }
   else
@@ -917,22 +972,24 @@
       rreqHeader.SetUnknownSeqno (true);
       Ptr<NetDevice> dev = 0;
       RoutingTableEntry newEntry (/*device=*/ dev, /*dst=*/ dst, /*validSeqNo=*/ false, /*seqno=*/ 0,
-                                              /*iface=*/ Ipv4InterfaceAddress (),/*hop=*/ 0,
-                                              /*nextHop=*/ Ipv4Address (), /*lifeTime=*/ Seconds (0));
+                                              /*iface=*/ Ipv4InterfaceAddress (),/*hop=*/ ttl,
+                                              /*nextHop=*/ Ipv4Address (), /*lifeTime=*/ m_pathDiscoveryTime);
+      // Check if TtlStart == NetDiameter
+      if (ttl == m_netDiameter)
+        newEntry.IncrementRreqCnt ();
       newEntry.SetFlag (IN_SEARCH);
       m_routingTable.AddRoute (newEntry);
     }
 
-  if (GratuitousReply)
+  if (m_gratuitousReply)
     rreqHeader.SetGratiousRrep (true);
-  if (DestinationOnly)
+  if (m_destinationOnly)
     rreqHeader.SetDestinationOnly (true);
 
   m_seqNo++;
   rreqHeader.SetOriginSeqno (m_seqNo);
   m_requestId++;
   rreqHeader.SetId (m_requestId);
-  rreqHeader.SetHopCount (0);
 
   // Send RREQ as subnet directed broadcast from each interface used by aodv
   for (std::map<Ptr<Socket>, Ipv4InterfaceAddress>::const_iterator j =
@@ -945,6 +1002,9 @@
       m_rreqIdCache.IsDuplicate (iface.GetLocal (), m_requestId);
 
       Ptr<Packet> packet = Create<Packet> ();
+      SocketIpTtlTag tag;
+      tag.SetTtl (ttl);
+      packet->AddPacketTag (tag);
       packet->AddHeader (rreqHeader);
       TypeHeader tHeader (AODVTYPE_RREQ);
       packet->AddHeader (tHeader);
@@ -985,10 +1045,18 @@
   m_addressReqTimer[dst].SetArguments (dst);
   RoutingTableEntry rt;
   m_routingTable.LookupRoute (dst, rt);
-  rt.IncrementRreqCnt ();
-  m_routingTable.Update (rt);
-  m_addressReqTimer[dst].Schedule (Time (rt.GetRreqCnt () * NetTraversalTime));
-  NS_LOG_LOGIC ("Scheduled RREQ retry in " << Time (rt.GetRreqCnt () * NetTraversalTime).GetSeconds () << " seconds");
+  Time retry;
+  if (rt.GetHop () < m_netDiameter)
+    {
+      retry = 2 * m_nodeTraversalTime * (rt.GetHop () + m_timeoutBuffer);
+    }
+  else
+    {
+      // Binary exponential backoff
+      retry = std::pow<uint16_t> (2, rt.GetRreqCnt () - 1) * m_netTraversalTime;
+    }
+  m_addressReqTimer[dst].Schedule (retry);
+  NS_LOG_LOGIC ("Scheduled RREQ retry in " << retry.GetSeconds () << " seconds");
 }
 
 void
@@ -1077,7 +1145,7 @@
       Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (receiver));
       RoutingTableEntry newEntry (/*device=*/ dev, /*dst=*/ sender, /*know seqno=*/ false, /*seqno=*/ 0,
                                               /*iface=*/ m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0),
-                                              /*hops=*/ 1, /*next hop=*/ sender, /*lifetime=*/ ActiveRouteTimeout);
+                                              /*hops=*/ 1, /*next hop=*/ sender, /*lifetime=*/ m_activeRouteTimeout);
       m_routingTable.AddRoute (newEntry);
     }
   else
@@ -1085,13 +1153,13 @@
       Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (receiver));
       if (toNeighbor.GetValidSeqNo () && (toNeighbor.GetHop () == 1) && (toNeighbor.GetOutputDevice () == dev))
         {
-          toNeighbor.SetLifeTime (std::max (ActiveRouteTimeout, toNeighbor.GetLifeTime ()));
+          toNeighbor.SetLifeTime (std::max (m_activeRouteTimeout, toNeighbor.GetLifeTime ()));
         }
       else
         {
           RoutingTableEntry newEntry (/*device=*/ dev, /*dst=*/ sender, /*know seqno=*/ false, /*seqno=*/ 0,
                                                   /*iface=*/ m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0),
-                                                  /*hops=*/ 1, /*next hop=*/ sender, /*lifetime=*/ std::max (ActiveRouteTimeout, toNeighbor.GetLifeTime ()));
+                                                  /*hops=*/ 1, /*next hop=*/ sender, /*lifetime=*/ std::max (m_activeRouteTimeout, toNeighbor.GetLifeTime ()));
           m_routingTable.Update (newEntry);
         }
     }
@@ -1149,7 +1217,7 @@
       Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (receiver));
       RoutingTableEntry newEntry (/*device=*/ dev, /*dst=*/ origin, /*validSeno=*/ true, /*seqNo=*/ rreqHeader.GetOriginSeqno (),
                                               /*iface=*/ m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0), /*hops=*/ hop,
-                                              /*nextHop*/ src, /*timeLife=*/ Time ((2 * NetTraversalTime - 2 * hop * NodeTraversalTime)));
+                                              /*nextHop*/ src, /*timeLife=*/ Time ((2 * m_netTraversalTime - 2 * hop * m_nodeTraversalTime)));
       m_routingTable.AddRoute (newEntry);
     }
   else
@@ -1166,7 +1234,7 @@
       toOrigin.SetOutputDevice (m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (receiver)));
       toOrigin.SetInterface (m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0));
       toOrigin.SetHop (hop);
-      toOrigin.SetLifeTime (std::max (Time (2 * NetTraversalTime - 2 * hop * NodeTraversalTime),
+      toOrigin.SetLifeTime (std::max (Time (2 * m_netTraversalTime - 2 * hop * m_nodeTraversalTime),
                                       toOrigin.GetLifeTime ()));
       m_routingTable.Update (toOrigin);
       //m_nb.Update (src, Time (AllowedHelloLoss * HelloInterval));
@@ -1180,12 +1248,12 @@
       Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (receiver));
       RoutingTableEntry newEntry (dev, src, false, rreqHeader.GetOriginSeqno (),
                                               m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0),
-                                              1, src, ActiveRouteTimeout);
+                                              1, src, m_activeRouteTimeout);
       m_routingTable.AddRoute (newEntry);
     }
   else
     {
-      toNeighbor.SetLifeTime (ActiveRouteTimeout);
+      toNeighbor.SetLifeTime (m_activeRouteTimeout);
       toNeighbor.SetValidSeqNo (false);
       toNeighbor.SetSeqNo (rreqHeader.GetOriginSeqno ()); 
       toNeighbor.SetFlag (VALID);
@@ -1195,7 +1263,7 @@
       toNeighbor.SetNextHop (src);
       m_routingTable.Update (toNeighbor);
     }
-  m_nb.Update (src, Time (AllowedHelloLoss * HelloInterval));
+  m_nb.Update (src, Time (m_allowedHelloLoss * m_helloInterval));
 
   NS_LOG_LOGIC (receiver << " receive RREQ with hop count " << static_cast<uint32_t>(rreqHeader.GetHopCount ()) 
                          << " ID " << rreqHeader.GetId ()
@@ -1246,12 +1314,23 @@
         }
     }
 
+  SocketIpTtlTag tag;
+  p->RemovePacketTag (tag);
+  if (tag.GetTtl () < 2)
+    {
+      NS_LOG_DEBUG ("TTL exceeded. Drop RREQ origin " << src << " destination " << dst );
+      return;
+    }
+
   for (std::map<Ptr<Socket>, Ipv4InterfaceAddress>::const_iterator j =
          m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j)
     {
       Ptr<Socket> socket = j->first;
       Ipv4InterfaceAddress iface = j->second;
       Ptr<Packet> packet = Create<Packet> ();
+      SocketIpTtlTag ttl;
+      ttl.SetTtl (tag.GetTtl () - 1);
+      packet->AddPacketTag (ttl);
       packet->AddHeader (rreqHeader);
       TypeHeader tHeader (AODVTYPE_RREQ);
       packet->AddHeader (tHeader);
@@ -1282,8 +1361,11 @@
   if (!rreqHeader.GetUnknownSeqno () && (rreqHeader.GetDstSeqno () == m_seqNo + 1))
     m_seqNo++;
   RrepHeader rrepHeader ( /*prefixSize=*/ 0, /*hops=*/ 0, /*dst=*/ rreqHeader.GetDst (),
-                                          /*dstSeqNo=*/ m_seqNo, /*origin=*/ toOrigin.GetDestination (), /*lifeTime=*/ MyRouteTimeout);
+                                          /*dstSeqNo=*/ m_seqNo, /*origin=*/ toOrigin.GetDestination (), /*lifeTime=*/ m_myRouteTimeout);
   Ptr<Packet> packet = Create<Packet> ();
+  SocketIpTtlTag tag;
+  tag.SetTtl (toOrigin.GetHop ());
+  packet->AddPacketTag (tag);
   packet->AddHeader (rrepHeader);
   TypeHeader tHeader (AODVTYPE_RREP);
   packet->AddHeader (tHeader);
@@ -1307,8 +1389,8 @@
       RoutingTableEntry toNextHop;
       m_routingTable.LookupRoute (toOrigin.GetNextHop (), toNextHop);
       toNextHop.m_ackTimer.SetFunction (&RoutingProtocol::AckTimerExpire, this);
-      toNextHop.m_ackTimer.SetArguments (toNextHop.GetDestination (), BlackListTimeout);
-      toNextHop.m_ackTimer.SetDelay (NextHopWait);
+      toNextHop.m_ackTimer.SetArguments (toNextHop.GetDestination (), m_blackListTimeout);
+      toNextHop.m_ackTimer.SetDelay (m_nextHopWait);
     }
   toDst.InsertPrecursor (toOrigin.GetNextHop ());
   toOrigin.InsertPrecursor (toDst.GetNextHop ());
@@ -1316,6 +1398,9 @@
   m_routingTable.Update (toOrigin);
 
   Ptr<Packet> packet = Create<Packet> ();
+  SocketIpTtlTag tag;
+  tag.SetTtl (toOrigin.GetHop ());
+  packet->AddPacketTag (tag);
   packet->AddHeader (rrepHeader);
   TypeHeader tHeader (AODVTYPE_RREP);
   packet->AddHeader (tHeader);
@@ -1330,6 +1415,9 @@
                                                  /*dst seqno=*/ toOrigin.GetSeqNo (), /*origin=*/ toDst.GetDestination (),
                                                  /*lifetime=*/ toOrigin.GetLifeTime ());
       Ptr<Packet> packetToDst = Create<Packet> ();
+      SocketIpTtlTag gratTag;
+      gratTag.SetTtl (toDst.GetHop ());
+      packetToDst->AddPacketTag (gratTag);
       packetToDst->AddHeader (gratRepHeader);
       TypeHeader type (AODVTYPE_RREP);
       packetToDst->AddHeader (type);
@@ -1347,6 +1435,9 @@
   RrepAckHeader h;
   TypeHeader typeHeader (AODVTYPE_RREP_ACK);
   Ptr<Packet> packet = Create<Packet> ();
+  SocketIpTtlTag tag;
+  tag.SetTtl (1);
+  packet->AddPacketTag (tag);
   packet->AddHeader (h);
   packet->AddHeader (typeHeader);
   RoutingTableEntry toNeighbor;
@@ -1450,7 +1541,7 @@
     {
       return; // Impossible! drop.
     }
-  toOrigin.SetLifeTime (std::max (ActiveRouteTimeout, toOrigin.GetLifeTime ()));
+  toOrigin.SetLifeTime (std::max (m_activeRouteTimeout, toOrigin.GetLifeTime ()));
   m_routingTable.Update (toOrigin);
 
   // Update information about precursors
@@ -1472,8 +1563,18 @@
       toNextHopToOrigin.InsertPrecursor (toDst.GetNextHop ());
       m_routingTable.Update (toNextHopToOrigin);
     }
+  SocketIpTtlTag tag;
+  p->RemovePacketTag(tag);
+  if (tag.GetTtl () < 2)
+    {
+      NS_LOG_DEBUG ("TTL exceeded. Drop RREP destination " << dst << " origin " << rrepHeader.GetOrigin ());
+      return;
+    }
 
   Ptr<Packet> packet = Create<Packet> ();
+  SocketIpTtlTag ttl;
+  ttl.SetTtl (tag.GetTtl() - 1);
+  packet->AddPacketTag (ttl);
   packet->AddHeader (rrepHeader);
   TypeHeader tHeader (AODVTYPE_RREP);
   packet->AddHeader (tHeader);
@@ -1515,7 +1616,7 @@
     }
   else
     {
-      toNeighbor.SetLifeTime (std::max (Time (AllowedHelloLoss * HelloInterval), toNeighbor.GetLifeTime ()));
+      toNeighbor.SetLifeTime (std::max (Time (m_allowedHelloLoss * m_helloInterval), toNeighbor.GetLifeTime ()));
       toNeighbor.SetSeqNo (rrepHeader.GetDstSeqno ());
       toNeighbor.SetValidSeqNo (true);
       toNeighbor.SetFlag (VALID);
@@ -1525,9 +1626,9 @@
       toNeighbor.SetNextHop (rrepHeader.GetDst ());
       m_routingTable.Update (toNeighbor);
     }
-  if (EnableHello)
+  if (m_enableHello)
     {
-      m_nb.Update (rrepHeader.GetDst (), Time (AllowedHelloLoss * HelloInterval));
+      m_nb.Update (rrepHeader.GetDst (), Time (m_allowedHelloLoss * m_helloInterval));
     }
 }
 
@@ -1561,6 +1662,9 @@
         {
           TypeHeader typeHeader (AODVTYPE_RERR);
           Ptr<Packet> packet = Create<Packet> ();
+          SocketIpTtlTag tag;
+          tag.SetTtl (1);
+          packet->AddPacketTag (tag);
           packet->AddHeader (rerrHeader);
           packet->AddHeader (typeHeader);
           SendRerrMessage (packet, precursors);
@@ -1578,6 +1682,9 @@
     {
       TypeHeader typeHeader (AODVTYPE_RERR);
       Ptr<Packet> packet = Create<Packet> ();
+      SocketIpTtlTag tag;
+      tag.SetTtl (1);
+      packet->AddPacketTag (tag);
       packet->AddHeader (rerrHeader);
       packet->AddHeader (typeHeader);
       SendRerrMessage (packet, precursors);
@@ -1601,9 +1708,9 @@
    *  receiving any RREP, all data packets destined for the corresponding destination SHOULD be
    *  dropped from the buffer and a Destination Unreachable message SHOULD be delivered to the application.
    */
-  if (toDst.GetRreqCnt () == RreqRetries)
+  if (toDst.GetRreqCnt () == m_rreqRetries)
     {
-      NS_LOG_LOGIC ("route discovery to " << dst << " has been attempted RreqRetries (" << RreqRetries << ") times");
+      NS_LOG_LOGIC ("route discovery to " << dst << " has been attempted RreqRetries (" << m_rreqRetries << ") times with ttl " << m_netDiameter);
       m_addressReqTimer.erase (dst);
       m_routingTable.DeleteRoute (dst);
       NS_LOG_DEBUG ("Route not found. Drop all packets with dst " << dst);
@@ -1613,7 +1720,7 @@
 
   if (toDst.GetFlag () == IN_SEARCH)
     {
-      NS_LOG_LOGIC ("Resend RREQ to " << dst << " ttl " << NetDiameter);
+      NS_LOG_LOGIC ("Resend RREQ to " << dst << " previous ttl " << toDst.GetHop ());
       SendRequest (dst);
     }
   else
@@ -1640,7 +1747,7 @@
       SendHello ();
     }
   m_htimer.Cancel ();
-  Time diff = HelloInterval - offset;
+  Time diff = m_helloInterval - offset;
   m_htimer.Schedule (std::max (Time (Seconds (0)), diff));
   m_lastBcastTime = Time (Seconds (0));
 }
@@ -1683,8 +1790,11 @@
       Ptr<Socket> socket = j->first;
       Ipv4InterfaceAddress iface = j->second;
       RrepHeader helloHeader (/*prefix size=*/ 0, /*hops=*/ 0, /*dst=*/ iface.GetLocal (), /*dst seqno=*/ m_seqNo,
-                                               /*origin=*/ iface.GetLocal (),/*lifetime=*/ Time (AllowedHelloLoss * HelloInterval));
+                                               /*origin=*/ iface.GetLocal (),/*lifetime=*/ Time (m_allowedHelloLoss * m_helloInterval));
       Ptr<Packet> packet = Create<Packet> ();
+      SocketIpTtlTag tag;
+      tag.SetTtl (1);
+      packet->AddPacketTag (tag);
       packet->AddHeader (helloHeader);
       TypeHeader tHeader (AODVTYPE_RREP);
       packet->AddHeader (tHeader);
@@ -1749,6 +1859,9 @@
           NS_LOG_LOGIC ("Send RERR message with maximum size.");
           TypeHeader typeHeader (AODVTYPE_RERR);
           Ptr<Packet> packet = Create<Packet> ();
+          SocketIpTtlTag tag;
+          tag.SetTtl (1);
+          packet->AddPacketTag (tag);
           packet->AddHeader (rerrHeader);
           packet->AddHeader (typeHeader);
           SendRerrMessage (packet, precursors);
@@ -1766,6 +1879,9 @@
     {
       TypeHeader typeHeader (AODVTYPE_RERR);
       Ptr<Packet> packet = Create<Packet> ();
+      SocketIpTtlTag tag;
+      tag.SetTtl (1);
+      packet->AddPacketTag (tag);
       packet->AddHeader (rerrHeader);
       packet->AddHeader (typeHeader);
       SendRerrMessage (packet, precursors);
@@ -1780,7 +1896,7 @@
 {
   NS_LOG_FUNCTION (this);
   // A node SHOULD NOT originate more than RERR_RATELIMIT RERR messages per second.
-  if (m_rerrCount == RerrRateLimit)
+  if (m_rerrCount == m_rerrRateLimit)
     {
       // Just make sure that the RerrRateLimit timer is running and will expire
       NS_ASSERT (m_rerrRateLimitTimer.IsRunning ());
@@ -1794,6 +1910,9 @@
   rerrHeader.AddUnDestination (dst, dstSeqNo);
   RoutingTableEntry toOrigin;
   Ptr<Packet> packet = Create<Packet> ();
+  SocketIpTtlTag tag;
+  tag.SetTtl (1);
+  packet->AddPacketTag (tag);
   packet->AddHeader (rerrHeader);
   packet->AddHeader (TypeHeader (AODVTYPE_RERR));
   if (m_routingTable.LookupValidRoute (origin, toOrigin))
@@ -1839,7 +1958,7 @@
       return;
     }
   // A node SHOULD NOT originate more than RERR_RATELIMIT RERR messages per second.
-  if (m_rerrCount == RerrRateLimit)
+  if (m_rerrCount == m_rerrRateLimit)
     {
       // Just make sure that the RerrRateLimit timer is running and will expire
       NS_ASSERT (m_rerrRateLimitTimer.IsRunning ());
@@ -1934,7 +2053,7 @@
 {
   NS_LOG_FUNCTION (this);
   uint32_t startTime;
-  if (EnableHello)
+  if (m_enableHello)
     {
       m_htimer.SetFunction (&RoutingProtocol::HelloTimerExpire, this);
       startTime = m_uniformRandomVariable->GetInteger (0, 100);
diff -Naur ns-3.25/src/aodv/model/aodv-routing-protocol.h ns-3.26/src/aodv/model/aodv-routing-protocol.h
--- ns-3.25/src/aodv/model/aodv-routing-protocol.h	2016-10-03 20:57:08.335246950 -0700
+++ ns-3.26/src/aodv/model/aodv-routing-protocol.h	2016-10-03 19:49:01.641387698 -0700
@@ -74,18 +74,18 @@
   virtual void PrintRoutingTable (Ptr<OutputStreamWrapper> stream) const;
 
   // Handle protocol parameters
-  Time GetMaxQueueTime () const { return MaxQueueTime; }
+  Time GetMaxQueueTime () const { return m_maxQueueTime; }
   void SetMaxQueueTime (Time t);
-  uint32_t GetMaxQueueLen () const { return MaxQueueLen; }
+  uint32_t GetMaxQueueLen () const { return m_maxQueueLen; }
   void SetMaxQueueLen (uint32_t len);
-  bool GetDesinationOnlyFlag () const { return DestinationOnly; }
-  void SetDesinationOnlyFlag (bool f) { DestinationOnly = f; }
-  bool GetGratuitousReplyFlag () const { return GratuitousReply; }
-  void SetGratuitousReplyFlag (bool f) { GratuitousReply = f; }
-  void SetHelloEnable (bool f) { EnableHello = f; }
-  bool GetHelloEnable () const { return EnableHello; }
-  void SetBroadcastEnable (bool f) { EnableBroadcast = f; }
-  bool GetBroadcastEnable () const { return EnableBroadcast; }
+  bool GetDesinationOnlyFlag () const { return m_destinationOnly; }
+  void SetDesinationOnlyFlag (bool f) { m_destinationOnly = f; }
+  bool GetGratuitousReplyFlag () const { return m_gratuitousReply; }
+  void SetGratuitousReplyFlag (bool f) { m_gratuitousReply = f; }
+  void SetHelloEnable (bool f) { m_enableHello = f; }
+  bool GetHelloEnable () const { return m_enableHello; }
+  void SetBroadcastEnable (bool f) { m_enableBroadcast = f; }
+  bool GetBroadcastEnable () const { return m_enableBroadcast; }
 
  /**
   * Assign a fixed random variable stream number to the random variables
@@ -102,38 +102,42 @@
 private:
   
   // Protocol parameters.
-  uint32_t RreqRetries;             ///< Maximum number of retransmissions of RREQ with TTL = NetDiameter to discover a route
-  uint16_t RreqRateLimit;           ///< Maximum number of RREQ per second.
-  uint16_t RerrRateLimit;           ///< Maximum number of REER per second.
-  Time ActiveRouteTimeout;          ///< Period of time during which the route is considered to be valid.
-  uint32_t NetDiameter;             ///< Net diameter measures the maximum possible number of hops between two nodes in the network
+  uint32_t m_rreqRetries;             ///< Maximum number of retransmissions of RREQ with TTL = NetDiameter to discover a route
+  uint16_t m_ttlStart;                ///< Initial TTL value for RREQ.
+  uint16_t m_ttlIncrement;            ///< TTL increment for each attempt using the expanding ring search for RREQ dissemination.
+  uint16_t m_ttlThreshold;            ///< Maximum TTL value for expanding ring search, TTL = NetDiameter is used beyond this value.
+  uint16_t m_timeoutBuffer;           ///< Provide a buffer for the timeout.
+  uint16_t m_rreqRateLimit;           ///< Maximum number of RREQ per second.
+  uint16_t m_rerrRateLimit;           ///< Maximum number of REER per second.
+  Time m_activeRouteTimeout;          ///< Period of time during which the route is considered to be valid.
+  uint32_t m_netDiameter;             ///< Net diameter measures the maximum possible number of hops between two nodes in the network
   /**
    *  NodeTraversalTime is a conservative estimate of the average one hop traversal time for packets
    *  and should include queuing delays, interrupt processing times and transfer times.
    */
-  Time NodeTraversalTime;
-  Time NetTraversalTime;             ///< Estimate of the average net traversal time.
-  Time PathDiscoveryTime;            ///< Estimate of maximum time needed to find route in network.
-  Time MyRouteTimeout;               ///< Value of lifetime field in RREP generating by this node.
+  Time m_nodeTraversalTime;
+  Time m_netTraversalTime;             ///< Estimate of the average net traversal time.
+  Time m_pathDiscoveryTime;            ///< Estimate of maximum time needed to find route in network.
+  Time m_myRouteTimeout;               ///< Value of lifetime field in RREP generating by this node.
   /**
    * Every HelloInterval the node checks whether it has sent a broadcast  within the last HelloInterval.
    * If it has not, it MAY broadcast a  Hello message
    */
-  Time HelloInterval;
-  uint32_t AllowedHelloLoss;         ///< Number of hello messages which may be loss for valid link
+  Time m_helloInterval;
+  uint32_t m_allowedHelloLoss;         ///< Number of hello messages which may be loss for valid link
   /**
    * DeletePeriod is intended to provide an upper bound on the time for which an upstream node A
    * can have a neighbor B as an active next hop for destination D, while B has invalidated the route to D.
    */
-  Time DeletePeriod;
-  Time NextHopWait;                  ///< Period of our waiting for the neighbour's RREP_ACK
-  Time BlackListTimeout;             ///< Time for which the node is put into the blacklist
-  uint32_t MaxQueueLen;              ///< The maximum number of packets that we allow a routing protocol to buffer.
-  Time MaxQueueTime;                 ///< The maximum period of time that a routing protocol is allowed to buffer a packet for.
-  bool DestinationOnly;              ///< Indicates only the destination may respond to this RREQ.
-  bool GratuitousReply;              ///< Indicates whether a gratuitous RREP should be unicast to the node originated route discovery.
-  bool EnableHello;                  ///< Indicates whether a hello messages enable
-  bool EnableBroadcast;              ///< Indicates whether a a broadcast data packets forwarding enable
+  Time m_deletePeriod;
+  Time m_nextHopWait;                  ///< Period of our waiting for the neighbour's RREP_ACK
+  Time m_blackListTimeout;             ///< Time for which the node is put into the blacklist
+  uint32_t m_maxQueueLen;              ///< The maximum number of packets that we allow a routing protocol to buffer.
+  Time m_maxQueueTime;                 ///< The maximum period of time that a routing protocol is allowed to buffer a packet for.
+  bool m_destinationOnly;              ///< Indicates only the destination may respond to this RREQ.
+  bool m_gratuitousReply;              ///< Indicates whether a gratuitous RREP should be unicast to the node originated route discovery.
+  bool m_enableHello;                  ///< Indicates whether a hello messages enable
+  bool m_enableBroadcast;              ///< Indicates whether a a broadcast data packets forwarding enable
   //\}
 
   /// IP protocol
@@ -172,9 +176,9 @@
   /// If route exists and valid, forward packet.
   bool Forwarding (Ptr<const Packet> p, const Ipv4Header & header, UnicastForwardCallback ucb, ErrorCallback ecb);
   /**
-  * To reduce congestion in a network, repeated attempts by a source node at route discovery
-  * for a single destination MUST utilize a binary exponential backoff.
-  */
+   * Repeated attempts by a source node at route discovery for a single destination
+   * use the expanding ring search technique.
+   */
   void ScheduleRreqRetry (Ipv4Address dst);
   /**
    * Set lifetime field in routing table entry to the maximum of existing lifetime and lt, if the entry exists
diff -Naur ns-3.25/src/aodv/test/aodv-chain-regression-test-0-0.pcap ns-3.26/src/aodv/test/aodv-chain-regression-test-0-0.pcap
--- ns-3.25/src/aodv/test/aodv-chain-regression-test-0-0.pcap	2016-10-03 20:57:08.338246926 -0700
+++ ns-3.26/src/aodv/test/aodv-chain-regression-test-0-0.pcap	2016-10-03 19:49:01.643387683 -0700
@@ -2,157 +2,171 @@
 
     (     
     
-              X   X                     E  4      
-
-    (    
-    
            y  T   T                    E  0     
 
       
    
-          R  @   @   <                            
+             T   T                     E  0      
+
+      
+    
+           X   X                     E  4     
+
+    (     
+    
+            X   X                    E  4     
+
+    (    
+    
+           ! @   @   <                             
      
-                Ԁ                 @   @                            
+        _       Ԁ               3 @   @               0            
 
-        ך  @   @   <                             
+        U @   @   <                0            
      
-                Ԁ               d  T   T   <                0     E  0      
+               Ԁ                T   T   <                @     E  0      
 
      
     
-  +        t        Ԁ                 @   @               0            
+                 Ԁ               7 @   @               @            
 
-          @   @   <                @            
+        x8 @   @   <                P            
      
-                Ԁ                 x   x   <                @     E  T    @  
+        8       Ԁ               B9 x   x   <                P     E  T    @  
 
-                                                                               Ԁ                 @   @               P            
+                                                                       7:       Ԁ               J @   @               `            
 
-                Ԁ                 x   x   <                `     E  T    ?  
+        +K       Ԁ               )L x   x   <                p     E  T    ?  
 
-                                                                               Ԁ               \  x   x   <                p     E  T    =  
+                                                                       
+x       Ԁ               y x   x   <                     E  T    =  
 
-                                                                        l        Ԁ                  x   x   <                P     E  T   @  
+                                                                        y       Ԁ                  x   x   <                `     E  T   @  
 
-                                                                              Ԁ                x   x   <                     E  T   ?  
+                                                                              Ԁ              L  x   x   <                     E  T   ?  
 
-                                                                             Ԁ              p  x   x   <                     E  T   =  
+                                                                     	        Ԁ              
+  x   x   <                     E  T   =  
 
-                                                                              Ԁ              g  T   T                    E  0     
+                                                                      
+        Ԁ              P T   T               p     E  0     
+
+      
+   
+          T   T                    E  0     
 
       
     
-          }  T   T               `     E  0     
+             x   x   <                     E  T   @  
 
-      
-   
-             x   x   <                p     E  T   @  
-
-                                                                              Ԁ                x   x   <                     E  T   ?  
+                                                                              Ԁ                x   x   <                     E  T   ?  
 
-                                                                             Ԁ                x   x   <                     E  T   =  
+                                                                             Ԁ              2
+  x   x   <                     E  T   =  
 
-                                                                              Ԁ              g  T   T                    E  0     
+                                                                      B
+        Ԁ               T   T                    E  0     
+
+      
+   
+          T   T                    E  0     
 
       
     
-         xi  T   T                    E  0     
-
-      
-   
-             x   x   <                     E  T   @  
+             x   x   <                     E  T   @  
 
-                                                                              Ԁ                x   x   <                     E  T   ?  
+                                                                              Ԁ                x   x   <                     E  T   ?  
 
-                                                                             Ԁ                x   x   <                     E  T   =  
+                                                                     	        Ԁ              M
+  x   x   <                     E  T   =  
 
-                                                                              Ԁ              O  T   T                    E  0     
+                                                                      ]
+        Ԁ               T   T                    E  0     
+
+      
+   
+         H T   T                   E  0     
 
       
     
-          }  T   T                    E  0     
-
-      
-   
-             x   x   <                     E  T   @  
+             x   x   <                     E  T   @  
 
-                                                                              Ԁ                x   x   <                    E  T   ?  
+                                                                              Ԁ                x   x   <                     E  T   ?  
 
-                                                                       x   x   <                    E  T   ?  
+                                                                     
+  x   x   <                     E  T   ?  
 
-                                                                     `  x   x   <                    E  T   ?  
+                                                                     s  x   x   <                     E  T   ?  
 
-                                                                       x   x   <                    E  T   ?  
+                                                                     	  x   x   <                     E  T   ?  
 
-                                                                       x   x   <                    E  T   ?  
+                                                                     z  x   x   <                     E  T   ?  
 
-                                                                     !  x   x   <                    E  T   ?  
+                                                                     }   x   x   <                     E  T   ?  
 
-                                                                     *  x   x   <                    E  T   ?  
+                                                                     %  x   x   <                     E  T   ?  
 
-                                                                     +  T   T                    E  0     
-
-      
-    
-         sR  T   T   <                0    E  0     
+                                                                     uM  T   T   <                0    E  0     
 
      
     
-           R        Ԁ              0u  T   T                    E  0     
+           M        Ԁ               T   T                    E  0     
 
       
-   
-            T   T               @    E  0     
+   
+         0 T   T               @    E  0     
 
       
     
-         (#  X   X                    E  4     
+           X   X                    E  4     
+
+          
+    
+           0  X   X               P    E  4     
+
+         
+    
+          (	 X   X                    E  4   #  
 
-          
+          
     
-          XK  X   X               P    E  4     
+          X
+ X   X               `    E  4   "  
 
-         
+         
     
-            T   T                    E  0     
+          	 T   T                    E  0 	    
 
       
-   
-         PK  T   T               `    E  0     
+   
+         P
+ T   T               p    E  0     
 
       
     
-         (#  T   T                    E  0     
+         	 T   T                   E  0 
+    
 
       
-   
-         PK  T   T               p    E  0     
+   
+         	 T   T                   E  0 	    
 
       
     
-         @ X   X                    E  4 	    
+          X   X                    E  4   #  
 
-          
+          
     
-          I X   X                   E  4 	    
+           X   X                   E  4 
+  "  
 
-         
+         
     
-          < T   T                   E  0 
-    
-
-      
-   
-         d T   T                   E  0 
-    
-
-      
-    
-      	   < T   T                    E  0     
+       	    T   T               0    E  0     
 
       
-   
-      	   M T   T                   E  0     
+   
+      	   ` T   T                   E  0     
 
       
     
diff -Naur ns-3.25/src/aodv/test/aodv-chain-regression-test-1-0.pcap ns-3.26/src/aodv/test/aodv-chain-regression-test-1-0.pcap
--- ns-3.25/src/aodv/test/aodv-chain-regression-test-1-0.pcap	2016-10-03 20:57:08.339246919 -0700
+++ ns-3.26/src/aodv/test/aodv-chain-regression-test-1-0.pcap	2016-10-03 19:49:01.644387675 -0700
@@ -2,201 +2,217 @@
 
     (     
     
-           g   X   X                     E  4      
-
-    (    
-    
-           5  X   X                     E  4      
-
-    (    
-    
            y  T   T                    E  0     
 
       
    
-            @   @   <                            
+          x  T   T                     E  0      
+
+      
+    
+          xP T   T                     E  0      
+
+      
+    
+          h X   X                     E  4     
+
+    (     
+    
+             X   X                    E  4     
+
+    (    
+    
+           ) X   X                    E  4     
+
+    (    
+    
+             @   @   <                             
      
-                Ԁ                 @   @                            
+               Ԁ                @   @               0            
 
-          @   @   <                            
+               Ԁ                B   B   <                @     E        
+
+ 
+           X  @   @               P            
+
+          @   @   <                             
      
-                Ԁ                 T   T   <                0     E  0      
+        ]       Ԁ               " T   T   <                `     E  0      
 
      
     
-  +                Ԁ               E  @   @                            
+          2       Ԁ                @   @               0            
 
-        H  @   @   <                             
+         @   @   <                0            
      
-        X        Ԁ               ܛ  T   T   <                0     E  0      
+               Ԁ               k T   T   <                @     E  0      
 
      
     
-  +                Ԁ                 @   @               0            
+          0       Ԁ               7 @   @               @            
 
-          @   @   <                @            
+        8 @   @   <                P            
      
-                Ԁ                 x   x   <                @     E  T    @  
+        8       Ԁ               9 x   x   <                P     E  T    @  
 
-                                                                               Ԁ               E  @   @               P            
+                                                                       :       Ԁ               I @   @               `            
 
-        H  @   @   <                @            
+        J @   @   <                p            
      
-        X        Ԁ                  x   x   <                `     E  T    ?  
+        J       Ԁ               pK x   x   <                p     E  T    ?  
 
-                                                                               Ԁ                 @   @               P            
-
-                Ԁ                 x   x   <                `     E  T    >  
+                                                                       eL       Ԁ               M x   x   <                     E  T    >  
 
-                                                                       l        Ԁ               F  x   x   <                p     E  T    >  
+                                                                       v       Ԁ               w x   x   <                     E  T    >  
 
-                                                                        V        Ԁ                 x   x   <                p     E  T    =  
+                                                                        w       Ԁ               Px x   x   <                     E  T    =  
 
-                                                                                Ԁ                 x   x   <                P     E  T   @  
+                                                                        Dy       Ԁ                 x   x   <                `     E  T   @  
 
-                                                                              Ԁ                x   x   <                     E  T   ?  
+                                                                              Ԁ                x   x   <                     E  T   ?  
 
-                                                                             Ԁ                x   x   <                     E  T   >  
+                                                                             Ԁ                x   x   <                     E  T   >  
 
-                                                                             Ԁ              Y  x   x   <                     E  T   >  
+                                                                     &        Ԁ              u	  x   x   <                     E  T   >  
 
-                                                                      i        Ԁ                x   x   <                     E  T   =  
+                                                                      	        Ԁ              6
+  x   x   <                     E  T   =  
 
-                                                                              Ԁ                T   T                    E  0     
+                                                                      +        Ԁ              ر T   T               p     E  0     
+
+      
+   
+           T   T                    E  0     
 
       
     
-         h%  T   T                    E  0     
+         I T   T                    E  0     
 
       
     
-         }  T   T               `     E  0     
-
-      
-   
-            x   x   <                p     E  T   @  
+            x   x   <                     E  T   @  
 
-                                                                              Ԁ                x   x   <                     E  T   ?  
+                                                                              Ԁ                x   x   <                     E  T   ?  
 
-                                                                             Ԁ                x   x   <                     E  T   >  
+                                                                             Ԁ              6  x   x   <                     E  T   >  
 
-                                                                             Ԁ                x   x   <                     E  T   >  
+                                                                             Ԁ                x   x   <                     E  T   >  
 
-                                                                              Ԁ                x   x   <                     E  T   =  
+                                                                              Ԁ              y	  x   x   <                     E  T   =  
 
-                                                                      	        Ԁ                T   T                    E  0     
-
+                                                                      n
+        Ԁ              ` T   T                    E  0     
+
       
-    
-         H  T   T                    E  0     
+   
+         9 T   T                    E  0     
 
       
     
-          j  T   T                    E  0     
-
+          T   T                    E  0     
+
       
-   
-            x   x   <                     E  T   @  
+    
+            x   x   <                     E  T   @  
 
-                                                                              Ԁ                x   x   <                     E  T   ?  
+                                                                              Ԁ              g  x   x   <                     E  T   ?  
 
-                                                                             Ԁ                x   x   <                     E  T   >  
+                                                                     \        Ԁ              Z  x   x   <                     E  T   >  
 
-                                                                             Ԁ              t  x   x   <                     E  T   >  
+                                                                             Ԁ                x   x   <                    E  T   >  
 
-                                                                              Ԁ                x   x   <                     E  T   =  
+                                                                              Ԁ              	  x   x   <                     E  T   =  
 
-                                                                              Ԁ                T   T                    E  0     
-
+                                                                      
+        Ԁ               T   T                    E  0     
+
       
-    
-         !  T   T                    E  0     
+   
+         ! T   T                    E  0     
 
       
     
-         }  T   T                    E  0     
-
+          T   T                   E  0     
+
       
-   
-            x   x   <                     E  T   @  
+    
+            x   x   <                     E  T   @  
 
-                                                                              Ԁ                x   x   <                    E  T   ?  
+                                                                              Ԁ              1  x   x   <                     E  T   ?  
 
-                                                                     V  x   x   <                    E  T   ?  
+                                                                     R  x   x   <                     E  T   ?  
 
-                                                                       x   x   <                    E  T   ?  
+                                                                       x   x   <                     E  T   ?  
 
-                                                                     1  x   x   <                    E  T   ?  
+                                                                     	  x   x   <                     E  T   ?  
 
-                                                                     6  x   x   <                    E  T   ?  
+                                                                       x   x   <                     E  T   ?  
 
-                                                                        x   x   <                    E  T   ?  
+                                                                       x   x   <                     E  T   ?  
 
-                                                                     )  x   x   <                    E  T   ?  
+                                                                     $  x   x   <                     E  T   ?  
 
-                                                                     N+  T   T                    E  0     
-
-      
-    
-         Q  T   T   <                0    E  0     
+                                                                     L  T   T   <                0    E  0     
 
      
     
-           R        Ԁ              u  T   T                    E  0     
+           M        Ԁ              0 T   T                    E  0     
 
       
-   
-         g   T   T               @    E  0     
+   
+          T   T               @    E  0     
 
       
     
-         #  X   X                    E  4     
+         `  X   X                    E  4     
+
+          
+    
+          p/  X   X               P    E  4     
+
+         
+    
+          	 X   X                    E  4   #  
 
-          
+          
     
-          J  X   X               P    E  4     
+          
+ X   X               `    E  4   "  
 
-         
+         
     
-          X  T   T                    E  0     
+          @	 T   T                    E  0 	    
 
       
-   
-         J  T   T               `    E  0     
+   
+         
+ T   T               p    E  0     
 
       
     
-         #  T   T                    E  0     
+         X	 T   T                   E  0 
+    
 
       
-   
-         J  T   T               p    E  0     
+   
+         	 T   T                   E  0 	    
 
       
     
-         HA X   X                    E  4 	    
+           X   X                    E  4   #  
 
-          
+          
     
-          I X   X                   E  4 	    
+          H X   X                   E  4 
+  "  
 
-         
+         
     
-          X= T   T                   E  0 
-    
-
-      
-   
-         pd T   T                   E  0 
-    
-
-      
-    
-      	   X= T   T                    E  0     
+       	    T   T               0    E  0     
 
       
-   
-      	    M T   T                   E  0     
+   
+      	    T   T                   E  0     
 
       
     
diff -Naur ns-3.25/src/aodv/test/aodv-chain-regression-test-2-0.pcap ns-3.26/src/aodv/test/aodv-chain-regression-test-2-0.pcap
--- ns-3.25/src/aodv/test/aodv-chain-regression-test-2-0.pcap	2016-10-03 20:57:08.339246919 -0700
+++ ns-3.26/src/aodv/test/aodv-chain-regression-test-2-0.pcap	2016-10-03 19:49:01.645387668 -0700
@@ -1,157 +1,185 @@
-ò            i          X   X                     E  4      
+ò            i          T   T                     E  0      
 
-    (    
+      
+    
+          O T   T                     E  0      
+
+      
+    
+          s T   T                     E  0      
+
+      
+    
+           X   X                    E  4     
+
+    (    
     
-           4  X   X                     E  4      
+            X   X                    E  4     
 
-    (    
+    (    
     
-           (I  X   X                     E  4      
+           B @   @                           
+
+        k       Ԁ               ' T   T   <                      E  0      
 
-    (    
-    
-           Sm  @   @   <                            
-     
-        n        Ԁ                 @   @                            
+     
+   
+          ! @   @               0            
 
-          @   @   <                            
+         @   @   <                             
      
-        R        Ԁ               h  T   T   <                0     E  0      
+        \       Ԁ               ` T   T   <                @     E  0      
 
-     
+   @ 
     
-  +        x        Ԁ               P  @   @                            
+          p       Ԁ               H @   @               0            
+
+         @   @   <                P            
+     
+               Ԁ                B   B   <                @     E        
+
+ 
+           I       Ԁ                @   @               P            
 
-        R  @   @   <                            
+        ! @   @   <                             
      
-        b        Ԁ                 T   T   <                0     E  0      
+        1       Ԁ                T   T   <                `     E  0      
 
      
     
-  +                Ԁ                 @   @                            
+          _       Ԁ               3 @   @               0            
 
-                Ԁ               d  T   T   <                0     E  0      
+               Ԁ                T   T   <                @     E  0      
 
      
     
-  +          @   @   <                @            
+          x8 @   @   <                P            
      
-                Ԁ                 @   @               P            
+        7:       Ԁ               J @   @               `            
 
-          @   @   <                @            
+        ~J @   @   <                p            
      
-                Ԁ                 x   x   <                `     E  T    ?  
+        +K       Ԁ               )L x   x   <                p     E  T    ?  
 
-                                                                               Ԁ               @  @   @               P            
-
-        C  @   @   <                @            
-     
-        S        Ԁ                 x   x   <                `     E  T    >  
+                                                                       9L       Ԁ               M x   x   <                     E  T    >  
 
-                                                                               Ԁ                 @   @               P            
-
-        l        Ԁ                 x   x   <                `     E  T    =  
+                                                                       N       Ԁ               N x   x   <                `     E  T    =  
 
-                                                                               Ԁ               0  x   x   <                p     E  T    ?  
+                                                                       s @   @   <                p            
+     
+        zu       Ԁ               ]v x   x   <                     E  T    ?  
 
-                                                                        @        Ԁ                 x   x   <                p     E  T    >  
+                                                                        mv       Ԁ               w x   x   <                     E  T    >  
 
-                                                                                Ԁ               \  x   x   <                p     E  T    =  
+                                                                        
+x       Ԁ               y x   x   <                     E  T    =  
 
-                                                                                Ԁ                x   x   <                     E  T   ?  
+                                                                                Ԁ              L  x   x   <                     E  T   ?  
 
-                                                                             Ԁ              ,  x   x   <                     E  T   >  
+                                                                     \        Ԁ                x   x   <                     E  T   >  
 
-                                                                     !        Ԁ                x   x   <                     E  T   =  
+                                                                             Ԁ              Q  x   x   <                     E  T   =  
 
-                                                                     N        Ԁ              C  x   x   <                     E  T   ?  
+                                                                             Ԁ                x   x   <                     E  T   ?  
 
-                                                                      S        Ԁ                x   x   <                     E  T   >  
+                                                                              Ԁ                x   x   <                     E  T   >  
 
-                                                                              Ԁ              p  x   x   <                     E  T   =  
+                                                                      	        Ԁ              
+  x   x   <                     E  T   =  
 
-                                                                      g  T   T                    E  0     
+                                                                       d T   T                    E  0     
+
+      
+    
+          T   T                    E  0     
 
       
     
-         $  T   T                    E  0     
+          T   T                    E  0     
 
       
     
-         9  T   T                    E  0     
-
-      
-    
-                  Ԁ                x   x   <                     E  T   ?  
+                  Ԁ                x   x   <                     E  T   ?  
 
-                                                                             Ԁ              ,  x   x   <                     E  T   >  
+                                                                             Ԁ              }  x   x   <                     E  T   >  
 
-                                                                     !        Ԁ                x   x   <                     E  T   =  
+                                                                     r        Ԁ                x   x   <                     E  T   =  
 
-                                                                     N        Ԁ                x   x   <                     E  T   ?  
+                                                                     8        Ԁ              H  x   x   <                     E  T   ?  
 
-                                                                              Ԁ                x   x   <                     E  T   >  
+                                                                      X        Ԁ                x   x   <                     E  T   >  
 
-                                                                              Ԁ                x   x   <                     E  T   =  
+                                                                              Ԁ              2
+  x   x   <                     E  T   =  
 
-                                                                      g  T   T                    E  0     
-
-      
-    
-         PA  T   T                    E  0     
+                                                                      k T   T                    E  0     
 
       
     
-         H  T   T                    E  0     
+          T   T                    E  0     
 
       
     
-                  Ԁ                x   x   <                     E  T   ?  
+          T   T                    E  0     
+
+      
+    
+                  Ԁ                x   x   <                     E  T   ?  
 
-                                                                             Ԁ              ,  x   x   <                     E  T   >  
+                                                                     /        Ԁ                x   x   <                     E  T   >  
 
-                                                                     !        Ԁ                x   x   <                     E  T   =  
+                                                                             Ԁ                x   x   <                     E  T   =  
 
-                                                                     N        Ԁ              ^  x   x   <                     E  T   ?  
+                                                                     J        Ԁ              u  x   x   <                     E  T   ?  
 
-                                                                      n        Ԁ                x   x   <                     E  T   >  
+                                                                              Ԁ                x   x   <                    E  T   >  
 
-                                                                              Ԁ                x   x   <                     E  T   =  
+                                                                      	        Ԁ              M
+  x   x   <                     E  T   =  
 
-                                                                      O  T   T                    E  0     
-
-      
-    
-            T   T                    E  0     
-
-      
-    
-         M  T   T                    E  0     
+                                                                      w T   T                   E  0     
 
       
     
-         $  T   T                   E  0     
+          T   T                    E  0     
 
       
     
-         O<  T   T                    E  0     
-
+         H T   T                   E  0     
+
       
-    
-         $  T   T               0    E  0     
+    
+          T   T               0    E  0     
 
       
     
-         H  T   T               @    E  0     
+          T   T               @    E  0     
 
       
     
-         O<  T   T               P    E  0     
+          X   X               P    E  4     
+
+          
+    
+            X   X               `    E  4     
+
+          
+    
+          % X   X               p    E  4 	    
+
+          
+    
+           X   X                   E  4 
+  #  
+
+          
+    
+           " T   T                   E  0     
 
       
-    
-      	   (  T   T               `    E  0 	    
+   
+      	   ` T   T                   E  0     
 
       
-    
+   
       
\ No newline at end of file
diff -Naur ns-3.25/src/aodv/test/aodv-chain-regression-test-3-0.pcap ns-3.26/src/aodv/test/aodv-chain-regression-test-3-0.pcap
--- ns-3.25/src/aodv/test/aodv-chain-regression-test-3-0.pcap	2016-10-03 20:57:08.340246911 -0700
+++ ns-3.26/src/aodv/test/aodv-chain-regression-test-3-0.pcap	2016-10-03 19:49:01.646387660 -0700
@@ -1,173 +1,180 @@
-ò            i       5  X   X                     E  4      
-
-    (    
+ò            i        5 T   T                     E  0      
+
+      
     
-           H  X   X                     E  4      
+          xP T   T                     E  0      
+
+      
+    
+          s T   T                     E  0      
 
-    (    
-    
-           l  @   @                            
-
-        l  @   @   <                            
-     
-        m        Ԁ               n  T   T   <                     E  0      
-
-      
+      
+    
+          ) X   X                    E  4     
+
+    (    
     
-  +        n        Ԁ                 @   @                            
+            @   @                           
+
+        / @   @   <                            
+     
+        ?       Ԁ                T   T   <                      E  0      
+
+     
+   
+          c       Ԁ                @   @               0            
 
-          @   @   <                            
+          @   @   <                             
      
-        %        Ԁ               ߃  T   T   <                0     E  0      
+        0       Ԁ                T   T   <                @     E  0      
 
-     
+   @ 
     
-  +                Ԁ                 @   @                            
+                 Ԁ                @   @               0            
 
-                Ԁ                 T   T   <                0     E  0      
+        X @   @   <                P            
+     
+               Ԁ                B   B   <                @     E        
+
+ 
+                  Ԁ               X  @   @               P            
+
+        ]       Ԁ               " T   T   <                `     E  0      
 
      
     
-  +        H  @   @   <                @            
+          J @   @   <                p            
      
-                Ԁ                 @   @               P            
-
-          @   @   <                @            
-     
-                Ԁ                 x   x   <                `     E  T    >  
+        eL       Ԁ               M x   x   <                     E  T    >  
 
-                                                                               Ԁ               -  @   @               P            
-
-        /  @   @   <                             
-     
-        ?        Ԁ                 x   x   <                `     E  T    =  
+                                                                       M       Ԁ               ?N x   x   <                `     E  T    =  
 
-                                                                               Ԁ                 x   x   <                0     E  T    @  
-
-                                                                                Ԁ               w  x   x   <                p     E  T    ?  
+                                                                       4O       Ԁ               r @   @                            
+
+        0s @   @   <                p            
+     
+        s       Ԁ               >u x   x   <                0     E  T    @  
 
-                                                                        l        Ԁ               F  x   x   <                p     E  T    >  
+                                                                        Nu       Ԁ               u x   x   <                     E  T    ?  
 
-                                                                         5 T   T               @     E  0      
+                                                                        v       Ԁ               w x   x   <                     E  T    >  
 
-      
-    
-                 Ԁ                x   x   <                     E  T   >  
+                                                                               Ԁ                x   x   <                     E  T   >  
 
-                                                                             Ԁ              C  x   x   <                     E  T   =  
+                                                                             Ԁ                x   x   <                     E  T   =  
 
-                                                                     8        Ԁ                x   x   <                P     E  T   @  
+                                                                             Ԁ              z  x   x   <                @     E  T   @  
 
-                                                                      "        Ԁ                x   x   <                     E  T   ?  
+                                                                              Ԁ              2  x   x   <                     E  T   ?  
 
-                                                                              Ԁ              Y  x   x   <                     E  T   >  
+                                                                      &        Ԁ              u	  x   x   <                     E  T   >  
+
+                                                                      h) T   T               P     E  0     
 
-                                                                      h%  T   T                    E  0     
-
       
-    
-         8  T   T                    E  0     
+    
+         xc T   T                    E  0     
 
       
     
-         h) T   T               `     E  0     
-
+         I T   T                    E  0     
+
       
-    
-                 Ԁ                x   x   <                     E  T   >  
+    
+                 Ԁ              6  x   x   <                     E  T   >  
 
-                                                                             Ԁ              C  x   x   <                     E  T   =  
+                                                                     F        Ԁ                x   x   <                     E  T   =  
 
-                                                                     8        Ԁ                x   x   <                p     E  T   @  
+                                                                             Ԁ                x   x   <                `     E  T   @  
+
+                                                                              Ԁ                x   x   <                     E  T   ?  
 
-                                                                      "        Ԁ                x   x   <                     E  T   ?  
+                                                                              Ԁ                x   x   <                     E  T   >  
 
-                                                                              Ԁ                x   x   <                     E  T   >  
+                                                                      @ T   T               p     E  0     
 
-                                                                      @  T   T                    E  0     
+      
+    
+         Hk T   T                    E  0     
 
       
     
-         H  T   T                    E  0     
+         9 T   T                    E  0     
 
       
     
-         @ T   T                    E  0     
-
-      
-    
-                 Ԁ                x   x   <                     E  T   >  
+         \        Ԁ              Z  x   x   <                     E  T   >  
 
-                                                                             Ԁ              C  x   x   <                     E  T   =  
+                                                                     j        Ԁ              -  x   x   <                     E  T   =  
 
-                                                                     8        Ԁ                x   x   <                     E  T   @  
+                                                                     "        Ԁ                x   x   <                     E  T   @  
 
-                                                                      "        Ԁ                x   x   <                     E  T   ?  
+                                                                              Ԁ                x   x   <                     E  T   ?  
 
-                                                                              Ԁ              t  x   x   <                     E  T   >  
+                                                                              Ԁ                x   x   <                    E  T   >  
+
+                                                                      @ T   T                    E  0     
 
-                                                                      !  T   T                    E  0     
-
       
-    
-         L  T   T                    E  0     
+    
+          w T   T                   E  0     
 
       
     
-         @ T   T                    E  0     
+         ! T   T                    E  0     
+
+      
+    
+         P- T   T                    E  0     
 
       
     
-         8X  T   T                   E  0     
+          T   T                    E  0     
 
       
     
-         P- T   T                    E  0     
+         L T   T                    E  0     
 
       
     
-         L  T   T                    E  0     
+          w T   T               0    E  0     
 
       
     
-         L T   T                    E  0     
+         H T   T                    E  0     
 
       
     
-         @  T   T               0    E  0     
+         0\ T   T   <                @    E  0     
+
+     
+   
+           \       Ԁ              z T   T               P    E  0     
 
       
     
-         ' T   T   <                @    E  0      
-
-     
-   
-                  Ԁ              H T   T                    E  0     
+         P- T   T                    E  0     
 
       
     
-         PT  T   T               P    E  0     
+         ~ T   T               `    E  0     
 
       
     
-         P- T   T                    E  0     
+          5 T   T                    E  0     
 
       
     
-         5  T   T               `    E  0     
+         _ T   T               p    E  0     
 
       
     
-          5 T   T                    E  0     
+      	   P- T   T                    E  0 	    
 
       
     
-      	    \  T   T               p    E  0 	    
+      	    T   T                   E  0 	    
 
       
     
-      	   P- T   T                    E  0 	    
-
-      
-    
-      
\ No newline at end of file
+      
\ No newline at end of file
diff -Naur ns-3.25/src/aodv/test/aodv-chain-regression-test-4-0.pcap ns-3.26/src/aodv/test/aodv-chain-regression-test-4-0.pcap
--- ns-3.25/src/aodv/test/aodv-chain-regression-test-4-0.pcap	2016-10-03 20:57:08.341246903 -0700
+++ ns-3.26/src/aodv/test/aodv-chain-regression-test-4-0.pcap	2016-10-03 19:49:01.646387660 -0700
@@ -1,129 +1,129 @@
-ò            i       (I  X   X                     E  4      
-
-    (    
-    
-           Pl  @   @                            
-
-        Sm  @   @   <                            
-     
-        cm        Ԁ               n  T   T   <                     E  0      
+ò            i       4 T   T                     E  0      
 
-      
+      
     
-  +        n        Ԁ                 @   @                            
+          s T   T                     E  0      
+
+      
+    
+          B @   @                           
+
+         @   @   <                            
+     
+        k       Ԁ               ' T   T   <                      E  0      
+
+     
+   
+          7       Ԁ               ! @   @               0            
 
-        R        Ԁ               h  T   T   <                0     E  0      
+        \       Ԁ               ` T   T   <                @     E  0      
 
-     
+   @ 
     
-  +        C  @   @   <                @            
+           @   @   <                P            
      
-                Ԁ                 @   @               P            
-
-          @   @   <                             
-     
-        l        Ԁ                 x   x   <                `     E  T    =  
+        I       Ԁ               N       Ԁ               N x   x   <                `     E  T    =  
 
-                                                                               Ԁ                 x   x   <                0     E  T    @  
-
-                                                                                Ԁ               0  x   x   <                p     E  T    ?  
+                                                                       O       Ԁ                r @   @                            
+
+        s @   @   <                p            
+     
+        s       Ԁ               t x   x   <                0     E  T    @  
 
-                                                                        4 T   T               @     E  0      
+                                                                        zu       Ԁ               ]v x   x   <                     E  T    ?  
 
-      
-    
-         !        Ԁ                x   x   <                     E  T   =  
+                                                                               Ԁ              Q  x   x   <                     E  T   =  
 
-                                                                             Ԁ              Y  x   x   <                P     E  T   @  
+                                                                     a        Ԁ                x   x   <                @     E  T   @  
 
-                                                                      N        Ԁ              C  x   x   <                     E  T   ?  
+                                                                              Ԁ                x   x   <                     E  T   ?  
 
-                                                                      9  T   T                    E  0     
-
-      
-    
-         ( T   T               `     E  0     
+                                                                      ( T   T               P     E  0     
 
       
     
-         !        Ԁ                x   x   <                     E  T   =  
-
-                                                                             Ԁ              Y  x   x   <                p     E  T   @  
-
-                                                                      N        Ԁ                x   x   <                     E  T   ?  
-
-                                                                      PA  T   T                    E  0     
+          d T   T                    E  0     
 
       
     
-         P@ T   T                    E  0     
-
-      
-    
-         !        Ԁ                x   x   <                     E  T   =  
+         r        Ԁ                x   x   <                     E  T   =  
 
-                                                                             Ԁ              Y  x   x   <                     E  T   @  
+                                                                             Ԁ              C  x   x   <                `     E  T   @  
+
+                                                                      8        Ԁ              H  x   x   <                     E  T   ?  
 
-                                                                      N        Ԁ              ^  x   x   <                     E  T   ?  
+                                                                      P@ T   T               p     E  0     
 
-                                                                      M  T   T                    E  0     
+      
+    
+         k T   T                    E  0     
 
       
     
-         P@ T   T                    E  0     
+                 Ԁ                x   x   <                     E  T   =  
+
+                                                                             Ԁ              U  x   x   <                     E  T   @  
+
+                                                                      J        Ԁ              u  x   x   <                     E  T   ?  
+
+                                                                      P@ T   T                    E  0     
 
       
     
-         X  T   T                   E  0     
+         w T   T                   E  0     
 
       
     
-         , T   T                    E  0     
+         , T   T                    E  0     
 
       
     
-         M  T   T                    E  0     
+         @ T   T                    E  0     
 
       
     
-         L T   T                    E  0     
+         L T   T                    E  0     
 
       
     
-         PA  T   T               0    E  0     
+         w T   T               0    E  0     
 
       
     
-          T   T   <                @    E  0      
-
-     
-   
-                  Ԁ               H T   T                    E  0     
+          H T   T                    E  0     
 
       
     
-         T  T   T               P    E  0     
+         \ T   T   <                @    E  0     
+
+     
+   
+           \       Ԁ              p{ T   T               P    E  0     
 
       
     
-         , T   T                    E  0     
+         , T   T                    E  0     
 
       
     
-         5  T   T               `    E  0     
+         X T   T               `    E  0     
 
       
     
-         4 T   T                    E  0     
+         4 T   T                    E  0     
 
       
     
-      	   \  T   T               p    E  0 	    
+         ` T   T               p    E  0     
 
       
     
-      	   , T   T                    E  0 	    
+      	   , T   T                    E  0 	    
 
       
     
-      
\ No newline at end of file
+      	   ( T   T                   E  0 	    
+
+      
+    
+      
\ No newline at end of file
diff -Naur ns-3.25/src/aodv/test/aodv-regression.cc ns-3.26/src/aodv/test/aodv-regression.cc
--- ns-3.25/src/aodv/test/aodv-regression.cc	2016-10-03 20:57:08.342246895 -0700
+++ ns-3.26/src/aodv/test/aodv-regression.cc	2016-10-03 19:49:01.647387653 -0700
@@ -57,8 +57,6 @@
     AddTestCase (new ChainRegressionTest ("bug-606-test", Seconds (10), 3, Seconds (1)), TestCase::QUICK);
     // \bugid{772} UDP test case
     AddTestCase (new Bug772ChainTest ("udp-chain-test", "ns3::UdpSocketFactory", Seconds (3), 10), TestCase::QUICK);
-    // \bugid{772} TCP test case
-    AddTestCase (new Bug772ChainTest ("tcp-chain-test", "ns3::TcpSocketFactory", Seconds (3), 10), TestCase::QUICK);
   }
 } g_aodvRegressionTestSuite;
  
diff -Naur ns-3.25/src/aodv/test/bug-606-test-0-0.pcap ns-3.26/src/aodv/test/bug-606-test-0-0.pcap
--- ns-3.25/src/aodv/test/bug-606-test-0-0.pcap	2016-10-03 20:57:08.343246887 -0700
+++ ns-3.26/src/aodv/test/bug-606-test-0-0.pcap	2016-10-03 19:49:01.648387645 -0700
@@ -2,125 +2,136 @@
 
     (     
     
-           0(  X   X                     E  4      
+           +  T   T                     E  0      
 
-    (    
+      
+    
+           }  T   T                    E  0     
+
+      
+   
+           X   X                     E  4     
+
+    (     
     
-           D  @   @   <                            
-     
-        E        Ԁ               "e  @   @                            
+            @   @                           
 
-        De  @   @   <                            
+         @   @   <                0            
      
-        e        Ԁ               f  T   T   <                0     E  0      
+               Ԁ                @   @                            
+
+         T   T   <                0     E  0      
 
-     
+   @ 
     
-  +        f        Ԁ               r  @   @                            
+  
+               Ԁ                      Ԁ                T   T   <                @     E  0      
+
+     
+   
+          @ @   @               @            
 
-        s  @   @   <                @            
+         @   @   <                P            
      
-        s        Ԁ               Dt  x   x   <                0     E  T    @  
+               Ԁ               g B   B   <                P     E        
 
-                                                                       8u        Ԁ                }  T   T               @     E  0     
+ 
+                  Ԁ                x   x   <                `     E  T    @  
 
-      
-   
-            @   @               P            
-
-        {        Ԁ                 x   x   <                `     E  T    ?  
+                                                                              Ԁ                x   x   <                `     E  T    ?  
 
-                                                                               Ԁ               6  x   x   <                p     E  T    ?  
+                                                                       
+ @   @   <                p            
+     
+               Ԁ               v x   x   <                     E  T    ?  
 
-                                                                        F        Ԁ                  x   x   <                P     E  T   @  
+                                                                               Ԁ                  x   x   <                p     E  T   @  
 
-                                                                              Ԁ                x   x   <                     E  T   ?  
+                                                                              Ԁ                x   x   <                     E  T   ?  
 
-                                                                     !        Ԁ              1  x   x   <                     E  T   ?  
+                                                                             Ԁ                x   x   <                     E  T   ?  
 
-                                                                      A        Ԁ              hG  T   T                    E  0     
+                                                                              Ԁ              J  T   T                    E  0     
 
       
     
-         ]  T   T               `     E  0     
+          T   T                    E  0     
 
       
-   
-         (#  @   @               p            
-
-       *$  @   @   <                            
-     
-       :$        Ԁ              $  x   x   <                     E  T   @  
+   
+             x   x   <                     E  T   @  
+
+                                                                              Ԁ                x   x   <                     E  T   ?  
 
-                                                                     %        Ԁ              ((  T   T                    E  0     
+                                                                             Ԁ              g  x   x   <                     E  T   ?  
+
+                                                                      w        Ԁ              +  T   T                    E  0     
 
       
     
-         fE  @   @                           
-
-       5F        Ԁ              G  x   x   <                     E  T   ?  
-
-                                                                     \  @   @   <                            
-     
-       ]        Ԁ              Hq  T   T                    E  0     
+          T   T                    E  0     
 
       
-   
-         0}  @   @                           
-
-       R}  @   @   <                            
-     
-       }        Ԁ                 x   x   <                    E  T   ?  
-
-                                                                      0        Ԁ                  x   x   <                     E  T   @  
+   
+             x   x   <                     E  T   @  
 
-                                                                              Ԁ                x   x   <                     E  T   ?  
+                                                                              Ԁ              C  x   x   <                     E  T   ?  
 
-                                                                     !        Ԁ                x   x   <                0    E  T   ?  
+                                                                             Ԁ              H  x   x   <                     E  T   ?  
 
-                                                                              Ԁ              ((  T   T               @    E  0     
+                                                                      X        Ԁ              +  T   T                   E  0     
 
       
     
-           T   T                    E  0     
+         h T   T                    E  0     
 
       
-   
-         (#  @   @                           
-
-       a  T   T                    E  0     
+   
+             x   x   <                     E  T   @  
 
-      
-   
-             @   @                           
-
-        }  T   T                    E  0     
+                                                                       x   x   <                     E  T   @  
 
-      
-   
-             @   @                          
-
-       e  T   T                    E  0     
+                                                                     |  x   x   <                     E  T   @  
 
-      
-   
-             @   @               0           
-
-       '  X   X               @    E  4     
+                                                                       x   x   <                     E  T   @  
 
-          
-    
-          (#  T   T               P    E  0 	    
+                                                                       x   x   <                     E  T   @  
+
+                                                                       x   x   <                     E  T   @  
+
+                                                                     '  x   x   <                     E  T   @  
+
+                                                                      T   T                    E  0     
 
       
    
-      	     T   T               `    E  0 
+           X   X                    E  4     
+
+          
+    
+          z X   X                    E  4     
+
+          
+    
+           X   X                   E  4 	  #  
+
+          
+    
+          x T   T                    E  0 
     
 
       
-   
-      	   @ X   X               p    E  4     
+   
+         x T   T               0    E  0     
 
-          
+      
+   
+         	 X   X               @    E  4   #  
+
+          
     
-       
\ No newline at end of file
+       	   G T   T               P    E  0     
+
+      
+   
+      
\ No newline at end of file
diff -Naur ns-3.25/src/aodv/test/bug-606-test-1-0.pcap ns-3.26/src/aodv/test/bug-606-test-1-0.pcap
--- ns-3.25/src/aodv/test/bug-606-test-1-0.pcap	2016-10-03 20:57:08.344246880 -0700
+++ ns-3.26/src/aodv/test/bug-606-test-1-0.pcap	2016-10-03 19:49:01.648387645 -0700
@@ -2,147 +2,135 @@
 
     (     
     
-           '  X   X                     E  4      
+           *  T   T                     E  0      
 
-    (    
-    
-           C  @   @                            
-
-        D  @   @   <                            
-     
-        D        Ԁ               rE  T   T   <                     E  0      
+      
+    
+          J  T   T                     E  0      
 
-      
+      
     
-  +        E        Ԁ               J  T   T                     E  0      
-
+          }  T   T                    E  0     
+
       
+   
+           X   X                     E  4     
+
+    (     
     
-          d  @   @                            
+           P @   @                           
 
-        e  @   @   <                            
+        S @   @   <                0            
      
-        e        Ԁ               Hf  T   T   <                0     E  0      
+        c       Ԁ               8 @   @                            
+
+          T   T   <                0     E  0      
 
-     
+   @ 
     
-  +        g        Ԁ               r  @   @                            
+  
+               Ԁ                @   @   <                            
+     
+               Ԁ               < T   T   <                @     E  0      
+
+     
+   
+                  Ԁ                @   @               @            
 
-        s  @   @   <                @            
+        - @   @   <                P            
      
-        s        Ԁ               t  x   x   <                0     E  T    @  
+               Ԁ                B   B   <                P     E        
 
-                                                                       u        Ԁ               }  T   T               @     E  0     
+ 
+                  Ԁ               c x   x   <                `     E  T    @  
 
-      
-   
-          <  @   @               P            
-
-        ?  @   @   <                0            
-     
-        O        Ԁ                 x   x   <                `     E  T    ?  
+                                                                       s       Ԁ                x   x   <                `     E  T    ?  
 
-                                                                               Ԁ               Ɨ  x   x   <                @     E  T    @  
+                                                                              Ԁ               T @   @                            
+
+         @   @   <                p            
+     
+        G       Ԁ               E x   x   <                0     E  T    @  
 
-                                                                        ֗        Ԁ               ~  x   x   <                p     E  T    ?  
+                                                                        U       Ԁ                x   x   <                     E  T    ?  
 
-                                                                        r        Ԁ                 x   x   <                P     E  T   @  
+                                                                               Ԁ                 x   x   <                p     E  T   @  
 
-                                                                              Ԁ                x   x   <                     E  T   ?  
+                                                                              Ԁ              C  x   x   <                     E  T   ?  
 
-                                                                             Ԁ                x   x   <                P     E  T   @  
+                                                                     8        Ԁ                x   x   <                @     E  T   @  
 
-                                                                              Ԁ              y  x   x   <                     E  T   ?  
+                                                                              Ԁ                x   x   <                     E  T   ?  
 
-                                                                      n        Ԁ              '  T   T               `     E  0     
+                                                                              Ԁ              '  T   T               P     E  0     
 
       
     
-         F  T   T                    E  0     
+         8J  T   T                    E  0     
 
       
     
-         H^  T   T               `     E  0     
+          T   T                    E  0     
 
       
-   
-         #  @   @               p            
-
-       #  @   @   <                            
-     
-       g$        Ԁ              %  x   x   <                     E  T   @  
+   
+            x   x   <                     E  T   @  
+
+                                                                              Ԁ              ^  x   x   <                     E  T   ?  
 
-                                                                     %        Ԁ              '  T   T                    E  0     
+                                                                     S        Ԁ              H  x   x   <                `     E  T   @  
+
+                                                                      X        Ԁ                x   x   <                     E  T   ?  
+
+                                                                              Ԁ              *  T   T                    E  0     
 
       
     
-         +  T   T               p     E  0     
-
-      
-    
-         D  @   @                           
-
-       E  @   @   <                            
-     
-       	F        Ԁ              F  x   x   <                     E  T   ?  
-
-                                                                     G        Ԁ              [  @   @                           
-
-       [  @   @   <                            
-     
-       T\        Ԁ              ]  x   x   <                     E  T   @  
-
-                                                                      ]        Ԁ              q  T   T                    E  0     
+         0 T   T                    E  0     
 
       
-   
-         |  @   @                           
-
-       }  @   @   <                            
-     
-       }        Ԁ              h~  x   x   <                    E  T   ?  
-
-                                                                      ]        Ԁ                 x   x   <                     E  T   @  
+   
+            x   x   <                     E  T   @  
 
-                                                                              Ԁ                x   x   <                     E  T   ?  
+                                                                              Ԁ                x   x   <                     E  T   ?  
 
-                                                                             Ԁ                x   x   <                     E  T   @  
+                                                                             Ԁ                x   x   <                     E  T   @  
 
-                                                                              Ԁ              L  x   x   <                0    E  T   ?  
+                                                                              Ԁ                x   x   <                     E  T   ?  
 
-                                                                      A        Ԁ              '  T   T               @    E  0     
+                                                                              Ԁ              *  T   T                   E  0     
 
       
     
-         F  T   T                    E  0     
+         F  T   T                    E  0     
 
       
     
-         p  T   T                    E  0     
+          T   T                    E  0     
 
       
-   
-         ?  T   T               P    E  0     
+   
+         hB  T   T                    E  0     
 
       
     
-         ?  T   T               `    E  0     
+         hB  T   T               0    E  0     
 
       
     
-         +  T   T               p    E  0     
+         .  T   T               @    E  0     
 
       
     
-         F  T   T                   E  0     
+         8J  T   T               P    E  0     
 
       
     
-         B  T   T                   E  0     
+         PF  T   T               `    E  0     
 
       
     
-      	     T   T                   E  0 	    
+      	   (#  T   T               p    E  0 	    
 
       
     
diff -Naur ns-3.25/src/aodv/test/bug-606-test-2-0.pcap ns-3.26/src/aodv/test/bug-606-test-2-0.pcap
--- ns-3.25/src/aodv/test/bug-606-test-2-0.pcap	2016-10-03 20:57:08.344246880 -0700
+++ ns-3.26/src/aodv/test/bug-606-test-2-0.pcap	2016-10-03 19:49:01.649387638 -0700
@@ -1,112 +1,98 @@
-ò            i       0(  X   X                     E  4      
+ò            i       +  T   T                     E  0      
 
-    (    
-    
-           C  @   @                            
-
-        D  @   @   <                            
-     
-        D        Ԁ               D  T   T   <                     E  0      
-
-      
-    
-  +        E        Ԁ               8J  T   T                     E  0      
+      
+    
+          8J  T   T                     E  0      
 
       
     
-          "e  @   @                            
+           @   @                           
+
+               Ԁ                @   @                            
 
-        e        Ԁ               f  T   T   <                0     E  0      
+         T   T   <                0     E  0      
 
-     
+   @ 
     
-  +        s  @   @   <                @            
-     
-        8u        Ԁ                 @   @               P            
-
-        Δ  @   @   <                0            
+  
+        . @   @   <                            
      
-        {        Ԁ                 x   x   <                `     E  T    ?  
+               Ԁ                T   T   <                @     E  0      
+
+     
+   
+                 Ԁ                @   @   <                P            
+     
+               Ԁ                      Ԁ                x   x   <                `     E  T    ?  
 
-                                                                               Ԁ                 x   x   <                @     E  T    @  
+                                                                              Ԁ                @   @                            
+
+        
+ @   @   <                p            
+     
+               Ԁ                x   x   <                0     E  T    @  
 
-                                                                                Ԁ               6  x   x   <                p     E  T    ?  
+                                                                               Ԁ               v x   x   <                     E  T    ?  
 
-                                                                                Ԁ                x   x   <                     E  T   ?  
+                                                                                Ԁ                x   x   <                     E  T   ?  
 
-                                                                             Ԁ              ,  x   x   <                P     E  T   @  
+                                                                             Ԁ                x   x   <                @     E  T   @  
 
-                                                                      !        Ԁ              1  x   x   <                     E  T   ?  
+                                                                              Ԁ                x   x   <                     E  T   ?  
 
-                                                                      '  T   T               `     E  0     
+                                                                      '  T   T               P     E  0     
 
       
     
-         hG  T   T                    E  0     
+         J  T   T                    E  0     
 
       
     
-         *$  @   @   <                            
-     
-       %        Ԁ              ((  T   T                    E  0     
-
-      
-    
-         *  T   T               p     E  0     
-
-      
-    
-         fE  @   @                           
-
-       E  @   @   <                            
-     
-       5F        Ԁ              G  x   x   <                     E  T   ?  
+                  Ԁ                x   x   <                     E  T   ?  
 
-                                                                     G        Ԁ              [  @   @                           
-
-       \  @   @   <                            
-     
-       (\        Ԁ              \  x   x   <                     E  T   @  
+                                                                     &        Ԁ                x   x   <                `     E  T   @  
 
-                                                                      ]        Ԁ              0}  @   @                           
-
-       }        Ԁ                 x   x   <                    E  T   ?  
+                                                                              Ԁ              g  x   x   <                     E  T   ?  
 
-                                                                               Ԁ                x   x   <                     E  T   ?  
+                                                                      *  T   T               p     E  0     
+
+      
+    
+                  Ԁ              C  x   x   <                     E  T   ?  
 
-                                                                             Ԁ              ,  x   x   <                     E  T   @  
+                                                                     S        Ԁ              (  x   x   <                     E  T   @  
 
-                                                                      !        Ԁ                x   x   <                0    E  T   ?  
+                                                                              Ԁ              H  x   x   <                     E  T   ?  
 
-                                                                      ((  T   T               @    E  0     
+                                                                      +  T   T                   E  0     
 
       
     
-         PF  T   T                    E  0     
+         PF  T   T                    E  0     
 
       
     
-         2  T   T                    E  0     
+         2  T   T                    E  0     
 
       
     
-         (#  T   T                    E  0     
+         (#  T   T                    E  0     
 
       
     
-         8J  T   T                    E  0     
+         8J  T   T                    E  0     
 
       
     
-         .  T   T                    E  0     
+         .  T   T                    E  0     
 
       
     
-         2  T   T                   E  0     
+         2  T   T                    E  0     
 
       
     
-      	   6  T   T                    E  0 	    
+      	   6  T   T                    E  0 	    
 
       
     
diff -Naur ns-3.25/src/aodv/test/bug-772.cc ns-3.26/src/aodv/test/bug-772.cc
--- ns-3.25/src/aodv/test/bug-772.cc	2016-10-03 20:57:08.344246880 -0700
+++ ns-3.26/src/aodv/test/bug-772.cc	2016-10-03 19:49:01.649387638 -0700
@@ -56,7 +56,9 @@
   m_time (t),
   m_size (size),
   m_step (120),
-  m_port (9){
+  m_port (9),
+  m_receivedPackets (0)
+{
 }
 
 Bug772ChainTest::~Bug772ChainTest ()
@@ -70,21 +72,30 @@
   if (Simulator::Now () < m_time)
     {
       socket->Send (Create<Packet> (1000));
-      Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (0.125),
+      Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (0.25),
                                       &Bug772ChainTest::SendData, this, socket);
     }
 }
 
 void
+Bug772ChainTest::HandleRead (Ptr<Socket> socket)
+{
+  m_receivedPackets++;
+}
+
+void
 Bug772ChainTest::DoRun ()
 {
   RngSeedManager::SetSeed (12345);
   RngSeedManager::SetRun (7);
 
+  // Default of 3 will cause packet loss 
+  Config::SetDefault ("ns3::ArpCache::PendingQueueSize", UintegerValue (10));  
+
   CreateNodes ();
   CreateDevices ();
 
-  Simulator::Stop (m_time);
+  Simulator::Stop (m_time + Seconds (1));  // Allow buffered packets to clear
   Simulator::Run ();
   Simulator::Destroy ();
 
@@ -162,17 +173,14 @@
   m_recvSocket->Bind (InetSocketAddress (Ipv4Address::GetAny (), m_port));
   m_recvSocket->Listen ();
   m_recvSocket->ShutdownSend ();
+  m_recvSocket->SetRecvCallback (MakeCallback (&Bug772ChainTest::HandleRead, this));
 
-  // 4. write PCAP on the first and last nodes only
-  wifiPhy.EnablePcap (CreateTempDirFilename (m_prefix), devices.Get (0));
-  wifiPhy.EnablePcap (CreateTempDirFilename (m_prefix), devices.Get (m_size-1));
 }
 
 void
 Bug772ChainTest::CheckResults ()
 {
-  for (uint32_t i = 0; i < m_size; i += (m_size - 1) /*first and last nodes only*/)
-    {
-      NS_PCAP_TEST_EXPECT_EQ(m_prefix << "-" << i << "-0.pcap");
-    }
+  // We should have sent 8 packets (every 0.25 seconds from time 1 to time 3)
+  // Check that the received packet count is 8
+  NS_TEST_EXPECT_MSG_EQ (m_receivedPackets, 8, "Did not receive expected 8 packets");
 }
diff -Naur ns-3.25/src/aodv/test/bug-772.h ns-3.26/src/aodv/test/bug-772.h
--- ns-3.25/src/aodv/test/bug-772.h	2016-10-03 20:57:08.345246872 -0700
+++ ns-3.26/src/aodv/test/bug-772.h	2016-10-03 19:49:01.650387631 -0700
@@ -33,7 +33,9 @@
  * 
  * \brief AODV deferred route lookup test case (see \bugid{772})
  * 
- * \todo describe expected packet trace 
+ * UDP packet transfers are delayed while a route is found and then while
+ * ARP completes.  Eight packets should be sent, queued until the path
+ * becomes functional, and then delivered.
  */
 class Bug772ChainTest : public TestCase
 {
@@ -74,12 +76,17 @@
   void CheckResults ();
   /// Go
   void DoRun ();
+  /// receive data
+  void HandleRead (Ptr<Socket> socket);
 
   /// Receiving socket
   Ptr<Socket> m_recvSocket;
   /// Transmitting socket
   Ptr<Socket> m_sendSocket;
 
+  /// Received packet count
+  uint32_t m_receivedPackets;
+
   /**
    * Send data
    * \param socket the sending socket
diff -Naur ns-3.25/src/aodv/test/tcp-chain-test-0-0.pcap ns-3.26/src/aodv/test/tcp-chain-test-0-0.pcap
--- ns-3.25/src/aodv/test/tcp-chain-test-0-0.pcap	2016-10-03 20:57:08.348246848 -0700
+++ ns-3.26/src/aodv/test/tcp-chain-test-0-0.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,501 +0,0 @@
-ò            i         T   T                     E  0      
-
-      
-   
-          X  X   X                    E  4     
-
-    (     
-
-    
-           3  X   X                     E  4      
-
-    (    
-
-    
-           z @   @   <                            
-     
-        	       Ԁ                @   @                            
-
-         @   @   <                             
-     
-               Ԁ               d T   T   <                0     E  0      
-
-     
-
-    
-          t       Ԁ                @   @               0            
-
-        L @   @   <                @            
-     
-        \       Ԁ                \   \   <                @     E  8    @  
-
-
- 	             
-                   {        Ԁ               ( @   @               P            
-
-        N)       Ԁ               ^* \   \   <                `     E  8    ?  
-
-
- 	             
-                          Ԁ               Z \   \   <                p     E  8    8  
-
-
- 	            
-   b               j       Ԁ                X   X   <                P     E  4   @  
-
-
- 	           
-   j   b                 Ԁ               I X   X   <                     E  4   ?  
-
-
- 	           
-   j   b             p  p  <                `     E L   @  
-
-
- 	           
-     b                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Ԁ                p  p  <                     E L   ?  
-
-
- 	           
-     b                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 X  T   T               p     E  0     
-
-      
-   
-         )        Ԁ              )  X   X   <                     E  4   8  
-
-
- 	          
-             )        Ԁ              .*  (  (  <                     E    @  
-
-
- 	          
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             c-        Ԁ              0  (  (  <                     E    ?  
-
-
- 	          
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ;  T   T                    E  0     
-
-      
-    
-         p @   @                           
-
-       r @   @   <                            
-     
-              Ԁ              W p  p  <                     E L   @  
-
-
- 	          
-  e                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ԁ              `0 @   @                           
-
-       /1       Ԁ              4 p  p  <                     E L   ?  
-
-
- 	          
-  e                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    @   @   <                            
-     
-              Ԁ              o @   @                          
-
-        @   @   <                            
-     
-       >       Ԁ               X   X   <                     E  4   8  
-
-
- 	          
-             	       Ԁ              { p  p  <                     E L   @  
-
-
- 	          
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Ԁ               p  p  <                0    E L   ?  
-
-
- 	          
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      p  p  <                     E L   @  
-
-
- 	          
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      p  p  <                     E L   @  
-
-
- 	          
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Ԁ               p  p  <                @    E L   ?  
-
-
- 	          
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <                     E    @  
-
-
- 	  
-1        
-                                                                                                                                                                                                                                                                                                                                                                                                                     d       Ԁ              @     <                P    E    ?  
-
-
- 	  
-1        
-                                                                                                                                                                                                                                                                                                                                                                                                                     8     <                P    E    ?  
-
-
- 	  
-1        
-                                                                                                                                                                                                                                                                                                                                                                                                                            Ԁ              j X   X   <                `    E  4   8  
-
-
- 	     
-1     
-             z       Ԁ              ظ p  p  <                     E L   @  
-
-
- 	          
-  _                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   l       Ԁ               p  p  <                p    E L   ?  
-
-
- 	          
-  _                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   V (  (  <                     E  	  @  
-
-
- 	          
-  _                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           x (  (  <                     E  	  @  
-
-
- 	          
-  _                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Ԁ               (  (  <                    E  	  ?  
-
-
- 	          
-  _                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Ԁ               X   X   <                    E  4   8  
-
-
- 	     р     
-  g                  Ԁ                p  p  <                    E L 
-  @  
-
-
- 	          
-    g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ              . p  p  <                    E L 
-  ?  
-
-
- 	          
-    g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ԩ (  (  <                     E    @  
-
-
- 	          
-    g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (  (  <                     E    @  
-
-
- 	          
-    g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ѯ       Ԁ               (  (  <                    E    ?  
-
-
- 	          
-    g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ               X   X   <                    E  4   8  
-
-
- 	          
-    _                Ԁ              h	 p  p  <                0    E L   @  
-
-
- 	          
-  Y                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   	       Ԁ              v	 p  p  <                    E L   ?  
-
-
- 	          
-  Y                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   [	 (  (  <                @    E    @  
-
-
- 	          
-  Y                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           	 (  (  <                @    E    @  
-
-
- 	          
-  Y                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ߘ	       Ԁ              	 (  (  <                    E    ?  
-
-
- 	          
-  Y                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           >	       Ԁ              	 X   X   <                    E  4   8  
-
-
- 	          
-  a            	       Ԁ              q p  p  <                P    E L   @  
-
-
- 	  q        
-    a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Du       Ԁ              x p  p  <                     E L   ?  
-
-
- 	  q        
-    a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ry (  (  <                `    E    @  
-
-
- 	          
-    a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | (  (  <                `    E    @  
-
-
- 	          
-    a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ              r (  (  <                    E    ?  
-
-
- 	          
-    a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         D       Ԁ               X   X   <                     E  4   8  
-
-
- 	          
-    Y                Ԁ              Y p  p  <                p    E L   @  
-
-
- 	  Y        
-  S                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ]       Ԁ              a p  p  <                0    E L   ?  
-
-
- 	  Y        
-  S                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   a (  (  <                    E    @  
-
-
- 	  q        
-  S                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           e (  (  <                    E    @  
-
-
- 	  q        
-  S                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           h       Ԁ              l (  (  <                @    E    ?  
-
-
- 	  q        
-  S                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           L       Ԁ               X   X   <                P    E  4   8  
-
-
- 	     q     
-  [                  Ԁ                  p  p  <                    E L   @  
-
-
- 	  A        
-    [                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Ԁ                p  p  <                `    E L   ?  
-
-
- 	  A        
-    [                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (  (  <                    E    @  
-
-
- 	  !Y        
-    [                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (  (  <                    E    @  
-
-
- 	  !Y        
-    [                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ԁ              
-  (  (  <                p    E    ?  
-
-
- 	  !Y        
-    [                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         X  T   T                   E  0     
-
-      
-   
-         ,  T   T                   E  0     
-
-      
-    
-         >        Ԁ              >  X   X   <                    E  4 	  8  
-
-
- 	     !Y     
-    S         >        Ԁ              H p  p  <                    E L   @  
-
-
- 	  #)        
-  M                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ԁ              V p  p  <                    E L   ?  
-
-
- 	  #)        
-  M                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (  (  <                    E    @  
-
-
- 	  %A        
-  M                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (  (  <                    E    @  
-
-
- 	  %A        
-  M                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           A       Ԁ              [ (  (  <                    E    ?  
-
-
- 	  %A        
-  M                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           #       Ԁ              $ X   X   <                    E  4 
-  8  
-
-
- 	     %A     
-  U           $       Ԁ               @   @                          
-
-        @   @   <                           
-     
-              Ԁ              l p  p  <                    E L   @  
-
-
- 	  '        
-    U                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ               (  (  <                     E    @  
-
-
- 	  ))        
-    U                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ               @   @                          
-
-              Ԁ              !	 p  p  <                    E L   ?  
-
-
- 	  '        
-    U                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (  (  <                     E    ?  
-
-
- 	  ))        
-    U                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         s @   @   <                           
-     
-       Qu       Ԁ               @   @                           
-
-       / @   @   <                           
-     
-       ܉       Ԁ               X   X   <                0    E  4   8  
-
-
- 	     ))     
-  		  M                Ԁ              ظ p  p  <                     E L   @  
-
-
- 	  *        
-  	G  		                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 l       Ԁ               p  p  <                @    E L   ?  
-
-
- 	  *        
-  	G  		                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (  (  <                0    E    @  
-
-
- 	  -        
-  	G  		                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (  (  <                0    E    @  
-
-
- 	  -        
-  	G  		                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ               (  (  <                P    E    ?  
-
-
- 	  -        
-  	G  		                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ               X   X   <                `    E  4   8  
-
-
- 	     -     
-  	O                  Ԁ                p  p  <                @    E L   @  
-
-
- 	  .        
-  	  	O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ              . p  p  <                p    E L   ?  
-
-
- 	  .        
-  	  	O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
- (  (  <                P    E    @  
-
-
- 	  0        
-  	  	O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (  (  <                P    E    @  
-
-
- 	  0        
-  	  	O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         گ       Ԁ               (  (  <                    E    ?  
-
-
- 	  0        
-  	  	O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ               X   X   <                    E  4   8  
-
-
- 	     0     
-  	  	G                Ԁ              h	 p  p  <                `    E L   @  
-
-
- 	  2        
-  
-A  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 	       Ԁ              v	 p  p  <                    E L   ?  
-
-
- 	  2        
-  
-A  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 I	 (  (  <                p    E    @  
-
-
- 	  4        
-  
-A  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ɔ	 (  (  <                p    E    @  
-
-
- 	  4        
-  
-A  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         	       Ԁ              N	 (  (  <                    E    ?  
-
-
- 	  4        
-  
-A  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         B	       Ԁ              	 X   X   <                    E  4   8  
-
-
- 	     4     
-  
-I  	         	       Ԁ              q p  p  <                    E L   @  
-
-
- 	  6        
-  
-  
-I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Du       Ԁ              x p  p  <                    E L   ?  
-
-
- 	  6        
-  
-  
-I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 vy (  (  <                    E    @  
-
-
- 	  8        
-  
-  
-I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | (  (  <                    E    @  
-
-
- 	  8        
-  
-  
-I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         4       Ԁ              N (  (  <                    E    ?  
-
-
- 	  8        
-  
-  
-I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         `       Ԁ               X   X   <                    E  4   8  
-
-
- 	     8ɀ     
-  
-  
-A         "       Ԁ              Y p  p  <                    E L    @  
-
-
- 	  :        
-  ;  
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ]       Ԁ              ] (  (  <                    E  !  @  
-
-
- 	  <        
-  ;  
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         	b (  (  <                    E  !  @  
-
-
- 	  <        
-  ;  
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         g (  (  <                    E  !  @  
-
-
- 	  <        
-  ;  
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         j       Ԁ              m (  (  <                    E  !  ?  
-
-
- 	  <        
-  ;  
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ              \ X   X   <                     E  4   8  
-
-
- 	     <     
-  C  
-         l       Ԁ           
\ No newline at end of file
diff -Naur ns-3.25/src/aodv/test/tcp-chain-test-9-0.pcap ns-3.26/src/aodv/test/tcp-chain-test-9-0.pcap
--- ns-3.25/src/aodv/test/tcp-chain-test-9-0.pcap	2016-10-03 20:57:08.349246841 -0700
+++ ns-3.26/src/aodv/test/tcp-chain-test-9-0.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,420 +0,0 @@
-ò            i         T   T                     E  0      
-
-
-      
-
-    
-
-            @   @                            
-	
-
-        	  @   @   <                            
-
-     
-	                Ԁ                 T   T   <                     E  0      
-	
-
-     
-   
-
-  _                Ԁ               e  @   @                            
-	
-        4        Ԁ               8  T   T   <                0     E  0      
-	
-   @ 
-
-    
-            T   T               @     E  0      
-	
-      
-	    
-	            @   @   <                P            
-	     
-                Ԁ               L       Ԁ                \   \   <                `     E  8    8  
-
-
- 	             
-                          Ԁ                @   @                            
-
-
-	         @   @   <                p            
-	     
-
-               Ԁ               2 \   \   <                0     E  8    @  
-
-
- 	            
-   b                      Ԁ                \   \   <                     E  8    ?  
-
-
- 	            
-   b                      Ԁ               Χ X   X   <                     E  4   8  
-
-
- 	           
-   j   b          ާ       Ԁ                      Ԁ              !  p  p  <                     E L   8  
-
-
- 	           
-     b                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 !        Ԁ              i!  X   X   <                @     E  4   @  
-
-
- 	          
-             6"        Ԁ              K#  X   X   <                     E  4   ?  
-
-
- 	          
-             D        Ԁ              H  (  (  <                     E    8  
-
-
- 	          
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (H        Ԁ              (  T   T               P     E  0     
-
-
-      
-
-    
-
-         H  T   T                    E  0     
-	
-      
-	    
-	          @   @   <                            
-	     
-              Ԁ              ( @   @                           
-	
-
-       J @   @   <                `            
-
-     
-	              Ԁ               p  p  <                     E L   8  
-
-
- 	          
-  e                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ԁ               @   @               p            
-
-
-	        @   @   <                           
-	     
-
-              Ԁ               X   X   <                     E  4   @  
-
-
- 	          
-                    Ԁ              8 @   @                           
-	
-       9       Ԁ              : X   X   <                0    E  4   ?  
-
-
- 	          
-                    Ԁ               p  p  <                @    E L   8  
-
-
- 	          
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Ԁ              ^        Ԁ               p  p  <                P    E L   8  
-
-
- 	          
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Ԁ              6 X   X   <                     E  4   @  
-
-
- 	     
-1     
-                    Ԁ               X   X   <                `    E  4   ?  
-
-
- 	     
-1     
-             ' X   X   <                `    E  4   ?  
-
-
- 	     
-1     
-              X   X   <                `    E  4   ?  
-
-
- 	     
-1     
-             X X   X   <                `    E  4   ?  
-
-
- 	     
-1     
-                    Ԁ                   <                p    E    8  
-
-
- 	  
-1        
-                                                                                                                                                                                                                                                                                                                                                                                                                            Ԁ              i       Ԁ               p  p  <                    E L   8  
-
-
- 	          
-  _                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ԁ              A X   X   <                     E  4   @  
-
-
- 	     р     
-  g                  Ԁ               X   X   <                    E  4   ?  
-
-
- 	     р     
-  g           \       Ԁ              v (  (  <                    E  	  8  
-
-
- 	          
-  _                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Ԁ                     Ԁ              + p  p  <                    E L 
-  8  
-
-
- 	          
-    g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ;       Ԁ               X   X   <                     E  4   @  
-
-
- 	          
-    _         V       Ԁ              P X   X   <                    E  4   ?  
-
-
- 	          
-    _         [       Ԁ              u (  (  <                    E    8  
-
-
- 	          
-    g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ              	       Ԁ              s	 p  p  <                    E L   8  
-
-
- 	          
-  Y                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   	       Ԁ              Ѫ	 X   X   <                     E  4   @  
-
-
- 	          
-  a           	       Ԁ              	 X   X   <                    E  4   ?  
-
-
- 	          
-  a           	 X   X   <                    E  4   ?  
-
-
- 	          
-  a           r	       Ԁ              	 (  (  <                     E    8  
-
-
- 	          
-  Y                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           	       Ԁ              A       Ԁ               p  p  <                    E L   8  
-
-
- 	  q        
-    a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ˒       Ԁ               X   X   <                     E  4   @  
-
-
- 	          
-    Y                Ԁ              Δ X   X   <                     E  4   ?  
-
-
- 	          
-    Y         w       Ԁ              _ X   X   <                     E  4   ?  
-
-
- 	          
-    Y          (  (  <                0    E    8  
-
-
- 	          
-    a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Ϟ       Ԁ              w       Ԁ              { p  p  <                @    E L   8  
-
-
- 	  Y        
-  S                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   {       Ԁ              a{ X   X   <                     E  4   @  
-
-
- 	     q     
-  [           .|       Ԁ              } X   X   <                P    E  4   ?  
-
-
- 	     q     
-  [           ~ X   X   <                P    E  4   ?  
-
-
- 	     q     
-  [           n       Ԁ               (  (  <                `    E    8  
-
-
- 	  q        
-  S                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Ԁ                      Ԁ              !  p  p  <                p    E L   8  
-
-
- 	  A        
-    [                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 !        Ԁ              i!  X   X   <                     E  4 	  @  
-
-
- 	     !Y     
-    S         6"        Ԁ              ]#  X   X   <                    E  4 	  ?  
-
-
- 	     !Y     
-    S         a=        Ԁ              {@  (  (  <                    E    8  
-
-
- 	  !Y        
-    [                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         @        Ԁ              @  T   T                    E  0     
-
-
-      
-
-    
-
-           T   T                   E  0     
-	
-      
-	    
-	                Ԁ              S	 p  p  <                    E L   8  
-
-
- 	  #)        
-  M                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   c	       Ԁ              	 X   X   <                    E  4 
-  @  
-
-
- 	     %A     
-  U           ~
-       Ԁ               X   X   <                    E  4 
-  ?  
-
-
- 	     %A     
-  U           "       Ԁ              & (  (  <                    E    8  
-
-
- 	  %A        
-  M                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           &&       Ԁ               @   @   <                           
-	     
-       "       Ԁ                     Ԁ               @   @                          
-	
-
-         @   @   <                            
-
-     
-	              Ԁ              n p  p  <                     E L   8  
-
-
- 	  '        
-    U                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ~       Ԁ               (  (  <                    E    8  
-
-
- 	  ))        
-    U                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ               @   @               0           
-
-
-	        @   @   <                            
-	     
-
-              Ԁ              Z X   X   <                @    E  4   @  
-
-
- 	     ))     
-  		  M         '       Ԁ               @   @               0           
-	
-              Ԁ              = X   X   <                @    E  4   ?  
-
-
- 	     ))     
-  		  M         i       Ԁ               p  p  <                P    E L   8  
-
-
- 	  *        
-  	G  		                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ              A X   X   <                P    E  4   @  
-
-
- 	     -     
-  	O                  Ԁ              # X   X   <                `    E  4   ?  
-
-
- 	     -     
-  	O           `       Ԁ              z (  (  <                p    E    8  
-
-
- 	  -        
-  	G  		                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ                     Ԁ              + p  p  <                    E L   8  
-
-
- 	  .        
-  	  	O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ;       Ԁ               X   X   <                `    E  4   @  
-
-
- 	     0     
-  	  	G         V       Ԁ              P X   X   <                    E  4   ?  
-
-
- 	     0     
-  	  	G                Ԁ              5 (  (  <                    E    8  
-
-
- 	  0        
-  	  	O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         E       Ԁ              	       Ԁ              s	 p  p  <                    E L   8  
-
-
- 	  2        
-  
-A  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 	       Ԁ              Ѫ	 X   X   <                p    E  4   @  
-
-
- 	     4     
-  
-I  	         	       Ԁ              Ŭ	 X   X   <                    E  4   ?  
-
-
- 	     4     
-  
-I  	         	 X   X   <                    E  4   ?  
-
-
- 	     4     
-  
-I  	         d	       Ԁ              ~	 (  (  <                    E    8  
-
-
- 	  4        
-  
-A  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         	       Ԁ              A       Ԁ               p  p  <                    E L   8  
-
-
- 	  6        
-  
-  
-I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ˒       Ԁ               X   X   <                    E  4   @  
-
-
- 	     8ɀ     
-  
-  
-A                Ԁ               X   X   <                    E  4   ?  
-
-
- 	     8ɀ     
-  
-  
-A                Ԁ                (  (  <                     E    8  
-
-
- 	  8        
-  
-  
-I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         0       Ԁ              w       Ԁ              { p  p  <                    E L    8  
-
-
- 	  :        
-  ;  
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 {       Ԁ              a{ X   X   <                    E  4   @  
-
-
- 	     <     
-  C  
-         .|       Ԁ              | X   X   <                     E  4   ?  
-
-
- 	     <     
-  C  
-                Ԁ              ˊ (  (  <                0    E  !  8  
-
-
- 	  <        
-  ;  
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ۊ       Ԁ           
\ No newline at end of file
diff -Naur ns-3.25/src/aodv/test/udp-chain-test-0-0.pcap ns-3.26/src/aodv/test/udp-chain-test-0-0.pcap
--- ns-3.25/src/aodv/test/udp-chain-test-0-0.pcap	2016-10-03 20:57:08.351246825 -0700
+++ ns-3.26/src/aodv/test/udp-chain-test-0-0.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,227 +0,0 @@
-ò            i       .  T   T          	     	      E  0      
-
-      
-    
-          H T   T          
-     
-      E  0      
-
-      
-    
-             X   X          	     	     E  4     
-
-    (     
-
-    
-          `   X   X          
-     
-     E  4     
-
-    (    
-
-    
-           @   @   <           
-     
-             
-
-     
-              Ԁ               @   @          
-     
-0            
-
-
-       4 @   @   <      
-     	     	             	
-     
-
-              Ԁ       	        T   T   <      	     
-     
-@     E  0      
-
-     
-
-    
-         !       Ԁ       
-       o @   @          	     	0            	
-
-        @   @   <      	     
-     
-P            
-
-     	
-              Ԁ       
-        (  (  <      
-     	     	@     E     @  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 $       Ԁ       	       , @   @          
-     
-`            
-
-
-       -       Ԁ              3 (  (  <           
-     
-p     E     ?  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H (  (  <      
-     	     	P     E    @  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (       Ԁ       	        (  (  <           
-     
-     E    ?  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (  (  <      
-     	     	`     E    @  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 p       Ԁ       	       6 (  (  <           
-     
-     E    ?  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ظ (  (  <      
-     	     	p     E    @  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ       	       ~ (  (  <           
-     
-     E    ?  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (  (  <      
-     	     	     E    @  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Ԁ       	       Ƭ (  (  <           
-     
-     E    ?  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 h	 (  (  <      
-     	     	     E    @  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H	       Ԁ       	       	 (  (  <           
-     
-     E    ?  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 q (  (  <      
-     	     	     E    @  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 w       Ԁ       	       V} (  (  <           
-     
-     E    ?  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Y (  (  <      
-     	     	     E    @  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 _       Ԁ       	       e (  (  <           
-     
-     E    ?  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (  (  <      
-     	     	     E    @  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Ԁ       	         (  (  <           
-     
-     E    ?  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (  T   T          	     	     E  0     
-
-      
-   
-           T   T          
-     
-     E  0     
-
-      
-    
-         p @   @          	     	            	
-
-       r @   @   <      	     
-     
-           
-
-     	
-              Ԁ       
-        (  (  <      
-     	     	     E  	  @  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ       	       72 @   @          
-     
-            
-
-
-       3       Ԁ              8 (  (  <           
-     
-0    E  	  ?  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (  (  <      
-     	     	     E  
-  @  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 p       Ԁ       	       6 (  (  <           
-     
-@    E  
-  ?  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ظ (  (  <      
-     	     	    E    @  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ       	       ~ (  (  <           
-     
-P    E    ?  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (  (  <      
-     	     	     E    @  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Ԁ       	       Ƭ (  (  <           
-     
-`    E    ?  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 h	 (  (  <      
-     	     	0    E    @  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H	       Ԁ       	       	 (  (  <           
-     
-p    E    ?  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 q (  (  <      
-     	     	@    E    @  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 w       Ԁ       	       V} (  (  <           
-     
-    E    ?  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Y (  (  <      
-     	     	P    E    @  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 _       Ԁ       	       e (  (  <           
-     
-    E    ?  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
\ No newline at end of file
diff -Naur ns-3.25/src/aodv/test/udp-chain-test-9-0.pcap ns-3.26/src/aodv/test/udp-chain-test-9-0.pcap
--- ns-3.25/src/aodv/test/udp-chain-test-9-0.pcap	2016-10-03 20:57:08.352246817 -0700
+++ ns-3.26/src/aodv/test/udp-chain-test-9-0.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,112 +0,0 @@
-ò            i         T   T                     E  0      
-
-
-      
-
-    
-
-            T   T                     E  0      
-	
-      
-	    
-	         (  T   T                    E  0     
-
-
-      
-
-    
-
-           @   @                           
-	
-
-       	  @   @   <                             
-
-     
-	               Ԁ              `  T   T   <                      E  0      
-	
-
-     
-   
-
-  _       p        Ԁ              e  @   @               0            
-	
-       4        Ԁ              &  T   T   <                @     E  0      
-	
-   @ 
-
-    
-         H  T   T               P     E  0     
-	
-      
-	    
-	           @   @   <                `            
-	     
-               Ԁ              U       Ԁ               (  (  <                p     E     8  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 +       Ԁ              9       Ԁ               (  (  <                     E    8  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ                      Ԁ              G (  (  <                     E    8  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 W       Ԁ                     Ԁ               (  (  <                     E    8  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ                     Ԁ               (  (  <                     E    8  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ              Y	       Ԁ              	 (  (  <                     E    8  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 /	       Ԁ                     Ԁ              g (  (  <                     E    8  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 w       Ԁ                     Ԁ               (  (  <                     E    8  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ              /        Ԁ              5  (  (  <                     E    8  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 5        Ԁ              @  T   T               0     E  0     
-
-
-      
-
-    
-
-           T   T                    E  0     
-	
-      
-	    
-	         E @   @   <                           
-	     
-              Ԁ              %	 @   @                           
-	
-
-       G	 @   @   <                @            
-
-     
-	       	       Ԁ               (  (  <                0    E  	  8  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ                      Ԁ              G (  (  <                @    E  
-  8  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 W       Ԁ                     Ԁ               (  (  <                P    E    8  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ                     Ԁ               (  (  <                `    E    8  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ              Y	       Ԁ              	 (  (  <                p    E    8  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 /	       Ԁ                     Ԁ              g (  (  <                    E    8  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 w       Ԁ                     Ԁ               (  (  <                    E    8  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ           
\ No newline at end of file
diff -Naur ns-3.25/src/applications/bindings/callbacks_list.py ns-3.26/src/applications/bindings/callbacks_list.py
--- ns-3.25/src/applications/bindings/callbacks_list.py	2016-10-03 20:57:08.353246809 -0700
+++ ns-3.26/src/applications/bindings/callbacks_list.py	2016-10-03 19:49:01.651387623 -0700
@@ -6,6 +6,7 @@
     ['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::QueueItem>', '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.25/src/applications/bindings/modulegen__gcc_ILP32.py ns-3.26/src/applications/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/applications/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.359246763 -0700
+++ ns-3.26/src/applications/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.659387564 -0700
@@ -154,8 +154,8 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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-net-device-helper.h (module 'network'): ns3::SimpleNetDeviceHelper [class]
@@ -164,6 +164,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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')
     ## system-wall-clock-ms.h (module 'core'): ns3::SystemWallClockMs [class]
@@ -180,6 +182,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -224,22 +228,24 @@
     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-limits.h (module 'network'): ns3::QueueLimits [class]
+    module.add_class('QueueLimits', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [class]
     module.add_class('RadiotapHeader', import_from_module='ns.network', parent=root_module['ns3::Header'])
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['FRAME_FLAG_NONE', 'FRAME_FLAG_CFP', 'FRAME_FLAG_SHORT_PREAMBLE', 'FRAME_FLAG_WEP', 'FRAME_FLAG_FRAGMENTED', 'FRAME_FLAG_FCS_INCLUDED', 'FRAME_FLAG_DATA_PADDING', 'FRAME_FLAG_BAD_FCS', 'FRAME_FLAG_SHORT_GUARD'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['CHANNEL_FLAG_NONE', 'CHANNEL_FLAG_TURBO', 'CHANNEL_FLAG_CCK', 'CHANNEL_FLAG_OFDM', 'CHANNEL_FLAG_SPECTRUM_2GHZ', 'CHANNEL_FLAG_SPECTRUM_5GHZ', 'CHANNEL_FLAG_PASSIVE', 'CHANNEL_FLAG_DYNAMIC', 'CHANNEL_FLAG_GFSK'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['MCS_KNOWN_NONE', 'MCS_KNOWN_BANDWIDTH', 'MCS_KNOWN_INDEX', 'MCS_KNOWN_GUARD_INTERVAL', 'MCS_KNOWN_HT_FORMAT', 'MCS_KNOWN_FEC_TYPE', 'MCS_KNOWN_STBC', 'MCS_KNOWN_NESS', 'MCS_KNOWN_NESS_BIT_1'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['MCS_FLAGS_NONE', 'MCS_FLAGS_BANDWIDTH_40', 'MCS_FLAGS_BANDWIDTH_20L', 'MCS_FLAGS_BANDWIDTH_20U', 'MCS_FLAGS_GUARD_INTERVAL', 'MCS_FLAGS_HT_GREENFIELD', 'MCS_FLAGS_FEC_TYPE', 'MCS_FLAGS_STBC_STREAMS', 'MCS_FLAGS_NESS_BIT_0'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['A_MPDU_STATUS_NONE', 'A_MPDU_STATUS_REPORT_ZERO_LENGTH', 'A_MPDU_STATUS_IS_ZERO_LENGTH', 'A_MPDU_STATUS_LAST_KNOWN', 'A_MPDU_STATUS_LAST', 'A_MPDU_STATUS_DELIMITER_CRC_ERROR', 'A_MPDU_STATUS_DELIMITER_CRC_KNOWN'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['VHT_KNOWN_NONE', 'VHT_KNOWN_STBC', 'VHT_KNOWN_TXOP_PS_NOT_ALLOWED', 'VHT_KNOWN_GUARD_INTERVAL', 'VHT_KNOWN_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_KNOWN_LDPC_EXTRA_OFDM_SYMBOL', 'VHT_KNOWN_BEAMFORMED', 'VHT_KNOWN_BANDWIDTH', 'VHT_KNOWN_GROUP_ID', 'VHT_KNOWN_PARTIAL_AID'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['VHT_FLAGS_NONE', 'VHT_FLAGS_STBC', 'VHT_FLAGS_TXOP_PS_NOT_ALLOWED', 'VHT_FLAGS_GUARD_INTERVAL', 'VHT_FLAGS_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_FLAGS__LDPC_EXTRA_OFDM_SYMBOL', 'VHT_FLAGS_BEAMFORMED'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::FrameFlag [enumeration]
+    module.add_enum('FrameFlag', ['FRAME_FLAG_NONE', 'FRAME_FLAG_CFP', 'FRAME_FLAG_SHORT_PREAMBLE', 'FRAME_FLAG_WEP', 'FRAME_FLAG_FRAGMENTED', 'FRAME_FLAG_FCS_INCLUDED', 'FRAME_FLAG_DATA_PADDING', 'FRAME_FLAG_BAD_FCS', 'FRAME_FLAG_SHORT_GUARD'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::ChannelFlags [enumeration]
+    module.add_enum('ChannelFlags', ['CHANNEL_FLAG_NONE', 'CHANNEL_FLAG_TURBO', 'CHANNEL_FLAG_CCK', 'CHANNEL_FLAG_OFDM', 'CHANNEL_FLAG_SPECTRUM_2GHZ', 'CHANNEL_FLAG_SPECTRUM_5GHZ', 'CHANNEL_FLAG_PASSIVE', 'CHANNEL_FLAG_DYNAMIC', 'CHANNEL_FLAG_GFSK'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::McsKnown [enumeration]
+    module.add_enum('McsKnown', ['MCS_KNOWN_NONE', 'MCS_KNOWN_BANDWIDTH', 'MCS_KNOWN_INDEX', 'MCS_KNOWN_GUARD_INTERVAL', 'MCS_KNOWN_HT_FORMAT', 'MCS_KNOWN_FEC_TYPE', 'MCS_KNOWN_STBC', 'MCS_KNOWN_NESS', 'MCS_KNOWN_NESS_BIT_1'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::McsFlags [enumeration]
+    module.add_enum('McsFlags', ['MCS_FLAGS_NONE', 'MCS_FLAGS_BANDWIDTH_40', 'MCS_FLAGS_BANDWIDTH_20L', 'MCS_FLAGS_BANDWIDTH_20U', 'MCS_FLAGS_GUARD_INTERVAL', 'MCS_FLAGS_HT_GREENFIELD', 'MCS_FLAGS_FEC_TYPE', 'MCS_FLAGS_STBC_STREAMS', 'MCS_FLAGS_NESS_BIT_0'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::AmpduFlags [enumeration]
+    module.add_enum('AmpduFlags', ['A_MPDU_STATUS_NONE', 'A_MPDU_STATUS_REPORT_ZERO_LENGTH', 'A_MPDU_STATUS_IS_ZERO_LENGTH', 'A_MPDU_STATUS_LAST_KNOWN', 'A_MPDU_STATUS_LAST', 'A_MPDU_STATUS_DELIMITER_CRC_ERROR', 'A_MPDU_STATUS_DELIMITER_CRC_KNOWN'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::VhtKnown [enumeration]
+    module.add_enum('VhtKnown', ['VHT_KNOWN_NONE', 'VHT_KNOWN_STBC', 'VHT_KNOWN_TXOP_PS_NOT_ALLOWED', 'VHT_KNOWN_GUARD_INTERVAL', 'VHT_KNOWN_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_KNOWN_LDPC_EXTRA_OFDM_SYMBOL', 'VHT_KNOWN_BEAMFORMED', 'VHT_KNOWN_BANDWIDTH', 'VHT_KNOWN_GROUP_ID', 'VHT_KNOWN_PARTIAL_AID'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::VhtFlags [enumeration]
+    module.add_enum('VhtFlags', ['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'])
     ## seq-ts-header.h (module 'applications'): ns3::SeqTsHeader [class]
@@ -288,10 +294,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
     module.add_class('SocketFactory', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
@@ -302,6 +308,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -364,8 +372,14 @@
     module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue [class]
     module.add_class('DropTailQueue', import_from_module='ns.network', parent=root_module['ns3::Queue'])
+    ## dynamic-queue-limits.h (module 'network'): ns3::DynamicQueueLimits [class]
+    module.add_class('DynamicQueueLimits', import_from_module='ns.network', parent=root_module['ns3::QueueLimits'])
     ## 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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -480,6 +494,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -650,6 +666,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_addressUtils(module):
     root_module = module.get_root()
@@ -745,6 +764,7 @@
     register_Ns3PacketSocketTag_methods(root_module, root_module['ns3::PacketSocketTag'])
     register_Ns3PcapFileWrapper_methods(root_module, root_module['ns3::PcapFileWrapper'])
     register_Ns3Queue_methods(root_module, root_module['ns3::Queue'])
+    register_Ns3QueueLimits_methods(root_module, root_module['ns3::QueueLimits'])
     register_Ns3RadiotapHeader_methods(root_module, root_module['ns3::RadiotapHeader'])
     register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
     register_Ns3SeqTsHeader_methods(root_module, root_module['ns3::SeqTsHeader'])
@@ -767,12 +787,12 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -802,7 +822,10 @@
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3DropTailQueue_methods(root_module, root_module['ns3::DropTailQueue'])
+    register_Ns3DynamicQueueLimits_methods(root_module, root_module['ns3::DynamicQueueLimits'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -1296,6 +1319,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1863,6 +1891,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1876,6 +1909,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
@@ -3372,10 +3409,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3786,23 +3823,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3917,6 +3954,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -3943,10 +3985,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -3968,6 +4010,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -3983,6 +4029,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3UdpClientHelper_methods(root_module, cls):
@@ -3990,12 +4040,10 @@
     cls.add_constructor([param('ns3::UdpClientHelper const &', 'arg0')])
     ## udp-client-server-helper.h (module 'applications'): ns3::UdpClientHelper::UdpClientHelper() [constructor]
     cls.add_constructor([])
-    ## udp-client-server-helper.h (module 'applications'): ns3::UdpClientHelper::UdpClientHelper(ns3::Ipv4Address ip, uint16_t port) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address', 'ip'), param('uint16_t', 'port')])
-    ## udp-client-server-helper.h (module 'applications'): ns3::UdpClientHelper::UdpClientHelper(ns3::Ipv6Address ip, uint16_t port) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'ip'), param('uint16_t', 'port')])
     ## udp-client-server-helper.h (module 'applications'): ns3::UdpClientHelper::UdpClientHelper(ns3::Address ip, uint16_t port) [constructor]
     cls.add_constructor([param('ns3::Address', 'ip'), param('uint16_t', 'port')])
+    ## udp-client-server-helper.h (module 'applications'): ns3::UdpClientHelper::UdpClientHelper(ns3::Address addr) [constructor]
+    cls.add_constructor([param('ns3::Address', 'addr')])
     ## udp-client-server-helper.h (module 'applications'): ns3::ApplicationContainer ns3::UdpClientHelper::Install(ns3::NodeContainer c) [member function]
     cls.add_method('Install', 
                    'ns3::ApplicationContainer', 
@@ -4011,10 +4059,8 @@
     cls.add_constructor([param('ns3::UdpEchoClientHelper const &', 'arg0')])
     ## udp-echo-helper.h (module 'applications'): ns3::UdpEchoClientHelper::UdpEchoClientHelper(ns3::Address ip, uint16_t port) [constructor]
     cls.add_constructor([param('ns3::Address', 'ip'), param('uint16_t', 'port')])
-    ## udp-echo-helper.h (module 'applications'): ns3::UdpEchoClientHelper::UdpEchoClientHelper(ns3::Ipv4Address ip, uint16_t port) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address', 'ip'), param('uint16_t', 'port')])
-    ## udp-echo-helper.h (module 'applications'): ns3::UdpEchoClientHelper::UdpEchoClientHelper(ns3::Ipv6Address ip, uint16_t port) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'ip'), param('uint16_t', 'port')])
+    ## udp-echo-helper.h (module 'applications'): ns3::UdpEchoClientHelper::UdpEchoClientHelper(ns3::Address addr) [constructor]
+    cls.add_constructor([param('ns3::Address', 'addr')])
     ## udp-echo-helper.h (module 'applications'): ns3::ApplicationContainer ns3::UdpEchoClientHelper::Install(ns3::Ptr<ns3::Node> node) const [member function]
     cls.add_method('Install', 
                    'ns3::ApplicationContainer', 
@@ -4102,10 +4148,8 @@
     cls.add_constructor([])
     ## udp-client-server-helper.h (module 'applications'): ns3::UdpTraceClientHelper::UdpTraceClientHelper(ns3::Address ip, uint16_t port, std::string filename) [constructor]
     cls.add_constructor([param('ns3::Address', 'ip'), param('uint16_t', 'port'), param('std::string', 'filename')])
-    ## udp-client-server-helper.h (module 'applications'): ns3::UdpTraceClientHelper::UdpTraceClientHelper(ns3::Ipv4Address ip, uint16_t port, std::string filename) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address', 'ip'), param('uint16_t', 'port'), param('std::string', 'filename')])
-    ## udp-client-server-helper.h (module 'applications'): ns3::UdpTraceClientHelper::UdpTraceClientHelper(ns3::Ipv6Address ip, uint16_t port, std::string filename) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'ip'), param('uint16_t', 'port'), param('std::string', 'filename')])
+    ## udp-client-server-helper.h (module 'applications'): ns3::UdpTraceClientHelper::UdpTraceClientHelper(ns3::Address addr, std::string filename) [constructor]
+    cls.add_constructor([param('ns3::Address', 'addr'), param('std::string', 'filename')])
     ## udp-client-server-helper.h (module 'applications'): ns3::ApplicationContainer ns3::UdpTraceClientHelper::Install(ns3::NodeContainer c) [member function]
     cls.add_method('Install', 
                    'ns3::ApplicationContainer', 
@@ -4419,6 +4463,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -4718,10 +4767,19 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
@@ -4734,10 +4792,10 @@
     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]
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
@@ -4754,6 +4812,43 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3QueueLimits_methods(root_module, cls):
+    ## queue-limits.h (module 'network'): ns3::QueueLimits::QueueLimits() [constructor]
+    cls.add_constructor([])
+    ## queue-limits.h (module 'network'): ns3::QueueLimits::QueueLimits(ns3::QueueLimits const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueLimits const &', 'arg0')])
+    ## queue-limits.h (module 'network'): int32_t ns3::QueueLimits::Available() const [member function]
+    cls.add_method('Available', 
+                   'int32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## queue-limits.h (module 'network'): void ns3::QueueLimits::Completed(uint32_t count) [member function]
+    cls.add_method('Completed', 
+                   'void', 
+                   [param('uint32_t', 'count')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## queue-limits.h (module 'network'): static ns3::TypeId ns3::QueueLimits::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue-limits.h (module 'network'): void ns3::QueueLimits::Queued(uint32_t count) [member function]
+    cls.add_method('Queued', 
+                   'void', 
+                   [param('uint32_t', 'count')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## queue-limits.h (module 'network'): void ns3::QueueLimits::Reset() [member function]
+    cls.add_method('Reset', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3RadiotapHeader_methods(root_module, cls):
@@ -5404,6 +5499,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -5429,6 +5529,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -5577,6 +5682,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -5604,11 +5713,6 @@
                    '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', 
@@ -5671,52 +5775,6 @@
                    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_Ns3SocketFactory_methods(root_module, cls):
     ## socket-factory.h (module 'network'): ns3::SocketFactory::SocketFactory(ns3::SocketFactory const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SocketFactory const &', 'arg0')])
@@ -5918,6 +5976,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -6617,10 +6721,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## bulk-send-application.h (module 'applications'): void ns3::BulkSendApplication::SetMaxBytes(uint32_t maxBytes) [member function]
+    ## bulk-send-application.h (module 'applications'): void ns3::BulkSendApplication::SetMaxBytes(uint64_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
-                   [param('uint32_t', 'maxBytes')])
+                   [param('uint64_t', 'maxBytes')])
     ## bulk-send-application.h (module 'applications'): void ns3::BulkSendApplication::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -7005,6 +7109,43 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
+    ## drop-tail-queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::DropTailQueue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3DynamicQueueLimits_methods(root_module, cls):
+    ## dynamic-queue-limits.h (module 'network'): ns3::DynamicQueueLimits::DynamicQueueLimits(ns3::DynamicQueueLimits const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DynamicQueueLimits const &', 'arg0')])
+    ## dynamic-queue-limits.h (module 'network'): ns3::DynamicQueueLimits::DynamicQueueLimits() [constructor]
+    cls.add_constructor([])
+    ## dynamic-queue-limits.h (module 'network'): int32_t ns3::DynamicQueueLimits::Available() const [member function]
+    cls.add_method('Available', 
+                   'int32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dynamic-queue-limits.h (module 'network'): void ns3::DynamicQueueLimits::Completed(uint32_t count) [member function]
+    cls.add_method('Completed', 
+                   'void', 
+                   [param('uint32_t', 'count')], 
+                   is_virtual=True)
+    ## dynamic-queue-limits.h (module 'network'): static ns3::TypeId ns3::DynamicQueueLimits::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## dynamic-queue-limits.h (module 'network'): void ns3::DynamicQueueLimits::Queued(uint32_t count) [member function]
+    cls.add_method('Queued', 
+                   'void', 
+                   [param('uint32_t', 'count')], 
+                   is_virtual=True)
+    ## dynamic-queue-limits.h (module 'network'): void ns3::DynamicQueueLimits::Reset() [member function]
+    cls.add_method('Reset', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     return
 
 def register_Ns3EmpiricalRandomVariable_methods(root_module, cls):
@@ -7041,6 +7182,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -8059,16 +8264,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -8096,35 +8316,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -8376,10 +8591,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## onoff-application.h (module 'applications'): void ns3::OnOffApplication::SetMaxBytes(uint32_t maxBytes) [member function]
+    ## onoff-application.h (module 'applications'): void ns3::OnOffApplication::SetMaxBytes(uint64_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
-                   [param('uint32_t', 'maxBytes')])
+                   [param('uint64_t', 'maxBytes')])
     ## onoff-application.h (module 'applications'): void ns3::OnOffApplication::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -8610,9 +8825,9 @@
                    'ns3::Ptr< ns3::Socket >', 
                    [], 
                    is_const=True)
-    ## packet-sink.h (module 'applications'): uint32_t ns3::PacketSink::GetTotalRx() const [member function]
+    ## packet-sink.h (module 'applications'): uint64_t ns3::PacketSink::GetTotalRx() const [member function]
     cls.add_method('GetTotalRx', 
-                   'uint32_t', 
+                   'uint64_t', 
                    [], 
                    is_const=True)
     ## packet-sink.h (module 'applications'): static ns3::TypeId ns3::PacketSink::GetTypeId() [member function]
@@ -8793,6 +9008,11 @@
     cls.add_constructor([param('ns3::PacketSocketClient const &', 'arg0')])
     ## packet-socket-client.h (module 'network'): ns3::PacketSocketClient::PacketSocketClient() [constructor]
     cls.add_constructor([])
+    ## packet-socket-client.h (module 'network'): uint8_t ns3::PacketSocketClient::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## packet-socket-client.h (module 'network'): static ns3::TypeId ns3::PacketSocketClient::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -9936,6 +10156,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
@@ -10320,18 +10545,14 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## udp-client.h (module 'applications'): void ns3::UdpClient::SetRemote(ns3::Ipv4Address ip, uint16_t port) [member function]
-    cls.add_method('SetRemote', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'ip'), param('uint16_t', 'port')])
-    ## udp-client.h (module 'applications'): void ns3::UdpClient::SetRemote(ns3::Ipv6Address ip, uint16_t port) [member function]
-    cls.add_method('SetRemote', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'ip'), param('uint16_t', 'port')])
     ## udp-client.h (module 'applications'): void ns3::UdpClient::SetRemote(ns3::Address ip, uint16_t port) [member function]
     cls.add_method('SetRemote', 
                    'void', 
                    [param('ns3::Address', 'ip'), param('uint16_t', 'port')])
+    ## udp-client.h (module 'applications'): void ns3::UdpClient::SetRemote(ns3::Address addr) [member function]
+    cls.add_method('SetRemote', 
+                   'void', 
+                   [param('ns3::Address', 'addr')])
     ## udp-client.h (module 'applications'): void ns3::UdpClient::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -10380,18 +10601,14 @@
     cls.add_method('SetFill', 
                    'void', 
                    [param('uint8_t *', 'fill'), param('uint32_t', 'fillSize'), param('uint32_t', 'dataSize')])
-    ## udp-echo-client.h (module 'applications'): void ns3::UdpEchoClient::SetRemote(ns3::Ipv4Address ip, uint16_t port) [member function]
-    cls.add_method('SetRemote', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'ip'), param('uint16_t', 'port')])
-    ## udp-echo-client.h (module 'applications'): void ns3::UdpEchoClient::SetRemote(ns3::Ipv6Address ip, uint16_t port) [member function]
-    cls.add_method('SetRemote', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'ip'), param('uint16_t', 'port')])
     ## udp-echo-client.h (module 'applications'): void ns3::UdpEchoClient::SetRemote(ns3::Address ip, uint16_t port) [member function]
     cls.add_method('SetRemote', 
                    'void', 
                    [param('ns3::Address', 'ip'), param('uint16_t', 'port')])
+    ## udp-echo-client.h (module 'applications'): void ns3::UdpEchoClient::SetRemote(ns3::Address addr) [member function]
+    cls.add_method('SetRemote', 
+                   'void', 
+                   [param('ns3::Address', 'addr')])
     ## udp-echo-client.h (module 'applications'): void ns3::UdpEchoClient::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -10451,9 +10668,9 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
-    ## udp-server.h (module 'applications'): uint32_t ns3::UdpServer::GetReceived() const [member function]
+    ## udp-server.h (module 'applications'): uint64_t ns3::UdpServer::GetReceived() const [member function]
     cls.add_method('GetReceived', 
-                   'uint32_t', 
+                   'uint64_t', 
                    [], 
                    is_const=True)
     ## udp-server.h (module 'applications'): static ns3::TypeId ns3::UdpServer::GetTypeId() [member function]
@@ -10502,18 +10719,14 @@
     cls.add_method('SetMaxPacketSize', 
                    'void', 
                    [param('uint16_t', 'maxPacketSize')])
-    ## udp-trace-client.h (module 'applications'): void ns3::UdpTraceClient::SetRemote(ns3::Ipv4Address ip, uint16_t port) [member function]
-    cls.add_method('SetRemote', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'ip'), param('uint16_t', 'port')])
-    ## udp-trace-client.h (module 'applications'): void ns3::UdpTraceClient::SetRemote(ns3::Ipv6Address ip, uint16_t port) [member function]
-    cls.add_method('SetRemote', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'ip'), param('uint16_t', 'port')])
     ## udp-trace-client.h (module 'applications'): void ns3::UdpTraceClient::SetRemote(ns3::Address ip, uint16_t port) [member function]
     cls.add_method('SetRemote', 
                    'void', 
                    [param('ns3::Address', 'ip'), param('uint16_t', 'port')])
+    ## udp-trace-client.h (module 'applications'): void ns3::UdpTraceClient::SetRemote(ns3::Address addr) [member function]
+    cls.add_method('SetRemote', 
+                   'void', 
+                   [param('ns3::Address', 'addr')])
     ## udp-trace-client.h (module 'applications'): void ns3::UdpTraceClient::SetTraceFile(std::string filename) [member function]
     cls.add_method('SetTraceFile', 
                    'void', 
diff -Naur ns-3.25/src/applications/bindings/modulegen__gcc_LP64.py ns-3.26/src/applications/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/applications/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.366246708 -0700
+++ ns-3.26/src/applications/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.666387511 -0700
@@ -154,8 +154,8 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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-net-device-helper.h (module 'network'): ns3::SimpleNetDeviceHelper [class]
@@ -164,6 +164,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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')
     ## system-wall-clock-ms.h (module 'core'): ns3::SystemWallClockMs [class]
@@ -180,6 +182,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -224,22 +228,24 @@
     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-limits.h (module 'network'): ns3::QueueLimits [class]
+    module.add_class('QueueLimits', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [class]
     module.add_class('RadiotapHeader', import_from_module='ns.network', parent=root_module['ns3::Header'])
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['FRAME_FLAG_NONE', 'FRAME_FLAG_CFP', 'FRAME_FLAG_SHORT_PREAMBLE', 'FRAME_FLAG_WEP', 'FRAME_FLAG_FRAGMENTED', 'FRAME_FLAG_FCS_INCLUDED', 'FRAME_FLAG_DATA_PADDING', 'FRAME_FLAG_BAD_FCS', 'FRAME_FLAG_SHORT_GUARD'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['CHANNEL_FLAG_NONE', 'CHANNEL_FLAG_TURBO', 'CHANNEL_FLAG_CCK', 'CHANNEL_FLAG_OFDM', 'CHANNEL_FLAG_SPECTRUM_2GHZ', 'CHANNEL_FLAG_SPECTRUM_5GHZ', 'CHANNEL_FLAG_PASSIVE', 'CHANNEL_FLAG_DYNAMIC', 'CHANNEL_FLAG_GFSK'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['MCS_KNOWN_NONE', 'MCS_KNOWN_BANDWIDTH', 'MCS_KNOWN_INDEX', 'MCS_KNOWN_GUARD_INTERVAL', 'MCS_KNOWN_HT_FORMAT', 'MCS_KNOWN_FEC_TYPE', 'MCS_KNOWN_STBC', 'MCS_KNOWN_NESS', 'MCS_KNOWN_NESS_BIT_1'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['MCS_FLAGS_NONE', 'MCS_FLAGS_BANDWIDTH_40', 'MCS_FLAGS_BANDWIDTH_20L', 'MCS_FLAGS_BANDWIDTH_20U', 'MCS_FLAGS_GUARD_INTERVAL', 'MCS_FLAGS_HT_GREENFIELD', 'MCS_FLAGS_FEC_TYPE', 'MCS_FLAGS_STBC_STREAMS', 'MCS_FLAGS_NESS_BIT_0'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['A_MPDU_STATUS_NONE', 'A_MPDU_STATUS_REPORT_ZERO_LENGTH', 'A_MPDU_STATUS_IS_ZERO_LENGTH', 'A_MPDU_STATUS_LAST_KNOWN', 'A_MPDU_STATUS_LAST', 'A_MPDU_STATUS_DELIMITER_CRC_ERROR', 'A_MPDU_STATUS_DELIMITER_CRC_KNOWN'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['VHT_KNOWN_NONE', 'VHT_KNOWN_STBC', 'VHT_KNOWN_TXOP_PS_NOT_ALLOWED', 'VHT_KNOWN_GUARD_INTERVAL', 'VHT_KNOWN_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_KNOWN_LDPC_EXTRA_OFDM_SYMBOL', 'VHT_KNOWN_BEAMFORMED', 'VHT_KNOWN_BANDWIDTH', 'VHT_KNOWN_GROUP_ID', 'VHT_KNOWN_PARTIAL_AID'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['VHT_FLAGS_NONE', 'VHT_FLAGS_STBC', 'VHT_FLAGS_TXOP_PS_NOT_ALLOWED', 'VHT_FLAGS_GUARD_INTERVAL', 'VHT_FLAGS_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_FLAGS__LDPC_EXTRA_OFDM_SYMBOL', 'VHT_FLAGS_BEAMFORMED'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::FrameFlag [enumeration]
+    module.add_enum('FrameFlag', ['FRAME_FLAG_NONE', 'FRAME_FLAG_CFP', 'FRAME_FLAG_SHORT_PREAMBLE', 'FRAME_FLAG_WEP', 'FRAME_FLAG_FRAGMENTED', 'FRAME_FLAG_FCS_INCLUDED', 'FRAME_FLAG_DATA_PADDING', 'FRAME_FLAG_BAD_FCS', 'FRAME_FLAG_SHORT_GUARD'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::ChannelFlags [enumeration]
+    module.add_enum('ChannelFlags', ['CHANNEL_FLAG_NONE', 'CHANNEL_FLAG_TURBO', 'CHANNEL_FLAG_CCK', 'CHANNEL_FLAG_OFDM', 'CHANNEL_FLAG_SPECTRUM_2GHZ', 'CHANNEL_FLAG_SPECTRUM_5GHZ', 'CHANNEL_FLAG_PASSIVE', 'CHANNEL_FLAG_DYNAMIC', 'CHANNEL_FLAG_GFSK'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::McsKnown [enumeration]
+    module.add_enum('McsKnown', ['MCS_KNOWN_NONE', 'MCS_KNOWN_BANDWIDTH', 'MCS_KNOWN_INDEX', 'MCS_KNOWN_GUARD_INTERVAL', 'MCS_KNOWN_HT_FORMAT', 'MCS_KNOWN_FEC_TYPE', 'MCS_KNOWN_STBC', 'MCS_KNOWN_NESS', 'MCS_KNOWN_NESS_BIT_1'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::McsFlags [enumeration]
+    module.add_enum('McsFlags', ['MCS_FLAGS_NONE', 'MCS_FLAGS_BANDWIDTH_40', 'MCS_FLAGS_BANDWIDTH_20L', 'MCS_FLAGS_BANDWIDTH_20U', 'MCS_FLAGS_GUARD_INTERVAL', 'MCS_FLAGS_HT_GREENFIELD', 'MCS_FLAGS_FEC_TYPE', 'MCS_FLAGS_STBC_STREAMS', 'MCS_FLAGS_NESS_BIT_0'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::AmpduFlags [enumeration]
+    module.add_enum('AmpduFlags', ['A_MPDU_STATUS_NONE', 'A_MPDU_STATUS_REPORT_ZERO_LENGTH', 'A_MPDU_STATUS_IS_ZERO_LENGTH', 'A_MPDU_STATUS_LAST_KNOWN', 'A_MPDU_STATUS_LAST', 'A_MPDU_STATUS_DELIMITER_CRC_ERROR', 'A_MPDU_STATUS_DELIMITER_CRC_KNOWN'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::VhtKnown [enumeration]
+    module.add_enum('VhtKnown', ['VHT_KNOWN_NONE', 'VHT_KNOWN_STBC', 'VHT_KNOWN_TXOP_PS_NOT_ALLOWED', 'VHT_KNOWN_GUARD_INTERVAL', 'VHT_KNOWN_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_KNOWN_LDPC_EXTRA_OFDM_SYMBOL', 'VHT_KNOWN_BEAMFORMED', 'VHT_KNOWN_BANDWIDTH', 'VHT_KNOWN_GROUP_ID', 'VHT_KNOWN_PARTIAL_AID'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::VhtFlags [enumeration]
+    module.add_enum('VhtFlags', ['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'])
     ## seq-ts-header.h (module 'applications'): ns3::SeqTsHeader [class]
@@ -288,10 +294,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
     module.add_class('SocketFactory', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
@@ -302,6 +308,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -364,8 +372,14 @@
     module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue [class]
     module.add_class('DropTailQueue', import_from_module='ns.network', parent=root_module['ns3::Queue'])
+    ## dynamic-queue-limits.h (module 'network'): ns3::DynamicQueueLimits [class]
+    module.add_class('DynamicQueueLimits', import_from_module='ns.network', parent=root_module['ns3::QueueLimits'])
     ## 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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -480,6 +494,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -650,6 +666,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_addressUtils(module):
     root_module = module.get_root()
@@ -745,6 +764,7 @@
     register_Ns3PacketSocketTag_methods(root_module, root_module['ns3::PacketSocketTag'])
     register_Ns3PcapFileWrapper_methods(root_module, root_module['ns3::PcapFileWrapper'])
     register_Ns3Queue_methods(root_module, root_module['ns3::Queue'])
+    register_Ns3QueueLimits_methods(root_module, root_module['ns3::QueueLimits'])
     register_Ns3RadiotapHeader_methods(root_module, root_module['ns3::RadiotapHeader'])
     register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
     register_Ns3SeqTsHeader_methods(root_module, root_module['ns3::SeqTsHeader'])
@@ -767,12 +787,12 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -802,7 +822,10 @@
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3DropTailQueue_methods(root_module, root_module['ns3::DropTailQueue'])
+    register_Ns3DynamicQueueLimits_methods(root_module, root_module['ns3::DynamicQueueLimits'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -1296,6 +1319,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1863,6 +1891,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1876,6 +1909,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
@@ -3372,10 +3409,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3786,23 +3823,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3917,6 +3954,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -3943,10 +3985,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -3968,6 +4010,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -3983,6 +4029,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3UdpClientHelper_methods(root_module, cls):
@@ -3990,12 +4040,10 @@
     cls.add_constructor([param('ns3::UdpClientHelper const &', 'arg0')])
     ## udp-client-server-helper.h (module 'applications'): ns3::UdpClientHelper::UdpClientHelper() [constructor]
     cls.add_constructor([])
-    ## udp-client-server-helper.h (module 'applications'): ns3::UdpClientHelper::UdpClientHelper(ns3::Ipv4Address ip, uint16_t port) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address', 'ip'), param('uint16_t', 'port')])
-    ## udp-client-server-helper.h (module 'applications'): ns3::UdpClientHelper::UdpClientHelper(ns3::Ipv6Address ip, uint16_t port) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'ip'), param('uint16_t', 'port')])
     ## udp-client-server-helper.h (module 'applications'): ns3::UdpClientHelper::UdpClientHelper(ns3::Address ip, uint16_t port) [constructor]
     cls.add_constructor([param('ns3::Address', 'ip'), param('uint16_t', 'port')])
+    ## udp-client-server-helper.h (module 'applications'): ns3::UdpClientHelper::UdpClientHelper(ns3::Address addr) [constructor]
+    cls.add_constructor([param('ns3::Address', 'addr')])
     ## udp-client-server-helper.h (module 'applications'): ns3::ApplicationContainer ns3::UdpClientHelper::Install(ns3::NodeContainer c) [member function]
     cls.add_method('Install', 
                    'ns3::ApplicationContainer', 
@@ -4011,10 +4059,8 @@
     cls.add_constructor([param('ns3::UdpEchoClientHelper const &', 'arg0')])
     ## udp-echo-helper.h (module 'applications'): ns3::UdpEchoClientHelper::UdpEchoClientHelper(ns3::Address ip, uint16_t port) [constructor]
     cls.add_constructor([param('ns3::Address', 'ip'), param('uint16_t', 'port')])
-    ## udp-echo-helper.h (module 'applications'): ns3::UdpEchoClientHelper::UdpEchoClientHelper(ns3::Ipv4Address ip, uint16_t port) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address', 'ip'), param('uint16_t', 'port')])
-    ## udp-echo-helper.h (module 'applications'): ns3::UdpEchoClientHelper::UdpEchoClientHelper(ns3::Ipv6Address ip, uint16_t port) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'ip'), param('uint16_t', 'port')])
+    ## udp-echo-helper.h (module 'applications'): ns3::UdpEchoClientHelper::UdpEchoClientHelper(ns3::Address addr) [constructor]
+    cls.add_constructor([param('ns3::Address', 'addr')])
     ## udp-echo-helper.h (module 'applications'): ns3::ApplicationContainer ns3::UdpEchoClientHelper::Install(ns3::Ptr<ns3::Node> node) const [member function]
     cls.add_method('Install', 
                    'ns3::ApplicationContainer', 
@@ -4102,10 +4148,8 @@
     cls.add_constructor([])
     ## udp-client-server-helper.h (module 'applications'): ns3::UdpTraceClientHelper::UdpTraceClientHelper(ns3::Address ip, uint16_t port, std::string filename) [constructor]
     cls.add_constructor([param('ns3::Address', 'ip'), param('uint16_t', 'port'), param('std::string', 'filename')])
-    ## udp-client-server-helper.h (module 'applications'): ns3::UdpTraceClientHelper::UdpTraceClientHelper(ns3::Ipv4Address ip, uint16_t port, std::string filename) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address', 'ip'), param('uint16_t', 'port'), param('std::string', 'filename')])
-    ## udp-client-server-helper.h (module 'applications'): ns3::UdpTraceClientHelper::UdpTraceClientHelper(ns3::Ipv6Address ip, uint16_t port, std::string filename) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'ip'), param('uint16_t', 'port'), param('std::string', 'filename')])
+    ## udp-client-server-helper.h (module 'applications'): ns3::UdpTraceClientHelper::UdpTraceClientHelper(ns3::Address addr, std::string filename) [constructor]
+    cls.add_constructor([param('ns3::Address', 'addr'), param('std::string', 'filename')])
     ## udp-client-server-helper.h (module 'applications'): ns3::ApplicationContainer ns3::UdpTraceClientHelper::Install(ns3::NodeContainer c) [member function]
     cls.add_method('Install', 
                    'ns3::ApplicationContainer', 
@@ -4419,6 +4463,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -4718,10 +4767,19 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
@@ -4734,10 +4792,10 @@
     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]
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
@@ -4754,6 +4812,43 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3QueueLimits_methods(root_module, cls):
+    ## queue-limits.h (module 'network'): ns3::QueueLimits::QueueLimits() [constructor]
+    cls.add_constructor([])
+    ## queue-limits.h (module 'network'): ns3::QueueLimits::QueueLimits(ns3::QueueLimits const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueLimits const &', 'arg0')])
+    ## queue-limits.h (module 'network'): int32_t ns3::QueueLimits::Available() const [member function]
+    cls.add_method('Available', 
+                   'int32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## queue-limits.h (module 'network'): void ns3::QueueLimits::Completed(uint32_t count) [member function]
+    cls.add_method('Completed', 
+                   'void', 
+                   [param('uint32_t', 'count')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## queue-limits.h (module 'network'): static ns3::TypeId ns3::QueueLimits::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue-limits.h (module 'network'): void ns3::QueueLimits::Queued(uint32_t count) [member function]
+    cls.add_method('Queued', 
+                   'void', 
+                   [param('uint32_t', 'count')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## queue-limits.h (module 'network'): void ns3::QueueLimits::Reset() [member function]
+    cls.add_method('Reset', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3RadiotapHeader_methods(root_module, cls):
@@ -5404,6 +5499,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -5429,6 +5529,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -5577,6 +5682,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -5604,11 +5713,6 @@
                    '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', 
@@ -5671,52 +5775,6 @@
                    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_Ns3SocketFactory_methods(root_module, cls):
     ## socket-factory.h (module 'network'): ns3::SocketFactory::SocketFactory(ns3::SocketFactory const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SocketFactory const &', 'arg0')])
@@ -5918,6 +5976,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -6617,10 +6721,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## bulk-send-application.h (module 'applications'): void ns3::BulkSendApplication::SetMaxBytes(uint32_t maxBytes) [member function]
+    ## bulk-send-application.h (module 'applications'): void ns3::BulkSendApplication::SetMaxBytes(uint64_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
-                   [param('uint32_t', 'maxBytes')])
+                   [param('uint64_t', 'maxBytes')])
     ## bulk-send-application.h (module 'applications'): void ns3::BulkSendApplication::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -7005,6 +7109,43 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
+    ## drop-tail-queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::DropTailQueue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3DynamicQueueLimits_methods(root_module, cls):
+    ## dynamic-queue-limits.h (module 'network'): ns3::DynamicQueueLimits::DynamicQueueLimits(ns3::DynamicQueueLimits const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DynamicQueueLimits const &', 'arg0')])
+    ## dynamic-queue-limits.h (module 'network'): ns3::DynamicQueueLimits::DynamicQueueLimits() [constructor]
+    cls.add_constructor([])
+    ## dynamic-queue-limits.h (module 'network'): int32_t ns3::DynamicQueueLimits::Available() const [member function]
+    cls.add_method('Available', 
+                   'int32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dynamic-queue-limits.h (module 'network'): void ns3::DynamicQueueLimits::Completed(uint32_t count) [member function]
+    cls.add_method('Completed', 
+                   'void', 
+                   [param('uint32_t', 'count')], 
+                   is_virtual=True)
+    ## dynamic-queue-limits.h (module 'network'): static ns3::TypeId ns3::DynamicQueueLimits::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## dynamic-queue-limits.h (module 'network'): void ns3::DynamicQueueLimits::Queued(uint32_t count) [member function]
+    cls.add_method('Queued', 
+                   'void', 
+                   [param('uint32_t', 'count')], 
+                   is_virtual=True)
+    ## dynamic-queue-limits.h (module 'network'): void ns3::DynamicQueueLimits::Reset() [member function]
+    cls.add_method('Reset', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     return
 
 def register_Ns3EmpiricalRandomVariable_methods(root_module, cls):
@@ -7041,6 +7182,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -8059,16 +8264,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -8096,35 +8316,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -8376,10 +8591,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## onoff-application.h (module 'applications'): void ns3::OnOffApplication::SetMaxBytes(uint32_t maxBytes) [member function]
+    ## onoff-application.h (module 'applications'): void ns3::OnOffApplication::SetMaxBytes(uint64_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
-                   [param('uint32_t', 'maxBytes')])
+                   [param('uint64_t', 'maxBytes')])
     ## onoff-application.h (module 'applications'): void ns3::OnOffApplication::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -8610,9 +8825,9 @@
                    'ns3::Ptr< ns3::Socket >', 
                    [], 
                    is_const=True)
-    ## packet-sink.h (module 'applications'): uint32_t ns3::PacketSink::GetTotalRx() const [member function]
+    ## packet-sink.h (module 'applications'): uint64_t ns3::PacketSink::GetTotalRx() const [member function]
     cls.add_method('GetTotalRx', 
-                   'uint32_t', 
+                   'uint64_t', 
                    [], 
                    is_const=True)
     ## packet-sink.h (module 'applications'): static ns3::TypeId ns3::PacketSink::GetTypeId() [member function]
@@ -8793,6 +9008,11 @@
     cls.add_constructor([param('ns3::PacketSocketClient const &', 'arg0')])
     ## packet-socket-client.h (module 'network'): ns3::PacketSocketClient::PacketSocketClient() [constructor]
     cls.add_constructor([])
+    ## packet-socket-client.h (module 'network'): uint8_t ns3::PacketSocketClient::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## packet-socket-client.h (module 'network'): static ns3::TypeId ns3::PacketSocketClient::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -9936,6 +10156,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
@@ -10320,18 +10545,14 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## udp-client.h (module 'applications'): void ns3::UdpClient::SetRemote(ns3::Ipv4Address ip, uint16_t port) [member function]
-    cls.add_method('SetRemote', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'ip'), param('uint16_t', 'port')])
-    ## udp-client.h (module 'applications'): void ns3::UdpClient::SetRemote(ns3::Ipv6Address ip, uint16_t port) [member function]
-    cls.add_method('SetRemote', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'ip'), param('uint16_t', 'port')])
     ## udp-client.h (module 'applications'): void ns3::UdpClient::SetRemote(ns3::Address ip, uint16_t port) [member function]
     cls.add_method('SetRemote', 
                    'void', 
                    [param('ns3::Address', 'ip'), param('uint16_t', 'port')])
+    ## udp-client.h (module 'applications'): void ns3::UdpClient::SetRemote(ns3::Address addr) [member function]
+    cls.add_method('SetRemote', 
+                   'void', 
+                   [param('ns3::Address', 'addr')])
     ## udp-client.h (module 'applications'): void ns3::UdpClient::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -10380,18 +10601,14 @@
     cls.add_method('SetFill', 
                    'void', 
                    [param('uint8_t *', 'fill'), param('uint32_t', 'fillSize'), param('uint32_t', 'dataSize')])
-    ## udp-echo-client.h (module 'applications'): void ns3::UdpEchoClient::SetRemote(ns3::Ipv4Address ip, uint16_t port) [member function]
-    cls.add_method('SetRemote', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'ip'), param('uint16_t', 'port')])
-    ## udp-echo-client.h (module 'applications'): void ns3::UdpEchoClient::SetRemote(ns3::Ipv6Address ip, uint16_t port) [member function]
-    cls.add_method('SetRemote', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'ip'), param('uint16_t', 'port')])
     ## udp-echo-client.h (module 'applications'): void ns3::UdpEchoClient::SetRemote(ns3::Address ip, uint16_t port) [member function]
     cls.add_method('SetRemote', 
                    'void', 
                    [param('ns3::Address', 'ip'), param('uint16_t', 'port')])
+    ## udp-echo-client.h (module 'applications'): void ns3::UdpEchoClient::SetRemote(ns3::Address addr) [member function]
+    cls.add_method('SetRemote', 
+                   'void', 
+                   [param('ns3::Address', 'addr')])
     ## udp-echo-client.h (module 'applications'): void ns3::UdpEchoClient::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -10451,9 +10668,9 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
-    ## udp-server.h (module 'applications'): uint32_t ns3::UdpServer::GetReceived() const [member function]
+    ## udp-server.h (module 'applications'): uint64_t ns3::UdpServer::GetReceived() const [member function]
     cls.add_method('GetReceived', 
-                   'uint32_t', 
+                   'uint64_t', 
                    [], 
                    is_const=True)
     ## udp-server.h (module 'applications'): static ns3::TypeId ns3::UdpServer::GetTypeId() [member function]
@@ -10502,18 +10719,14 @@
     cls.add_method('SetMaxPacketSize', 
                    'void', 
                    [param('uint16_t', 'maxPacketSize')])
-    ## udp-trace-client.h (module 'applications'): void ns3::UdpTraceClient::SetRemote(ns3::Ipv4Address ip, uint16_t port) [member function]
-    cls.add_method('SetRemote', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'ip'), param('uint16_t', 'port')])
-    ## udp-trace-client.h (module 'applications'): void ns3::UdpTraceClient::SetRemote(ns3::Ipv6Address ip, uint16_t port) [member function]
-    cls.add_method('SetRemote', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'ip'), param('uint16_t', 'port')])
     ## udp-trace-client.h (module 'applications'): void ns3::UdpTraceClient::SetRemote(ns3::Address ip, uint16_t port) [member function]
     cls.add_method('SetRemote', 
                    'void', 
                    [param('ns3::Address', 'ip'), param('uint16_t', 'port')])
+    ## udp-trace-client.h (module 'applications'): void ns3::UdpTraceClient::SetRemote(ns3::Address addr) [member function]
+    cls.add_method('SetRemote', 
+                   'void', 
+                   [param('ns3::Address', 'addr')])
     ## udp-trace-client.h (module 'applications'): void ns3::UdpTraceClient::SetTraceFile(std::string filename) [member function]
     cls.add_method('SetTraceFile', 
                    'void', 
diff -Naur ns-3.25/src/applications/helper/udp-client-server-helper.cc ns-3.26/src/applications/helper/udp-client-server-helper.cc
--- ns-3.25/src/applications/helper/udp-client-server-helper.cc	2016-10-03 20:57:08.370246677 -0700
+++ ns-3.26/src/applications/helper/udp-client-server-helper.cc	2016-10-03 19:49:01.670387482 -0700
@@ -75,18 +75,10 @@
   SetAttribute ("RemotePort", UintegerValue (port));
 }
 
-UdpClientHelper::UdpClientHelper (Ipv4Address address, uint16_t port)
+UdpClientHelper::UdpClientHelper (Address address)
 {
   m_factory.SetTypeId (UdpClient::GetTypeId ());
-  SetAttribute ("RemoteAddress", AddressValue (Address(address)));
-  SetAttribute ("RemotePort", UintegerValue (port));
-}
-
-UdpClientHelper::UdpClientHelper (Ipv6Address address, uint16_t port)
-{
-  m_factory.SetTypeId (UdpClient::GetTypeId ());
-  SetAttribute ("RemoteAddress", AddressValue (Address(address)));
-  SetAttribute ("RemotePort", UintegerValue (port));
+  SetAttribute ("RemoteAddress", AddressValue (address));
 }
 
 void
@@ -121,19 +113,10 @@
   SetAttribute ("TraceFilename", StringValue (filename));
 }
 
-UdpTraceClientHelper::UdpTraceClientHelper (Ipv4Address address, uint16_t port, std::string filename)
+UdpTraceClientHelper::UdpTraceClientHelper (Address address, std::string filename)
 {
   m_factory.SetTypeId (UdpTraceClient::GetTypeId ());
-  SetAttribute ("RemoteAddress", AddressValue (Address (address)));
-  SetAttribute ("RemotePort", UintegerValue (port));
-  SetAttribute ("TraceFilename", StringValue (filename));
-}
-
-UdpTraceClientHelper::UdpTraceClientHelper (Ipv6Address address, uint16_t port, std::string filename)
-{
-  m_factory.SetTypeId (UdpTraceClient::GetTypeId ());
-  SetAttribute ("RemoteAddress", AddressValue (Address (address)));
-  SetAttribute ("RemotePort", UintegerValue (port));
+  SetAttribute ("RemoteAddress", AddressValue (address));
   SetAttribute ("TraceFilename", StringValue (filename));
 }
 
diff -Naur ns-3.25/src/applications/helper/udp-client-server-helper.h ns-3.26/src/applications/helper/udp-client-server-helper.h
--- ns-3.25/src/applications/helper/udp-client-server-helper.h	2016-10-03 20:57:08.370246677 -0700
+++ ns-3.26/src/applications/helper/udp-client-server-helper.h	2016-10-03 19:49:01.670387482 -0700
@@ -103,31 +103,25 @@
 
   /**
    *  Create UdpClientHelper which will make life easier for people trying
-   * to set up simulations with udp-client-server.
-   *
-   * \param ip The IPv4 address of the remote UDP server
-   * \param port The port number of the remote UDP server
-   */
-
-  UdpClientHelper (Ipv4Address ip, uint16_t port);
-  /**
-   *  Create UdpClientHelper which will make life easier for people trying
-   * to set up simulations with udp-client-server.
+   * to set up simulations with udp-client-server. Use this variant with
+   * addresses that do not include a port value (e.g., Ipv4Address and
+   * Ipv6Address).
    *
-   * \param ip The IPv6 address of the remote UDP server
+   * \param ip The IP address of the remote UDP server
    * \param port The port number of the remote UDP server
    */
 
-  UdpClientHelper (Ipv6Address ip, uint16_t port);
+  UdpClientHelper (Address ip, uint16_t port);
   /**
    *  Create UdpClientHelper which will make life easier for people trying
-   * to set up simulations with udp-client-server.
+   * to set up simulations with udp-client-server. Use this variant with
+   * addresses that do include a port value (e.g., InetSocketAddress and
+   * Inet6SocketAddress).
    *
-   * \param ip The IP address of the remote UDP server
-   * \param port The port number of the remote UDP server
+   * \param addr The address of the remote UDP server
    */
 
-  UdpClientHelper (Address ip, uint16_t port);
+  UdpClientHelper (Address addr);
 
   /**
    * Record an attribute to be set in each Application after it is is created.
@@ -173,7 +167,9 @@
 
   /**
    * Create UdpTraceClientHelper which will make life easier for people trying
-   * to set up simulations with udp-client-server.
+   * to set up simulations with udp-client-server. Use this variant with
+   * addresses that do not include a port value (e.g., Ipv4Address and
+   * Ipv6Address).
    *
    * \param ip The IP address of the remote UDP server
    * \param port The port number of the remote UDP server
@@ -182,22 +178,14 @@
   UdpTraceClientHelper (Address ip, uint16_t port, std::string filename);
   /**
    * Create UdpTraceClientHelper which will make life easier for people trying
-   * to set up simulations with udp-client-server.
-   *
-   * \param ip The IPv4 address of the remote UDP server
-   * \param port The port number of the remote UDP server
-   * \param filename the file from which packet traces will be loaded
-   */
-  UdpTraceClientHelper (Ipv4Address ip, uint16_t port, std::string filename);
-  /**
-   * Create UdpTraceClientHelper which will make life easier for people trying
-   * to set up simulations with udp-client-server.
+   * to set up simulations with udp-client-server. Use this variant with
+   * addresses that do include a port value (e.g., InetSocketAddress and
+   * Inet6SocketAddress).
    *
-   * \param ip The IPv6 address of the remote UDP server
-   * \param port The port number of the remote UDP server
+   * \param addr The address of the remote UDP server
    * \param filename the file from which packet traces will be loaded
    */
-  UdpTraceClientHelper (Ipv6Address ip, uint16_t port, std::string filename);
+  UdpTraceClientHelper (Address addr, std::string filename);
 
   /**
     * Record an attribute to be set in each Application after it is is created.
diff -Naur ns-3.25/src/applications/helper/udp-echo-helper.cc ns-3.26/src/applications/helper/udp-echo-helper.cc
--- ns-3.25/src/applications/helper/udp-echo-helper.cc	2016-10-03 20:57:08.370246677 -0700
+++ ns-3.26/src/applications/helper/udp-echo-helper.cc	2016-10-03 19:49:01.670387482 -0700
@@ -80,18 +80,10 @@
   SetAttribute ("RemotePort", UintegerValue (port));
 }
 
-UdpEchoClientHelper::UdpEchoClientHelper (Ipv4Address address, uint16_t port)
+UdpEchoClientHelper::UdpEchoClientHelper (Address address)
 {
   m_factory.SetTypeId (UdpEchoClient::GetTypeId ());
-  SetAttribute ("RemoteAddress", AddressValue (Address(address)));
-  SetAttribute ("RemotePort", UintegerValue (port));
-}
-
-UdpEchoClientHelper::UdpEchoClientHelper (Ipv6Address address, uint16_t port)
-{
-  m_factory.SetTypeId (UdpEchoClient::GetTypeId ());
-  SetAttribute ("RemoteAddress", AddressValue (Address(address)));
-  SetAttribute ("RemotePort", UintegerValue (port));
+  SetAttribute ("RemoteAddress", AddressValue (address));
 }
 
 void 
diff -Naur ns-3.25/src/applications/helper/udp-echo-helper.h ns-3.26/src/applications/helper/udp-echo-helper.h
--- ns-3.25/src/applications/helper/udp-echo-helper.h	2016-10-03 20:57:08.371246669 -0700
+++ ns-3.26/src/applications/helper/udp-echo-helper.h	2016-10-03 19:49:01.671387474 -0700
@@ -108,7 +108,8 @@
 public:
   /**
    * Create UdpEchoClientHelper which will make life easier for people trying
-   * to set up simulations with echos.
+   * to set up simulations with echos. Use this variant with addresses that do
+   * not include a port value (e.g., Ipv4Address and Ipv6Address).
    *
    * \param ip The IP address of the remote udp echo server
    * \param port The port number of the remote udp echo server
@@ -116,20 +117,12 @@
   UdpEchoClientHelper (Address ip, uint16_t port);
   /**
    * Create UdpEchoClientHelper which will make life easier for people trying
-   * to set up simulations with echos.
+   * to set up simulations with echos. Use this variant with addresses that do
+   * include a port value (e.g., InetSocketAddress and Inet6SocketAddress).
    *
-   * \param ip The IPv4 address of the remote udp echo server
-   * \param port The port number of the remote udp echo server
-   */
-  UdpEchoClientHelper (Ipv4Address ip, uint16_t port);
-  /**
-   * Create UdpEchoClientHelper which will make life easier for people trying
-   * to set up simulations with echos.
-   *
-   * \param ip The IPv6 address of the remote udp echo server
-   * \param port The port number of the remote udp echo server
+   * \param addr The address of the remote udp echo server
    */
-  UdpEchoClientHelper (Ipv6Address ip, uint16_t port);
+  UdpEchoClientHelper (Address addr);
 
   /**
    * Record an attribute to be set in each Application after it is is created.
diff -Naur ns-3.25/src/applications/model/bulk-send-application.cc ns-3.26/src/applications/model/bulk-send-application.cc
--- ns-3.25/src/applications/model/bulk-send-application.cc	2016-10-03 20:57:08.372246662 -0700
+++ ns-3.26/src/applications/model/bulk-send-application.cc	2016-10-03 19:49:01.672387467 -0700
@@ -59,7 +59,7 @@
                    "that there is no limit.",
                    UintegerValue (0),
                    MakeUintegerAccessor (&BulkSendApplication::m_maxBytes),
-                   MakeUintegerChecker<uint32_t> ())
+                   MakeUintegerChecker<uint64_t> ())
     .AddAttribute ("Protocol", "The type of protocol to use.",
                    TypeIdValue (TcpSocketFactory::GetTypeId ()),
                    MakeTypeIdAccessor (&BulkSendApplication::m_tid),
@@ -86,7 +86,7 @@
 }
 
 void
-BulkSendApplication::SetMaxBytes (uint32_t maxBytes)
+BulkSendApplication::SetMaxBytes (uint64_t maxBytes)
 {
   NS_LOG_FUNCTION (this << maxBytes);
   m_maxBytes = maxBytes;
@@ -175,12 +175,17 @@
 
   while (m_maxBytes == 0 || m_totBytes < m_maxBytes)
     { // Time to send more
-      uint32_t toSend = m_sendSize;
+
+      // uint64_t to allow the comparison later.
+      // the result is in a uint32_t range anyway, because
+      // m_sendSize is uint32_t.
+      uint64_t toSend = m_sendSize;
       // Make sure we don't send too many
       if (m_maxBytes > 0)
         {
-          toSend = std::min (m_sendSize, m_maxBytes - m_totBytes);
+          toSend = std::min (toSend, m_maxBytes - m_totBytes);
         }
+
       NS_LOG_LOGIC ("sending packet at " << Simulator::Now ());
       Ptr<Packet> packet = Create<Packet> (toSend);
       m_txTrace (packet);
diff -Naur ns-3.25/src/applications/model/bulk-send-application.h ns-3.26/src/applications/model/bulk-send-application.h
--- ns-3.25/src/applications/model/bulk-send-application.h	2016-10-03 20:57:08.372246662 -0700
+++ ns-3.26/src/applications/model/bulk-send-application.h	2016-10-03 19:49:01.672387467 -0700
@@ -91,7 +91,7 @@
    *
    * \param maxBytes the upper bound of bytes to send
    */
-  void SetMaxBytes (uint32_t maxBytes);
+  void SetMaxBytes (uint64_t maxBytes);
 
   /**
    * \brief Get the socket this application is attached to.
@@ -115,8 +115,8 @@
   Address         m_peer;         //!< Peer address
   bool            m_connected;    //!< True if connected
   uint32_t        m_sendSize;     //!< Size of data to send each time
-  uint32_t        m_maxBytes;     //!< Limit total number of bytes sent
-  uint32_t        m_totBytes;     //!< Total bytes sent so far
+  uint64_t        m_maxBytes;     //!< Limit total number of bytes sent
+  uint64_t        m_totBytes;     //!< Total bytes sent so far
   TypeId          m_tid;          //!< The type of protocol to use.
 
   /// Traced Callback: sent packets
diff -Naur ns-3.25/src/applications/model/onoff-application.cc ns-3.26/src/applications/model/onoff-application.cc
--- ns-3.25/src/applications/model/onoff-application.cc	2016-10-03 20:57:08.373246654 -0700
+++ ns-3.26/src/applications/model/onoff-application.cc	2016-10-03 19:49:01.673387459 -0700
@@ -81,7 +81,7 @@
                    "that there is no limit.",
                    UintegerValue (0),
                    MakeUintegerAccessor (&OnOffApplication::m_maxBytes),
-                   MakeUintegerChecker<uint32_t> ())
+                   MakeUintegerChecker<uint64_t> ())
     .AddAttribute ("Protocol", "The type of protocol to use.",
                    TypeIdValue (UdpSocketFactory::GetTypeId ()),
                    MakeTypeIdAccessor (&OnOffApplication::m_tid),
@@ -110,7 +110,7 @@
 }
 
 void 
-OnOffApplication::SetMaxBytes (uint32_t maxBytes)
+OnOffApplication::SetMaxBytes (uint64_t maxBytes)
 {
   NS_LOG_FUNCTION (this << maxBytes);
   m_maxBytes = maxBytes;
diff -Naur ns-3.25/src/applications/model/onoff-application.h ns-3.26/src/applications/model/onoff-application.h
--- ns-3.25/src/applications/model/onoff-application.h	2016-10-03 20:57:08.373246654 -0700
+++ ns-3.26/src/applications/model/onoff-application.h	2016-10-03 19:49:01.673387459 -0700
@@ -104,7 +104,7 @@
    *
    * \param maxBytes the total number of bytes to send
    */
-  void SetMaxBytes (uint32_t maxBytes);
+  void SetMaxBytes (uint64_t maxBytes);
 
   /**
    * \brief Return a pointer to associated socket.
@@ -158,8 +158,8 @@
   uint32_t        m_pktSize;      //!< Size of packets
   uint32_t        m_residualBits; //!< Number of generated, but not sent, bits
   Time            m_lastStartTime; //!< Time last packet sent
-  uint32_t        m_maxBytes;     //!< Limit total number of bytes sent
-  uint32_t        m_totBytes;     //!< Total bytes sent so far
+  uint64_t        m_maxBytes;     //!< Limit total number of bytes sent
+  uint64_t        m_totBytes;     //!< Total bytes sent so far
   EventId         m_startStopEvent;     //!< Event id for next start or stop event
   EventId         m_sendEvent;    //!< Event id of pending "send packet" event
   TypeId          m_tid;          //!< Type of the socket used
diff -Naur ns-3.25/src/applications/model/packet-loss-counter.h ns-3.26/src/applications/model/packet-loss-counter.h
--- ns-3.25/src/applications/model/packet-loss-counter.h	2016-10-03 20:57:08.374246646 -0700
+++ ns-3.26/src/applications/model/packet-loss-counter.h	2016-10-03 19:49:01.674387452 -0700
@@ -35,7 +35,7 @@
 
 /**
  * \ingroup udpclientserver
- * \class PacketLossCounter
+ *
  * \brief A class to count the number of lost packets.
  *
  * This class records the packet lost in a client/server transmission
diff -Naur ns-3.25/src/applications/model/packet-sink.cc ns-3.26/src/applications/model/packet-sink.cc
--- ns-3.25/src/applications/model/packet-sink.cc	2016-10-03 20:57:08.374246646 -0700
+++ ns-3.26/src/applications/model/packet-sink.cc	2016-10-03 19:49:01.674387452 -0700
@@ -75,7 +75,7 @@
   NS_LOG_FUNCTION (this);
 }
 
-uint32_t PacketSink::GetTotalRx () const
+uint64_t PacketSink::GetTotalRx () const
 {
   NS_LOG_FUNCTION (this);
   return m_totalRx;
diff -Naur ns-3.25/src/applications/model/packet-sink.h ns-3.26/src/applications/model/packet-sink.h
--- ns-3.25/src/applications/model/packet-sink.h	2016-10-03 20:57:08.375246638 -0700
+++ ns-3.26/src/applications/model/packet-sink.h	2016-10-03 19:49:01.675387444 -0700
@@ -80,7 +80,7 @@
   /**
    * \return the total bytes received in this sink app
    */
-  uint32_t GetTotalRx () const;
+  uint64_t GetTotalRx () const;
 
   /**
    * \return pointer to listening socket
@@ -127,7 +127,7 @@
   std::list<Ptr<Socket> > m_socketList; //!< the accepted sockets
 
   Address         m_local;        //!< Local address to bind to
-  uint32_t        m_totalRx;      //!< Total bytes received
+  uint64_t        m_totalRx;      //!< Total bytes received
   TypeId          m_tid;          //!< Protocol TypeId
 
   /// Traced Callback: received packets, source address.
diff -Naur ns-3.25/src/applications/model/seq-ts-header.h ns-3.26/src/applications/model/seq-ts-header.h
--- ns-3.25/src/applications/model/seq-ts-header.h	2016-10-03 20:57:08.375246638 -0700
+++ ns-3.26/src/applications/model/seq-ts-header.h	2016-10-03 19:49:01.675387444 -0700
@@ -27,7 +27,7 @@
 namespace ns3 {
 /**
  * \ingroup udpclientserver
- * \class SeqTsHeader
+ *
  * \brief Packet header for UDP client/server application.
  *
  * The header is made of a 32bits sequence number followed by
diff -Naur ns-3.25/src/applications/model/udp-client.cc ns-3.26/src/applications/model/udp-client.cc
--- ns-3.25/src/applications/model/udp-client.cc	2016-10-03 20:57:08.376246630 -0700
+++ ns-3.26/src/applications/model/udp-client.cc	2016-10-03 19:49:01.676387437 -0700
@@ -87,27 +87,18 @@
 }
 
 void
-UdpClient::SetRemote (Ipv4Address ip, uint16_t port)
-{
-  NS_LOG_FUNCTION (this << ip << port);
-  m_peerAddress = Address(ip);
-  m_peerPort = port;
-}
-
-void
-UdpClient::SetRemote (Ipv6Address ip, uint16_t port)
+UdpClient::SetRemote (Address ip, uint16_t port)
 {
   NS_LOG_FUNCTION (this << ip << port);
-  m_peerAddress = Address(ip);
+  m_peerAddress = ip;
   m_peerPort = port;
 }
 
 void
-UdpClient::SetRemote (Address ip, uint16_t port)
+UdpClient::SetRemote (Address addr)
 {
-  NS_LOG_FUNCTION (this << ip << port);
-  m_peerAddress = ip;
-  m_peerPort = port;
+  NS_LOG_FUNCTION (this << addr);
+  m_peerAddress = addr;
 }
 
 void
@@ -136,6 +127,20 @@
           m_socket->Bind6 ();
           m_socket->Connect (Inet6SocketAddress (Ipv6Address::ConvertFrom(m_peerAddress), m_peerPort));
         }
+      else if (InetSocketAddress::IsMatchingType (m_peerAddress) == true)
+        {
+          m_socket->Bind ();
+          m_socket->Connect (m_peerAddress);
+        }
+      else if (Inet6SocketAddress::IsMatchingType (m_peerAddress) == true)
+        {
+          m_socket->Bind6 ();
+          m_socket->Connect (m_peerAddress);
+        }
+      else
+        {
+          NS_ASSERT_MSG (false, "Incompatible address type: " << m_peerAddress);
+        }
     }
 
   m_socket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket> > ());
diff -Naur ns-3.25/src/applications/model/udp-client.h ns-3.26/src/applications/model/udp-client.h
--- ns-3.25/src/applications/model/udp-client.h	2016-10-03 20:57:08.376246630 -0700
+++ ns-3.26/src/applications/model/udp-client.h	2016-10-03 19:49:01.676387437 -0700
@@ -35,7 +35,7 @@
 
 /**
  * \ingroup udpclientserver
- * \class UdpClient
+ *
  * \brief A Udp client. Sends UDP packet carrying sequence number and time stamp
  *  in their payloads
  *
@@ -55,22 +55,15 @@
 
   /**
    * \brief set the remote address and port
-   * \param ip remote IPv4 address
-   * \param port remote port
-   */
-  void SetRemote (Ipv4Address ip, uint16_t port);
-  /**
-   * \brief set the remote address and port
-   * \param ip remote IPv6 address
-   * \param port remote port
-   */
-  void SetRemote (Ipv6Address ip, uint16_t port);
-  /**
-   * \brief set the remote address and port
    * \param ip remote IP address
    * \param port remote port
    */
   void SetRemote (Address ip, uint16_t port);
+  /**
+   * \brief set the remote address
+   * \param addr remote address
+   */
+  void SetRemote (Address addr);
 
 protected:
   virtual void DoDispose (void);
diff -Naur ns-3.25/src/applications/model/udp-echo-client.cc ns-3.26/src/applications/model/udp-echo-client.cc
--- ns-3.25/src/applications/model/udp-echo-client.cc	2016-10-03 20:57:08.377246623 -0700
+++ ns-3.26/src/applications/model/udp-echo-client.cc	2016-10-03 19:49:01.677387429 -0700
@@ -103,19 +103,10 @@
 }
 
 void 
-UdpEchoClient::SetRemote (Ipv4Address ip, uint16_t port)
+UdpEchoClient::SetRemote (Address addr)
 {
-  NS_LOG_FUNCTION (this << ip << port);
-  m_peerAddress = Address (ip);
-  m_peerPort = port;
-}
-
-void 
-UdpEchoClient::SetRemote (Ipv6Address ip, uint16_t port)
-{
-  NS_LOG_FUNCTION (this << ip << port);
-  m_peerAddress = Address (ip);
-  m_peerPort = port;
+  NS_LOG_FUNCTION (this << addr);
+  m_peerAddress = addr;
 }
 
 void
@@ -144,6 +135,20 @@
           m_socket->Bind6();
           m_socket->Connect (Inet6SocketAddress (Ipv6Address::ConvertFrom(m_peerAddress), m_peerPort));
         }
+      else if (InetSocketAddress::IsMatchingType (m_peerAddress) == true)
+        {
+          m_socket->Bind ();
+          m_socket->Connect (m_peerAddress);
+        }
+      else if (Inet6SocketAddress::IsMatchingType (m_peerAddress) == true)
+        {
+          m_socket->Bind6 ();
+          m_socket->Connect (m_peerAddress);
+        }
+      else
+        {
+          NS_ASSERT_MSG (false, "Incompatible address type: " << m_peerAddress);
+        }
     }
 
   m_socket->SetRecvCallback (MakeCallback (&UdpEchoClient::HandleRead, this));
@@ -324,6 +329,16 @@
       NS_LOG_INFO ("At time " << Simulator::Now ().GetSeconds () << "s client sent " << m_size << " bytes to " <<
                    Ipv6Address::ConvertFrom (m_peerAddress) << " port " << m_peerPort);
     }
+  else if (InetSocketAddress::IsMatchingType (m_peerAddress))
+    {
+      NS_LOG_INFO ("At time " << Simulator::Now ().GetSeconds () << "s client sent " << m_size << " bytes to " <<
+                   InetSocketAddress::ConvertFrom (m_peerAddress).GetIpv4 () << " port " << InetSocketAddress::ConvertFrom (m_peerAddress).GetPort ());
+    }
+  else if (Inet6SocketAddress::IsMatchingType (m_peerAddress))
+    {
+      NS_LOG_INFO ("At time " << Simulator::Now ().GetSeconds () << "s client sent " << m_size << " bytes to " <<
+                   Inet6SocketAddress::ConvertFrom (m_peerAddress).GetIpv6 () << " port " << Inet6SocketAddress::ConvertFrom (m_peerAddress).GetPort ());
+    }
 
   if (m_sent < m_count) 
     {
diff -Naur ns-3.25/src/applications/model/udp-echo-client.h ns-3.26/src/applications/model/udp-echo-client.h
--- ns-3.25/src/applications/model/udp-echo-client.h	2016-10-03 20:57:08.377246623 -0700
+++ ns-3.26/src/applications/model/udp-echo-client.h	2016-10-03 19:49:01.677387429 -0700
@@ -51,22 +51,15 @@
 
   /**
    * \brief set the remote address and port
-   * \param ip remote IPv4 address
-   * \param port remote port
-   */
-  void SetRemote (Ipv4Address ip, uint16_t port);
-  /**
-   * \brief set the remote address and port
-   * \param ip remote IPv6 address
-   * \param port remote port
-   */
-  void SetRemote (Ipv6Address ip, uint16_t port);
-  /**
-   * \brief set the remote address and port
    * \param ip remote IP address
    * \param port remote port
    */
   void SetRemote (Address ip, uint16_t port);
+  /**
+   * \brief set the remote address
+   * \param addr remote address
+   */
+  void SetRemote (Address addr);
 
   /**
    * Set the data size of the packet (the number of bytes that are sent as data
diff -Naur ns-3.25/src/applications/model/udp-server.cc ns-3.26/src/applications/model/udp-server.cc
--- ns-3.25/src/applications/model/udp-server.cc	2016-10-03 20:57:08.378246615 -0700
+++ ns-3.26/src/applications/model/udp-server.cc	2016-10-03 19:49:01.678387422 -0700
@@ -96,7 +96,7 @@
   return m_lossCounter.GetLost ();
 }
 
-uint32_t
+uint64_t
 UdpServer::GetReceived (void) const
 {
   NS_LOG_FUNCTION (this);
diff -Naur ns-3.25/src/applications/model/udp-server.h ns-3.26/src/applications/model/udp-server.h
--- ns-3.25/src/applications/model/udp-server.h	2016-10-03 20:57:08.378246615 -0700
+++ ns-3.26/src/applications/model/udp-server.h	2016-10-03 19:49:01.678387422 -0700
@@ -36,7 +36,7 @@
 
 /**
  * \ingroup udpclientserver
- * \class UdpServer
+ *
  * \brief A UDP server, receives UDP packets from a remote host.
  *
  * UDP packets carry a 32bits sequence number followed by a 64bits time
@@ -63,7 +63,7 @@
    * \brief Returns the number of received packets
    * \return the number of received packets
    */
-  uint32_t GetReceived (void) const;
+  uint64_t GetReceived (void) const;
 
   /**
    * \brief Returns the size of the window used for checking loss.
@@ -98,7 +98,7 @@
   uint16_t m_port; //!< Port on which we listen for incoming packets.
   Ptr<Socket> m_socket; //!< IPv4 Socket
   Ptr<Socket> m_socket6; //!< IPv6 Socket
-  uint32_t m_received; //!< Number of received packets
+  uint64_t m_received; //!< Number of received packets
   PacketLossCounter m_lossCounter; //!< Lost packet counter
 };
 
diff -Naur ns-3.25/src/applications/model/udp-trace-client.cc ns-3.26/src/applications/model/udp-trace-client.cc
--- ns-3.25/src/applications/model/udp-trace-client.cc	2016-10-03 20:57:08.379246607 -0700
+++ ns-3.26/src/applications/model/udp-trace-client.cc	2016-10-03 19:49:01.679387414 -0700
@@ -131,21 +131,11 @@
 }
 
 void
-UdpTraceClient::SetRemote (Ipv4Address ip, uint16_t port)
+UdpTraceClient::SetRemote (Address addr)
 {
-  NS_LOG_FUNCTION (this << ip << port);
+  NS_LOG_FUNCTION (this << addr);
   m_entries.clear ();
-  m_peerAddress = Address (ip);
-  m_peerPort = port;
-}
-
-void
-UdpTraceClient::SetRemote (Ipv6Address ip, uint16_t port)
-{
-  NS_LOG_FUNCTION (this << ip << port);
-  m_entries.clear ();
-  m_peerAddress = Address (ip);
-  m_peerPort = port;
+  m_peerAddress = addr;
 }
 
 void
@@ -260,6 +250,20 @@
           m_socket->Bind6 ();
           m_socket->Connect (Inet6SocketAddress (Ipv6Address::ConvertFrom (m_peerAddress), m_peerPort));
         }
+      else if (InetSocketAddress::IsMatchingType (m_peerAddress) == true)
+        {
+          m_socket->Bind ();
+          m_socket->Connect (m_peerAddress);
+        }
+      else if (Inet6SocketAddress::IsMatchingType (m_peerAddress) == true)
+        {
+          m_socket->Bind6 ();
+          m_socket->Connect (m_peerAddress);
+        }
+      else
+        {
+          NS_ASSERT_MSG (false, "Incompatible address type: " << m_peerAddress);
+        }
     }
   m_socket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket> > ());
   m_socket->SetAllowBroadcast (true);
diff -Naur ns-3.25/src/applications/model/udp-trace-client.h ns-3.26/src/applications/model/udp-trace-client.h
--- ns-3.25/src/applications/model/udp-trace-client.h	2016-10-03 20:57:08.379246607 -0700
+++ ns-3.26/src/applications/model/udp-trace-client.h	2016-10-03 19:49:01.679387414 -0700
@@ -35,7 +35,7 @@
 
 /**
  * \ingroup udpclientserver
- * \class UdpTraceClient
+ *
  * \brief A trace based streamer
  *
  * Sends UDP packets based on a trace file of an MPEG4 stream
@@ -78,22 +78,15 @@
 
   /**
    * \brief set the remote address and port
-   * \param ip remote IPv4 address
-   * \param port remote port
-   */
-  void SetRemote (Ipv4Address ip, uint16_t port);
-  /**
-   * \brief set the remote address and port
-   * \param ip remote IPv6 address
-   * \param port remote port
-   */
-  void SetRemote (Ipv6Address ip, uint16_t port);
-  /**
-   * \brief set the remote address and port
    * \param ip remote IP address
    * \param port remote port
    */
   void SetRemote (Address ip, uint16_t port);
+  /**
+   * \brief set the remote address
+   * \param addr remote address
+   */
+  void SetRemote (Address addr);
 
   /**
    * \brief Set the trace file to be used by the application
diff -Naur ns-3.25/src/bridge/bindings/modulegen__gcc_ILP32.py ns-3.26/src/bridge/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/bridge/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.383246576 -0700
+++ ns-3.26/src/bridge/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.683387385 -0700
@@ -68,6 +68,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -120,6 +122,10 @@
     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'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -156,6 +162,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -273,6 +281,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -1234,23 +1244,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1365,6 +1375,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -1386,10 +1401,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -1411,6 +1426,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -1426,6 +1445,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -1532,6 +1555,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -2064,6 +2092,70 @@
                    is_static=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -2423,16 +2515,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -2460,35 +2567,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -2558,6 +2660,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/bridge/bindings/modulegen__gcc_LP64.py ns-3.26/src/bridge/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/bridge/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.385246561 -0700
+++ ns-3.26/src/bridge/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.686387362 -0700
@@ -68,6 +68,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -120,6 +122,10 @@
     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'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -156,6 +162,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -273,6 +281,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -1234,23 +1244,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1365,6 +1375,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -1386,10 +1401,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -1411,6 +1426,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -1426,6 +1445,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -1532,6 +1555,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -2064,6 +2092,70 @@
                    is_static=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -2423,16 +2515,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -2460,35 +2567,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -2558,6 +2660,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/buildings/bindings/modulegen__gcc_ILP32.py ns-3.26/src/buildings/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/buildings/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.400246444 -0700
+++ ns-3.26/src/buildings/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.701387251 -0700
@@ -78,6 +78,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -190,6 +192,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -264,6 +270,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -428,6 +436,8 @@
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3ErlangRandomVariable_methods(root_module, root_module['ns3::ErlangRandomVariable'])
     register_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
@@ -1537,23 +1547,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1668,6 +1678,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -1689,10 +1704,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -1714,6 +1729,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -1729,6 +1748,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Vector2D_methods(root_module, cls):
@@ -1865,6 +1888,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3301,6 +3329,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -4175,16 +4267,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -4212,35 +4319,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -4501,6 +4603,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/buildings/bindings/modulegen__gcc_LP64.py ns-3.26/src/buildings/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/buildings/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.404246413 -0700
+++ ns-3.26/src/buildings/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.704387228 -0700
@@ -78,6 +78,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -190,6 +192,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -264,6 +270,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -428,6 +436,8 @@
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3ErlangRandomVariable_methods(root_module, root_module['ns3::ErlangRandomVariable'])
     register_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
@@ -1537,23 +1547,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1668,6 +1678,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -1689,10 +1704,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -1714,6 +1729,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -1729,6 +1748,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Vector2D_methods(root_module, cls):
@@ -1865,6 +1888,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3301,6 +3329,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -4175,16 +4267,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -4212,35 +4319,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -4501,6 +4603,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/click/bindings/callbacks_list.py ns-3.26/src/click/bindings/callbacks_list.py
--- ns-3.25/src/click/bindings/callbacks_list.py	2016-10-03 20:57:08.421246281 -0700
+++ ns-3.26/src/click/bindings/callbacks_list.py	2016-10-03 19:49:01.721387102 -0700
@@ -1,4 +1,8 @@
 callback_classes = [
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::Ptr<ns3::QueueItem>', '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::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'],
diff -Naur ns-3.25/src/click/bindings/modulegen__gcc_ILP32.py ns-3.26/src/click/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/click/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.424246258 -0700
+++ ns-3.26/src/click/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.725387072 -0700
@@ -112,6 +112,8 @@
     module.add_class('Tag', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
     ## tag-buffer.h (module 'network'): ns3::TagBuffer [class]
     module.add_class('TagBuffer', import_from_module='ns.network')
+    ## 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]
@@ -136,6 +138,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'])
     ## 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]
@@ -150,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]
@@ -164,10 +182,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -176,10 +194,14 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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'])
     ## 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'])
     ## attribute.h (module 'core'): ns3::AttributeAccessor [class]
@@ -188,14 +210,26 @@
     module.add_class('AttributeChecker', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     ## attribute.h (module 'core'): ns3::AttributeValue [class]
     module.add_class('AttributeValue', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
+    ## boolean.h (module 'core'): ns3::BooleanChecker [class]
+    module.add_class('BooleanChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## boolean.h (module 'core'): ns3::BooleanValue [class]
+    module.add_class('BooleanValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## callback.h (module 'core'): ns3::CallbackChecker [class]
     module.add_class('CallbackChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## callback.h (module 'core'): ns3::CallbackImplBase [class]
     module.add_class('CallbackImplBase', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     ## callback.h (module 'core'): ns3::CallbackValue [class]
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## double.h (module 'core'): ns3::DoubleValue [class]
+    module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## enum.h (module 'core'): ns3::EnumChecker [class]
+    module.add_class('EnumChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## enum.h (module 'core'): ns3::EnumValue [class]
+    module.add_class('EnumValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## 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]
@@ -232,24 +266,39 @@
     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'])
     ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper [class]
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
+    ## 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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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-click-routing.h (module 'click'): ns3::Ipv4ClickRouting [class]
     module.add_class('Ipv4ClickRouting', 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::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::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')
     typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *', u'ns3::LogTimePrinter')
     typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) **', u'ns3::LogTimePrinter*')
@@ -269,6 +318,18 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
+    ## Register a nested module for the namespace internal
+    
+    nested_module = module.add_cpp_namespace('internal')
+    register_types_ns3_internal(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -304,6 +365,38 @@
     ## 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 ( * ) ( 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 ( * ) ( 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'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -341,6 +434,7 @@
     register_Ns3SystemWallClockMs_methods(root_module, root_module['ns3::SystemWallClockMs'])
     register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
+    register_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'])
@@ -350,6 +444,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_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> >'])
@@ -357,26 +455,35 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     register_Ns3SocketSetDontFragmentTag_methods(root_module, root_module['ns3::SocketSetDontFragmentTag'])
     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_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
     register_Ns3AttributeChecker_methods(root_module, root_module['ns3::AttributeChecker'])
     register_Ns3AttributeValue_methods(root_module, root_module['ns3::AttributeValue'])
+    register_Ns3BooleanChecker_methods(root_module, root_module['ns3::BooleanChecker'])
+    register_Ns3BooleanValue_methods(root_module, root_module['ns3::BooleanValue'])
     register_Ns3CallbackChecker_methods(root_module, root_module['ns3::CallbackChecker'])
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
+    register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3EnumChecker_methods(root_module, root_module['ns3::EnumChecker'])
+    register_Ns3EnumValue_methods(root_module, root_module['ns3::EnumValue'])
+    register_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'])
@@ -394,14 +501,20 @@
     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_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_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_Ns3Ipv4ClickRouting_methods(root_module, root_module['ns3::Ipv4ClickRouting'])
+    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'])
@@ -979,6 +1092,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -992,6 +1110,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
@@ -2028,6 +2150,40 @@
                    [param('uint8_t', '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_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -2533,6 +2689,373 @@
                    [])
     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'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
+    ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
+    cls.add_method('ResetStatistics', 
+                   'void', 
+                   [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## 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::QueueItem> item) [member function]
+    cls.add_method('Drop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   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)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=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::SetParentDropCallback(ns3::Callback<void, 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('SetParentDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## 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::QueueItem> item) [member function]
+    cls.add_method('Drop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueItem >', '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_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([])
@@ -2617,6 +3140,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([])
@@ -2653,6 +3188,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([])
@@ -2744,6 +3291,16 @@
                    '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'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -2769,6 +3326,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -2917,6 +3479,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -2944,11 +3510,6 @@
                    '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', 
@@ -3011,88 +3572,42 @@
                    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]
+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::SocketAddressTag::Deserialize(ns3::TagBuffer i) [member function]
+    ## 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::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]
+    ## 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::SocketAddressTag::GetSerializedSize() const [member function]
+    ## 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'): static ns3::TypeId ns3::SocketAddressTag::GetTypeId() [member function]
+    ## 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::SocketAddressTag::Print(std::ostream & os) const [member function]
+    ## 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::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]
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::Serialize(ns3::TagBuffer i) const [member function]
     cls.add_method('Serialize', 
                    'void', 
                    [param('ns3::TagBuffer', 'i')], 
@@ -3241,6 +3756,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -3318,6 +3879,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) const [member function]
+    cls.add_method('GetRootQueueDiscOnDevice', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_const=True, 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]
@@ -3442,6 +4071,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([])
@@ -3499,6 +4169,39 @@
                    [param('ns3::CallbackBase', 'base')])
     return
 
+def register_Ns3DoubleValue_methods(root_module, cls):
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue() [constructor]
+    cls.add_constructor([])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(ns3::DoubleValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DoubleValue const &', 'arg0')])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(double const & value) [constructor]
+    cls.add_constructor([param('double const &', 'value')])
+    ## double.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::DoubleValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): bool ns3::DoubleValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## double.h (module 'core'): double ns3::DoubleValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## double.h (module 'core'): std::string ns3::DoubleValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): void ns3::DoubleValue::Set(double const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('double const &', 'value')])
+    return
+
 def register_Ns3EmptyAttributeValue_methods(root_module, cls):
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue::EmptyAttributeValue(ns3::EmptyAttributeValue const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::EmptyAttributeValue const &', 'arg0')])
@@ -3521,6 +4224,117 @@
                    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_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')])
@@ -3827,10 +4641,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', 
@@ -3855,6 +4669,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', 
@@ -4181,7 +4999,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')], 
@@ -4308,6 +5126,83 @@
                    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::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
+                   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'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## 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]
@@ -4352,6 +5247,94 @@
                    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_Ns3OutputStreamWrapper_methods(root_module, cls):
     ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(ns3::OutputStreamWrapper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::OutputStreamWrapper const &', 'arg0')])
@@ -4550,6 +5533,32 @@
                    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'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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([])
@@ -4590,6 +5599,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([])
@@ -4637,6 +5679,40 @@
     cls.add_constructor([param('ns3::Ipv4ClickRouting const &', 'arg0')])
     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')])
@@ -4746,6 +5822,8 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
+    register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -4758,6 +5836,12 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
+def register_functions_ns3_internal(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.25/src/click/bindings/modulegen__gcc_LP64.py ns-3.26/src/click/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/click/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.428246227 -0700
+++ ns-3.26/src/click/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.729387042 -0700
@@ -112,6 +112,8 @@
     module.add_class('Tag', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
     ## tag-buffer.h (module 'network'): ns3::TagBuffer [class]
     module.add_class('TagBuffer', import_from_module='ns.network')
+    ## 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]
@@ -136,6 +138,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'])
     ## 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]
@@ -150,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]
@@ -164,10 +182,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -176,10 +194,14 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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'])
     ## 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'])
     ## attribute.h (module 'core'): ns3::AttributeAccessor [class]
@@ -188,14 +210,26 @@
     module.add_class('AttributeChecker', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     ## attribute.h (module 'core'): ns3::AttributeValue [class]
     module.add_class('AttributeValue', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
+    ## boolean.h (module 'core'): ns3::BooleanChecker [class]
+    module.add_class('BooleanChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## boolean.h (module 'core'): ns3::BooleanValue [class]
+    module.add_class('BooleanValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## callback.h (module 'core'): ns3::CallbackChecker [class]
     module.add_class('CallbackChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## callback.h (module 'core'): ns3::CallbackImplBase [class]
     module.add_class('CallbackImplBase', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     ## callback.h (module 'core'): ns3::CallbackValue [class]
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## double.h (module 'core'): ns3::DoubleValue [class]
+    module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## enum.h (module 'core'): ns3::EnumChecker [class]
+    module.add_class('EnumChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## enum.h (module 'core'): ns3::EnumValue [class]
+    module.add_class('EnumValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## 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]
@@ -232,24 +266,39 @@
     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'])
     ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper [class]
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
+    ## 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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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-click-routing.h (module 'click'): ns3::Ipv4ClickRouting [class]
     module.add_class('Ipv4ClickRouting', 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::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::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')
     typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *', u'ns3::LogTimePrinter')
     typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) **', u'ns3::LogTimePrinter*')
@@ -269,6 +318,18 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
+    ## Register a nested module for the namespace internal
+    
+    nested_module = module.add_cpp_namespace('internal')
+    register_types_ns3_internal(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -304,6 +365,38 @@
     ## 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 ( * ) ( 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 ( * ) ( 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'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -341,6 +434,7 @@
     register_Ns3SystemWallClockMs_methods(root_module, root_module['ns3::SystemWallClockMs'])
     register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
+    register_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'])
@@ -350,6 +444,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_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> >'])
@@ -357,26 +455,35 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     register_Ns3SocketSetDontFragmentTag_methods(root_module, root_module['ns3::SocketSetDontFragmentTag'])
     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_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
     register_Ns3AttributeChecker_methods(root_module, root_module['ns3::AttributeChecker'])
     register_Ns3AttributeValue_methods(root_module, root_module['ns3::AttributeValue'])
+    register_Ns3BooleanChecker_methods(root_module, root_module['ns3::BooleanChecker'])
+    register_Ns3BooleanValue_methods(root_module, root_module['ns3::BooleanValue'])
     register_Ns3CallbackChecker_methods(root_module, root_module['ns3::CallbackChecker'])
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
+    register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3EnumChecker_methods(root_module, root_module['ns3::EnumChecker'])
+    register_Ns3EnumValue_methods(root_module, root_module['ns3::EnumValue'])
+    register_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'])
@@ -394,14 +501,20 @@
     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_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_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_Ns3Ipv4ClickRouting_methods(root_module, root_module['ns3::Ipv4ClickRouting'])
+    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'])
@@ -979,6 +1092,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -992,6 +1110,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
@@ -2028,6 +2150,40 @@
                    [param('uint8_t', '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_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -2533,6 +2689,373 @@
                    [])
     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'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
+    ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
+    cls.add_method('ResetStatistics', 
+                   'void', 
+                   [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## 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::QueueItem> item) [member function]
+    cls.add_method('Drop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   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)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=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::SetParentDropCallback(ns3::Callback<void, 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('SetParentDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## 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::QueueItem> item) [member function]
+    cls.add_method('Drop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueItem >', '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_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([])
@@ -2617,6 +3140,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([])
@@ -2653,6 +3188,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([])
@@ -2744,6 +3291,16 @@
                    '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'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -2769,6 +3326,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -2917,6 +3479,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -2944,11 +3510,6 @@
                    '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', 
@@ -3011,88 +3572,42 @@
                    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]
+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::SocketAddressTag::Deserialize(ns3::TagBuffer i) [member function]
+    ## 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::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]
+    ## 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::SocketAddressTag::GetSerializedSize() const [member function]
+    ## 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'): static ns3::TypeId ns3::SocketAddressTag::GetTypeId() [member function]
+    ## 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::SocketAddressTag::Print(std::ostream & os) const [member function]
+    ## 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::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]
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::Serialize(ns3::TagBuffer i) const [member function]
     cls.add_method('Serialize', 
                    'void', 
                    [param('ns3::TagBuffer', 'i')], 
@@ -3241,6 +3756,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -3318,6 +3879,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) const [member function]
+    cls.add_method('GetRootQueueDiscOnDevice', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_const=True, 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]
@@ -3442,6 +4071,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([])
@@ -3499,6 +4169,39 @@
                    [param('ns3::CallbackBase', 'base')])
     return
 
+def register_Ns3DoubleValue_methods(root_module, cls):
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue() [constructor]
+    cls.add_constructor([])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(ns3::DoubleValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DoubleValue const &', 'arg0')])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(double const & value) [constructor]
+    cls.add_constructor([param('double const &', 'value')])
+    ## double.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::DoubleValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): bool ns3::DoubleValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## double.h (module 'core'): double ns3::DoubleValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## double.h (module 'core'): std::string ns3::DoubleValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): void ns3::DoubleValue::Set(double const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('double const &', 'value')])
+    return
+
 def register_Ns3EmptyAttributeValue_methods(root_module, cls):
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue::EmptyAttributeValue(ns3::EmptyAttributeValue const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::EmptyAttributeValue const &', 'arg0')])
@@ -3521,6 +4224,117 @@
                    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_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')])
@@ -3827,10 +4641,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', 
@@ -3855,6 +4669,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', 
@@ -4181,7 +4999,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')], 
@@ -4308,6 +5126,83 @@
                    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::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
+                   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'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## 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]
@@ -4352,6 +5247,94 @@
                    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_Ns3OutputStreamWrapper_methods(root_module, cls):
     ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(ns3::OutputStreamWrapper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::OutputStreamWrapper const &', 'arg0')])
@@ -4550,6 +5533,32 @@
                    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'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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([])
@@ -4590,6 +5599,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([])
@@ -4637,6 +5679,40 @@
     cls.add_constructor([param('ns3::Ipv4ClickRouting const &', 'arg0')])
     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')])
@@ -4746,6 +5822,8 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
+    register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -4758,6 +5836,12 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
+def register_functions_ns3_internal(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.25/src/config-store/bindings/modulegen__gcc_ILP32.py ns-3.26/src/config-store/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/config-store/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.440246134 -0700
+++ ns-3.26/src/config-store/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.742386945 -0700
@@ -36,6 +36,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -74,6 +76,10 @@
     module.add_class('CallbackImplBase', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     ## callback.h (module 'core'): ns3::CallbackValue [class]
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -152,6 +158,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -347,23 +355,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -478,6 +486,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -499,10 +512,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -524,6 +537,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -539,6 +556,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -832,6 +853,70 @@
                    [param('ns3::CallbackBase', 'base')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
diff -Naur ns-3.25/src/config-store/bindings/modulegen__gcc_LP64.py ns-3.26/src/config-store/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/config-store/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.441246126 -0700
+++ ns-3.26/src/config-store/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.743386937 -0700
@@ -36,6 +36,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -74,6 +76,10 @@
     module.add_class('CallbackImplBase', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     ## callback.h (module 'core'): ns3::CallbackValue [class]
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -152,6 +158,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -347,23 +355,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -478,6 +486,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -499,10 +512,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -524,6 +537,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -539,6 +556,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -832,6 +853,70 @@
                    [param('ns3::CallbackBase', 'base')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
diff -Naur ns-3.25/src/config-store/examples/config-store-save.cc ns-3.26/src/config-store/examples/config-store-save.cc
--- ns-3.25/src/config-store/examples/config-store-save.cc	2016-10-03 20:57:08.442246118 -0700
+++ ns-3.26/src/config-store/examples/config-store-save.cc	2016-10-03 19:49:01.744386930 -0700
@@ -30,6 +30,9 @@
 // 
 int main (int argc, char *argv[])
 {
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
   Config::SetDefault ("ns3::ConfigExample::TestInt16", IntegerValue (-5));
 
   Ptr<ConfigExample> a_obj = CreateObject<ConfigExample> ();
diff -Naur ns-3.25/src/config-store/model/attribute-iterator.cc ns-3.26/src/config-store/model/attribute-iterator.cc
--- ns-3.25/src/config-store/model/attribute-iterator.cc	2016-10-03 20:57:08.444246103 -0700
+++ ns-3.26/src/config-store/model/attribute-iterator.cc	2016-10-03 19:49:01.746386915 -0700
@@ -235,11 +235,14 @@
                   uint32_t j = (*it).first;
                   NS_LOG_DEBUG ("ObjectPtrContainer attribute item " << j);
                   Ptr<Object> tmp = (*it).second;
-                  StartVisitArrayItem (vector, j, tmp);
-                  m_examined.push_back (object);
-                  DoIterate (tmp);
-                  m_examined.pop_back ();
-                  EndVisitArrayItem ();
+                  if (tmp)
+                    {
+                      StartVisitArrayItem (vector, j, tmp);
+                      m_examined.push_back (object);
+                      DoIterate (tmp);
+                      m_examined.pop_back ();
+                      EndVisitArrayItem ();
+                    }
                 }
               EndVisitArrayAttribute ();
               continue;
diff -Naur ns-3.25/src/config-store/model/config-store.cc ns-3.26/src/config-store/model/config-store.cc
--- ns-3.25/src/config-store/model/config-store.cc	2016-10-03 20:57:08.445246095 -0700
+++ ns-3.26/src/config-store/model/config-store.cc	2016-10-03 19:49:01.747386908 -0700
@@ -80,6 +80,7 @@
 
 ConfigStore::ConfigStore ()
 {
+  NS_LOG_FUNCTION (this);
   ObjectBase::ConstructSelf (AttributeConstructionList ());
 
 #ifdef HAVE_LIBXML2
@@ -128,10 +129,14 @@
         }
     }
   m_file->SetFilename (m_filename);
+  NS_LOG_FUNCTION (this << ": format: " << m_fileFormat
+                << ", mode: " << m_mode
+                << ", file name: " << m_filename);
 }
 
 ConfigStore::~ConfigStore ()
 {
+  NS_LOG_FUNCTION (this);
   delete m_file;
   m_file = 0;
 }
@@ -139,30 +144,59 @@
 void 
 ConfigStore::SetMode (enum Mode mode)
 {
+  NS_LOG_FUNCTION (this << mode);
   m_mode = mode;
 }
 void 
 ConfigStore::SetFileFormat (enum FileFormat format)
 {
+  NS_LOG_FUNCTION (this << format);
   m_fileFormat = format;
 }
 void 
 ConfigStore::SetFilename (std::string filename)
 {
+  NS_LOG_FUNCTION (this << filename);
   m_filename = filename;
 }
 
 void 
 ConfigStore::ConfigureAttributes (void)
 {
+  NS_LOG_FUNCTION (this);
   m_file->Attributes ();
 }
 
 void 
 ConfigStore::ConfigureDefaults (void)
 {
+  NS_LOG_FUNCTION (this);
   m_file->Default ();
   m_file->Global ();
 }
 
+std::ostream &
+operator << (std::ostream & os, ConfigStore::Mode & mode)
+{
+  switch (mode)
+    {
+    case ConfigStore::LOAD:      os << "LOAD";      break;
+    case ConfigStore::SAVE:      os << "SAVE";      break;
+    case ConfigStore::NONE:      os << "NONE";      break;
+    default:                     os << "UNKNOWN";
+    }
+  return os;
+}
+
+std::ostream &
+operator << (std::ostream & os, ConfigStore::FileFormat & format)
+{
+  switch (format)
+    {
+    case ConfigStore::XML:       os << "XML";       break;
+    case ConfigStore::RAW_TEXT:  os << "RAW_TEXT";  break;
+    }
+  return os;
+}
+
 } // namespace ns3
diff -Naur ns-3.25/src/config-store/model/config-store.h ns-3.26/src/config-store/model/config-store.h
--- ns-3.25/src/config-store/model/config-store.h	2016-10-03 20:57:08.445246095 -0700
+++ ns-3.26/src/config-store/model/config-store.h	2016-10-03 19:49:01.747386908 -0700
@@ -83,6 +83,14 @@
   FileConfig *m_file;
 };
 
+/**
+ * @{
+ * \ingroup configstore
+ */
+std::ostream & operator << (std::ostream & os, ConfigStore::Mode & mode);
+std::ostream & operator << (std::ostream & os, ConfigStore::FileFormat & format);
+/**@}*/
+
 }  // namespace ns3
 
 #endif /* CONFIG_STORE_H */
diff -Naur ns-3.25/src/config-store/model/raw-text-config.cc ns-3.26/src/config-store/model/raw-text-config.cc
--- ns-3.25/src/config-store/model/raw-text-config.cc	2016-10-03 20:57:08.449246064 -0700
+++ ns-3.26/src/config-store/model/raw-text-config.cc	2016-10-03 19:49:01.751386878 -0700
@@ -33,9 +33,11 @@
 RawTextConfigSave::RawTextConfigSave ()
   : m_os (0)
 {
+  NS_LOG_FUNCTION (this);
 }
 RawTextConfigSave::~RawTextConfigSave ()
 {
+  NS_LOG_FUNCTION (this);
   if (m_os != 0)
     {
       m_os->close ();
@@ -46,12 +48,14 @@
 void 
 RawTextConfigSave::SetFilename (std::string filename)
 {
+  NS_LOG_FUNCTION (this << filename);
   m_os = new std::ofstream ();
   m_os->open (filename.c_str (), std::ios::out);
 }
 void 
 RawTextConfigSave::Default (void)
 {
+  NS_LOG_FUNCTION (this);
   class RawTextDefaultIterator : public AttributeDefaultIterator
   {
 public:
@@ -63,6 +67,7 @@
       m_typeId = name;
     }
     virtual void DoVisitAttribute (std::string name, std::string defaultValue) {
+      NS_LOG_DEBUG ("Saving " << m_typeId << "::" << name);
       *m_os << "default " << m_typeId << "::" << name << " \"" << defaultValue << "\"" << std::endl;
     }
     std::string m_typeId;
@@ -75,16 +80,19 @@
 void 
 RawTextConfigSave::Global (void)
 {
+  NS_LOG_FUNCTION (this);
   for (GlobalValue::Iterator i = GlobalValue::Begin (); i != GlobalValue::End (); ++i)
     {
       StringValue value;
       (*i)->GetValue (value);
+      NS_LOG_LOGIC ("Saving " << (*i)->GetName ());
       *m_os << "global " << (*i)->GetName () << " \"" << value.Get () << "\"" << std::endl;
     }
 }
 void 
 RawTextConfigSave::Attributes (void)
 {
+  NS_LOG_FUNCTION (this);
   class RawTextAttributeIterator : public AttributeIterator
   {
 public:
@@ -94,6 +102,7 @@
     virtual void DoVisitAttribute (Ptr<Object> object, std::string name) {
       StringValue str;
       object->GetAttribute (name, str);
+      NS_LOG_DEBUG ("Saving " << GetCurrentPath ());
       *m_os << "value " << GetCurrentPath () << " \"" << str.Get () << "\"" << std::endl;
     }
     std::ostream *m_os;
@@ -106,9 +115,11 @@
 RawTextConfigLoad::RawTextConfigLoad ()
   : m_is (0)
 {
+  NS_LOG_FUNCTION (this);
 }
 RawTextConfigLoad::~RawTextConfigLoad ()
 {
+  NS_LOG_FUNCTION (this);
   if (m_is != 0)
     {
       m_is->close ();
@@ -119,6 +130,7 @@
 void 
 RawTextConfigLoad::SetFilename (std::string filename)
 {
+  NS_LOG_FUNCTION (this << filename);
   m_is = new std::ifstream ();
   m_is->open (filename.c_str (), std::ios::in);
 }
@@ -135,6 +147,7 @@
 void 
 RawTextConfigLoad::Default (void)
 {
+  NS_LOG_FUNCTION (this);
   m_is->clear ();
   m_is->seekg (0);
   std::string type, name, value;
@@ -153,6 +166,7 @@
 void 
 RawTextConfigLoad::Global (void)
 {
+  NS_LOG_FUNCTION (this);
   m_is->clear ();
   m_is->seekg (0);
   std::string type, name, value;
@@ -171,6 +185,8 @@
 void 
 RawTextConfigLoad::Attributes (void)
 {
+  NS_LOG_FUNCTION (this);
+  m_is->clear ();
   m_is->seekg (0);
   std::string type, path, value;
   *m_is >> type >> path >> value;
diff -Naur ns-3.25/src/core/bindings/modulegen__gcc_ILP32.py ns-3.26/src/core/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/core/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.456246009 -0700
+++ ns-3.26/src/core/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.757386833 -0700
@@ -92,6 +92,10 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, 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')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'])
+    ## singleton.h (module 'core'): ns3::Singleton<ns3::DesMetrics> [class]
+    module.add_class('Singleton', template_parameters=['ns3::DesMetrics'], parent=root_module['ns3::NonCopyable'])
     ## system-condition.h (module 'core'): ns3::SystemCondition [class]
     module.add_class('SystemCondition')
     ## system-mutex.h (module 'core'): ns3::SystemMutex [class]
@@ -112,6 +116,8 @@
     module.add_class('TypeId')
     ## 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'])
+    ## type-id.h (module 'core'): ns3::TypeId::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], outer_class=root_module['ns3::TypeId'])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation [struct]
     module.add_class('AttributeInformation', outer_class=root_module['ns3::TypeId'])
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation [struct]
@@ -128,6 +134,8 @@
     module.add_class('int64x64_t')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t::impl_type [enumeration]
     module.add_enum('impl_type', ['int128_impl', 'cairo_impl', 'ld_impl'], outer_class=root_module['ns3::int64x64_t'])
+    ## des-metrics.h (module 'core'): ns3::DesMetrics [class]
+    module.add_class('DesMetrics', parent=root_module['ns3::Singleton< ns3::DesMetrics >'])
     ## object.h (module 'core'): ns3::Object [class]
     module.add_class('Object', parent=root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     ## object.h (module 'core'): ns3::Object::AggregateIterator [class]
@@ -216,6 +224,10 @@
     module.add_class('DoubleValue', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable [class]
     module.add_class('EmpiricalRandomVariable', parent=root_module['ns3::RandomVariableStream'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', parent=root_module['ns3::AttributeValue'])
     ## enum.h (module 'core'): ns3::EnumChecker [class]
@@ -438,6 +450,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
     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&')
@@ -475,6 +490,7 @@
     register_Ns3RngStream_methods(root_module, root_module['ns3::RngStream'])
     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_Ns3Singleton__Ns3DesMetrics_methods(root_module, root_module['ns3::Singleton< ns3::DesMetrics >'])
     register_Ns3SystemCondition_methods(root_module, root_module['ns3::SystemCondition'])
     register_Ns3SystemMutex_methods(root_module, root_module['ns3::SystemMutex'])
     register_Ns3SystemWallClockMs_methods(root_module, root_module['ns3::SystemWallClockMs'])
@@ -489,6 +505,7 @@
     register_Ns3Watchdog_methods(root_module, root_module['ns3::Watchdog'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
+    register_Ns3DesMetrics_methods(root_module, root_module['ns3::DesMetrics'])
     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'])
@@ -531,6 +548,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -1237,6 +1256,16 @@
                    is_static=True)
     return
 
+def register_Ns3Singleton__Ns3DesMetrics_methods(root_module, cls):
+    ## singleton.h (module 'core'): ns3::Singleton<ns3::DesMetrics>::Singleton() [constructor]
+    cls.add_constructor([])
+    ## singleton.h (module 'core'): static ns3::DesMetrics * ns3::Singleton<ns3::DesMetrics>::Get() [member function]
+    cls.add_method('Get', 
+                   'ns3::DesMetrics *', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SystemCondition_methods(root_module, cls):
     ## system-condition.h (module 'core'): ns3::SystemCondition::SystemCondition(ns3::SystemCondition const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SystemCondition const &', 'arg0')])
@@ -1416,23 +1445,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1547,6 +1576,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -1568,10 +1602,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -1593,6 +1627,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -1608,6 +1646,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Vector2D_methods(root_module, cls):
@@ -1725,6 +1767,23 @@
     cls.add_static_attribute('implementation', 'ns3::int64x64_t::impl_type const', is_const=True)
     return
 
+def register_Ns3DesMetrics_methods(root_module, cls):
+    ## des-metrics.h (module 'core'): ns3::DesMetrics::DesMetrics() [constructor]
+    cls.add_constructor([])
+    ## des-metrics.h (module 'core'): void ns3::DesMetrics::Initialize(int argc, char * * argv, std::string outDir="") [member function]
+    cls.add_method('Initialize', 
+                   'void', 
+                   [param('int', 'argc'), param('char * *', 'argv'), param('std::string', 'outDir', default_value='""')])
+    ## des-metrics.h (module 'core'): void ns3::DesMetrics::Trace(ns3::Time const & now, ns3::Time const & delay) [member function]
+    cls.add_method('Trace', 
+                   'void', 
+                   [param('ns3::Time const &', 'now'), param('ns3::Time const &', 'delay')])
+    ## des-metrics.h (module 'core'): void ns3::DesMetrics::TraceWithContext(uint32_t context, ns3::Time const & now, ns3::Time const & delay) [member function]
+    cls.add_method('TraceWithContext', 
+                   'void', 
+                   [param('uint32_t', 'context'), param('ns3::Time const &', 'now'), param('ns3::Time const &', 'delay')])
+    return
+
 def register_Ns3Object_methods(root_module, cls):
     ## object.h (module 'core'): ns3::Object::Object() [constructor]
     cls.add_constructor([])
@@ -1760,6 +1819,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3268,6 +3332,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -4631,6 +4759,18 @@
     module.add_function('MakeCallbackChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeAccessor const> ns3::MakeEmptyAttributeAccessor() [free function]
+    module.add_function('MakeEmptyAttributeAccessor', 
+                        'ns3::Ptr< ns3::AttributeAccessor const >', 
+                        [])
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeChecker> ns3::MakeEmptyAttributeChecker() [free function]
+    module.add_function('MakeEmptyAttributeChecker', 
+                        'ns3::Ptr< ns3::AttributeChecker >', 
+                        [])
+    ## trace-source-accessor.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::MakeEmptyTraceSourceAccessor() [free function]
+    module.add_function('MakeEmptyTraceSourceAccessor', 
+                        'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                        [])
     ## enum.h (module 'core'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeEnumChecker(int v1, std::string n1, int v2=0, std::string n2="", int v3=0, std::string n3="", int v4=0, std::string n4="", int v5=0, std::string n5="", int v6=0, std::string n6="", int v7=0, std::string n7="", int v8=0, std::string n8="", int v9=0, std::string n9="", int v10=0, std::string n10="", int v11=0, std::string n11="", int v12=0, std::string n12="", int v13=0, std::string n13="", int v14=0, std::string n14="", int v15=0, std::string n15="", int v16=0, std::string n16="", int v17=0, std::string n17="", int v18=0, std::string n18="", int v19=0, std::string n19="", int v20=0, std::string n20="", int v21=0, std::string n21="", int v22=0, std::string n22="") [free function]
     module.add_function('MakeEnumChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
diff -Naur ns-3.25/src/core/bindings/modulegen__gcc_LP64.py ns-3.26/src/core/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/core/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.459245986 -0700
+++ ns-3.26/src/core/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.761386804 -0700
@@ -92,6 +92,10 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, 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')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'])
+    ## singleton.h (module 'core'): ns3::Singleton<ns3::DesMetrics> [class]
+    module.add_class('Singleton', template_parameters=['ns3::DesMetrics'], parent=root_module['ns3::NonCopyable'])
     ## system-condition.h (module 'core'): ns3::SystemCondition [class]
     module.add_class('SystemCondition')
     ## system-mutex.h (module 'core'): ns3::SystemMutex [class]
@@ -112,6 +116,8 @@
     module.add_class('TypeId')
     ## 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'])
+    ## type-id.h (module 'core'): ns3::TypeId::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], outer_class=root_module['ns3::TypeId'])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation [struct]
     module.add_class('AttributeInformation', outer_class=root_module['ns3::TypeId'])
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation [struct]
@@ -128,6 +134,8 @@
     module.add_class('int64x64_t')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t::impl_type [enumeration]
     module.add_enum('impl_type', ['int128_impl', 'cairo_impl', 'ld_impl'], outer_class=root_module['ns3::int64x64_t'])
+    ## des-metrics.h (module 'core'): ns3::DesMetrics [class]
+    module.add_class('DesMetrics', parent=root_module['ns3::Singleton< ns3::DesMetrics >'])
     ## object.h (module 'core'): ns3::Object [class]
     module.add_class('Object', parent=root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     ## object.h (module 'core'): ns3::Object::AggregateIterator [class]
@@ -216,6 +224,10 @@
     module.add_class('DoubleValue', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable [class]
     module.add_class('EmpiricalRandomVariable', parent=root_module['ns3::RandomVariableStream'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', parent=root_module['ns3::AttributeValue'])
     ## enum.h (module 'core'): ns3::EnumChecker [class]
@@ -438,6 +450,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
     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&')
@@ -475,6 +490,7 @@
     register_Ns3RngStream_methods(root_module, root_module['ns3::RngStream'])
     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_Ns3Singleton__Ns3DesMetrics_methods(root_module, root_module['ns3::Singleton< ns3::DesMetrics >'])
     register_Ns3SystemCondition_methods(root_module, root_module['ns3::SystemCondition'])
     register_Ns3SystemMutex_methods(root_module, root_module['ns3::SystemMutex'])
     register_Ns3SystemWallClockMs_methods(root_module, root_module['ns3::SystemWallClockMs'])
@@ -489,6 +505,7 @@
     register_Ns3Watchdog_methods(root_module, root_module['ns3::Watchdog'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
+    register_Ns3DesMetrics_methods(root_module, root_module['ns3::DesMetrics'])
     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'])
@@ -531,6 +548,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -1237,6 +1256,16 @@
                    is_static=True)
     return
 
+def register_Ns3Singleton__Ns3DesMetrics_methods(root_module, cls):
+    ## singleton.h (module 'core'): ns3::Singleton<ns3::DesMetrics>::Singleton() [constructor]
+    cls.add_constructor([])
+    ## singleton.h (module 'core'): static ns3::DesMetrics * ns3::Singleton<ns3::DesMetrics>::Get() [member function]
+    cls.add_method('Get', 
+                   'ns3::DesMetrics *', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SystemCondition_methods(root_module, cls):
     ## system-condition.h (module 'core'): ns3::SystemCondition::SystemCondition(ns3::SystemCondition const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SystemCondition const &', 'arg0')])
@@ -1416,23 +1445,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1547,6 +1576,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -1568,10 +1602,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -1593,6 +1627,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -1608,6 +1646,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Vector2D_methods(root_module, cls):
@@ -1725,6 +1767,23 @@
     cls.add_static_attribute('implementation', 'ns3::int64x64_t::impl_type const', is_const=True)
     return
 
+def register_Ns3DesMetrics_methods(root_module, cls):
+    ## des-metrics.h (module 'core'): ns3::DesMetrics::DesMetrics() [constructor]
+    cls.add_constructor([])
+    ## des-metrics.h (module 'core'): void ns3::DesMetrics::Initialize(int argc, char * * argv, std::string outDir="") [member function]
+    cls.add_method('Initialize', 
+                   'void', 
+                   [param('int', 'argc'), param('char * *', 'argv'), param('std::string', 'outDir', default_value='""')])
+    ## des-metrics.h (module 'core'): void ns3::DesMetrics::Trace(ns3::Time const & now, ns3::Time const & delay) [member function]
+    cls.add_method('Trace', 
+                   'void', 
+                   [param('ns3::Time const &', 'now'), param('ns3::Time const &', 'delay')])
+    ## des-metrics.h (module 'core'): void ns3::DesMetrics::TraceWithContext(uint32_t context, ns3::Time const & now, ns3::Time const & delay) [member function]
+    cls.add_method('TraceWithContext', 
+                   'void', 
+                   [param('uint32_t', 'context'), param('ns3::Time const &', 'now'), param('ns3::Time const &', 'delay')])
+    return
+
 def register_Ns3Object_methods(root_module, cls):
     ## object.h (module 'core'): ns3::Object::Object() [constructor]
     cls.add_constructor([])
@@ -1760,6 +1819,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3268,6 +3332,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -4631,6 +4759,18 @@
     module.add_function('MakeCallbackChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeAccessor const> ns3::MakeEmptyAttributeAccessor() [free function]
+    module.add_function('MakeEmptyAttributeAccessor', 
+                        'ns3::Ptr< ns3::AttributeAccessor const >', 
+                        [])
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeChecker> ns3::MakeEmptyAttributeChecker() [free function]
+    module.add_function('MakeEmptyAttributeChecker', 
+                        'ns3::Ptr< ns3::AttributeChecker >', 
+                        [])
+    ## trace-source-accessor.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::MakeEmptyTraceSourceAccessor() [free function]
+    module.add_function('MakeEmptyTraceSourceAccessor', 
+                        'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                        [])
     ## enum.h (module 'core'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeEnumChecker(int v1, std::string n1, int v2=0, std::string n2="", int v3=0, std::string n3="", int v4=0, std::string n4="", int v5=0, std::string n5="", int v6=0, std::string n6="", int v7=0, std::string n7="", int v8=0, std::string n8="", int v9=0, std::string n9="", int v10=0, std::string n10="", int v11=0, std::string n11="", int v12=0, std::string n12="", int v13=0, std::string n13="", int v14=0, std::string n14="", int v15=0, std::string n15="", int v16=0, std::string n16="", int v17=0, std::string n17="", int v18=0, std::string n18="", int v19=0, std::string n19="", int v20=0, std::string n20="", int v21=0, std::string n21="", int v22=0, std::string n22="") [free function]
     module.add_function('MakeEnumChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
diff -Naur ns-3.25/src/core/doc/deprecated-example.h ns-3.26/src/core/doc/deprecated-example.h
--- ns-3.25/src/core/doc/deprecated-example.h	2016-10-03 20:57:08.461245971 -0700
+++ ns-3.26/src/core/doc/deprecated-example.h	2016-10-03 19:49:01.763386789 -0700
@@ -30,7 +30,8 @@
  * \deprecated This method will go away in future versions of ns-3.
  * See instead TheNewWay()
  */
-void SomethingUseful (void); 
+NS_DEPRECATED
+void SomethingUseful (void);
 /*
  * Do something more useful.
  */
diff -Naur ns-3.25/src/core/examples/main-test-sync.cc ns-3.26/src/core/examples/main-test-sync.cc
--- ns-3.25/src/core/examples/main-test-sync.cc	2016-10-03 20:57:08.464245947 -0700
+++ ns-3.26/src/core/examples/main-test-sync.cc	2016-10-03 19:49:01.766386766 -0700
@@ -16,6 +16,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+#include "ns3/command-line.h"
 #include "ns3/simulator.h"
 #include "ns3/realtime-simulator-impl.h"
 #include "ns3/nstime.h"
@@ -97,7 +98,7 @@
       //
       // Exercise the realtime relative now path
       //
-      Simulator::ScheduleWithContext(0xffffffff, Seconds(0.0), MakeEvent (&inserted_function));
+      Simulator::ScheduleWithContext(Simulator::NO_CONTEXT, Seconds(0.0), MakeEvent (&inserted_function));
       usleep (1000);
     }
 }
@@ -145,6 +146,9 @@
 int
 main (int argc, char *argv[])
 {
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
   while (true)
     {
       test ();
diff -Naur ns-3.25/src/core/examples/sample-simulator.py ns-3.26/src/core/examples/sample-simulator.py
--- ns-3.25/src/core/examples/sample-simulator.py	2016-10-03 20:57:08.465245940 -0700
+++ ns-3.26/src/core/examples/sample-simulator.py	2016-10-03 19:49:01.767386759 -0700
@@ -48,7 +48,8 @@
     print "I should never be called... "
 
 def main(dummy_argv):
-
+    ns.core.CommandLine().Parse(dummy_argv)
+    
     model = MyModel()
     v = ns.core.UniformRandomVariable()
     v.SetAttribute("Min", ns.core.DoubleValue (10))
diff -Naur ns-3.25/src/core/examples/test-string-value-formatting.cc ns-3.26/src/core/examples/test-string-value-formatting.cc
--- ns-3.25/src/core/examples/test-string-value-formatting.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/core/examples/test-string-value-formatting.cc	2016-10-03 19:49:01.768386751 -0700
@@ -0,0 +1,151 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 Tom Henderson
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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/core-module.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("TestStringValueFormatting");
+
+class FormattingTestObject : public Object
+{
+public:
+  static TypeId GetTypeId (void);
+  FormattingTestObject ();
+  Ptr<RandomVariableStream> GetTestVariable (void) const;
+private:
+  Ptr<RandomVariableStream> m_testVariable;
+};
+
+NS_OBJECT_ENSURE_REGISTERED (FormattingTestObject);
+
+TypeId
+FormattingTestObject::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::FormattingTestObject")
+    .SetParent<Object> ()
+    .AddConstructor<FormattingTestObject> ()
+    .AddAttribute ("OnTime", "A RandomVariableStream used to pick the duration of the 'On' state.",
+                   StringValue ("ns3::ConstantRandomVariable[Constant=1.0]"),
+                   MakePointerAccessor (&FormattingTestObject::m_testVariable),
+                   MakePointerChecker <RandomVariableStream>())
+  ;
+  return tid;
+}
+
+FormattingTestObject::FormattingTestObject ()
+{
+}
+
+Ptr<RandomVariableStream>
+FormattingTestObject::GetTestVariable (void) const
+{
+  return m_testVariable;
+}
+
+class FormattingTestObjectHelper
+{
+public:
+  FormattingTestObjectHelper ();
+  void SetAttribute (std::string name, const AttributeValue &value);
+  Ptr<Object> CreateFromFactory (void);
+private:
+  ObjectFactory m_factory; 
+};
+
+FormattingTestObjectHelper::FormattingTestObjectHelper ()
+{
+  m_factory.SetTypeId (FormattingTestObject::GetTypeId ());
+}
+
+void
+FormattingTestObjectHelper::SetAttribute (std::string name, const AttributeValue &value)
+{
+  m_factory.Set (name, value);
+}
+
+Ptr<Object>
+FormattingTestObjectHelper::CreateFromFactory (void)
+{
+  return m_factory.Create ();
+}
+
+int 
+main (int argc, char *argv[])
+{
+  // CreateObject parsing
+  Ptr<FormattingTestObject> obj = CreateObject<FormattingTestObject> ();
+  obj->SetAttribute ("OnTime", StringValue ("ns3::UniformRandomVariable"));
+  obj->SetAttribute ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=0.]"));
+  obj->SetAttribute ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=0.|Max=1.]"));
+  obj->SetAttribute ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=50.|Max=100.]"));
+
+  Ptr<RandomVariableStream> rvStream = obj->GetTestVariable ();
+  // Either GetObject () or DynamicCast may be used to get subclass pointer
+  Ptr<UniformRandomVariable> uniformStream = rvStream->GetObject<UniformRandomVariable> ();
+  NS_ASSERT (uniformStream);
+
+  // Check that the last setting of Min to 50 and Max to 100 worked
+  DoubleValue val;
+  uniformStream->GetAttribute ("Min", val);
+  NS_ASSERT_MSG (val.Get () == 50, "Minimum not set to 50");
+  uniformStream->GetAttribute ("Max", val);
+  NS_ASSERT_MSG (val.Get () == 100, "Maximum not set to 100");
+
+
+  // The following malformed values should result in an error exit
+  // if uncommented
+
+  // Attribute doesn't exist
+  //obj->SetAttribute ("OnTime", StringValue ("ns3::UniformRandomVariable[A=0.]"));
+  // Missing right bracket
+  //obj->SetAttribute ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=0."));
+  // Comma delimiter fails
+  //obj->SetAttribute ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
+  // Incomplete specification
+  //obj->SetAttribute ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=0.|Max=]"));
+  // Incomplete specification
+  //obj->SetAttribute ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=0.|Max]"));
+
+  // ObjectFactory parsing
+  FormattingTestObjectHelper formattingHelper;
+  formattingHelper.SetAttribute ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=30.|Max=60.0]"));
+  // Attribute doesn't exist
+  //formattingHelper.SetAttribute ("OnTime", StringValue ("ns3::UniformRandomVariable[A=0.]"));
+  // Missing right bracket
+  //formattingHelper.SetAttribute ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=30."));
+  // Comma delimiter fails
+  //formattingHelper.SetAttribute ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=30.,Max=60.]"));
+  // Incomplete specification
+  //formattingHelper.SetAttribute ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=30.|Max=]"));
+  // Incomplete specification
+  //formattingHelper.SetAttribute ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=30.|Max]"));
+
+  // verify that creation occurs correctly
+  Ptr<Object> outputObj = formattingHelper.CreateFromFactory ();
+  Ptr<FormattingTestObject> fto = DynamicCast<FormattingTestObject> (outputObj);
+  NS_ASSERT_MSG (fto, "object creation failed");
+  rvStream = fto->GetTestVariable ();
+  uniformStream = rvStream->GetObject<UniformRandomVariable> ();
+  NS_ASSERT (uniformStream);
+  // Check that the last setting of Min to 30 and Max to 60 worked
+  uniformStream->GetAttribute ("Min", val);
+  NS_ASSERT_MSG (val.Get () == 30, "Minimum not set to 30");
+  uniformStream->GetAttribute ("Max", val);
+  NS_ASSERT_MSG (val.Get () == 60, "Maximum not set to 60");
+}
diff -Naur ns-3.25/src/core/examples/wscript ns-3.26/src/core/examples/wscript
--- ns-3.25/src/core/examples/wscript	2016-10-03 20:57:08.466245932 -0700
+++ ns-3.26/src/core/examples/wscript	2016-10-03 19:49:01.768386751 -0700
@@ -37,6 +37,9 @@
                                  ['core'])
     obj.source = 'hash-example.cc'
 
+    obj = bld.create_ns3_program('test-string-value-formatting', ['core'])
+    obj.source = 'test-string-value-formatting.cc'
+
     if bld.env['ENABLE_THREADING'] and bld.env["ENABLE_REAL_TIME"]:
         obj = bld.create_ns3_program('main-test-sync', ['network'])
         obj.source = 'main-test-sync.cc'
diff -Naur ns-3.25/src/core/model/attribute.cc ns-3.26/src/core/model/attribute.cc
--- ns-3.25/src/core/model/attribute.cc	2016-10-03 20:57:08.470245901 -0700
+++ ns-3.26/src/core/model/attribute.cc	2016-10-03 19:49:01.773386714 -0700
@@ -108,5 +108,89 @@
   return true;
 }
 
+EmptyAttributeAccessor::EmptyAttributeAccessor () : AttributeAccessor ()
+{
+}
+
+EmptyAttributeAccessor::~EmptyAttributeAccessor ()
+{
+}
+
+bool
+EmptyAttributeAccessor::Set (ObjectBase * object, const AttributeValue &value) const
+{
+  (void) object;
+  (void) value;
+  return true;
+}
+
+bool
+EmptyAttributeAccessor::Get (const ObjectBase * object, AttributeValue &attribute) const
+{
+  (void) object;
+  (void) attribute;
+  return true;
+}
+
+bool
+EmptyAttributeAccessor::HasGetter (void) const
+{
+  return false;
+}
+
+bool
+EmptyAttributeAccessor::HasSetter (void) const
+{
+  return false;
+}
+
+EmptyAttributeChecker::EmptyAttributeChecker () : AttributeChecker ()
+{
+}
+
+EmptyAttributeChecker::~EmptyAttributeChecker ()
+{
+}
+
+bool
+EmptyAttributeChecker::Check (const AttributeValue &value) const
+{
+  (void) value;
+  return true;
+}
+
+std::string
+EmptyAttributeChecker::GetValueTypeName (void) const
+{
+  return "EmptyAttribute";
+}
+
+bool
+EmptyAttributeChecker::HasUnderlyingTypeInformation (void) const
+{
+  return false;
+}
+
+std::string
+EmptyAttributeChecker::GetUnderlyingTypeInformation (void) const
+{
+  return "";
+}
+
+Ptr<AttributeValue>
+EmptyAttributeChecker::Create (void) const
+{
+  static EmptyAttributeValue t;
+  return Ptr<AttributeValue> (&t, false);
+}
+
+bool
+EmptyAttributeChecker::Copy (const AttributeValue &source, AttributeValue &destination) const
+{
+  (void) source;
+  (void) destination;
+  return true;
+}
+
 
 } // namespace ns3
diff -Naur ns-3.25/src/core/model/attribute.h ns-3.26/src/core/model/attribute.h
--- ns-3.25/src/core/model/attribute.h	2016-10-03 20:57:08.471245893 -0700
+++ ns-3.26/src/core/model/attribute.h	2016-10-03 19:49:01.773386714 -0700
@@ -222,8 +222,6 @@
    * \return true if copy was successful
    */
   virtual bool Copy (const AttributeValue &source, AttributeValue &destination) const = 0;
-
-  
 };
 
 /**
@@ -259,6 +257,53 @@
   virtual bool DeserializeFromString (std::string value, Ptr<const AttributeChecker> checker);
 };
 
+/**
+ * \brief An accessor for EmptyAttributeValue
+ *
+ * Does nothing, since every EmptyAttributeValue is the same.
+ */
+class EmptyAttributeAccessor : public AttributeAccessor
+{
+public:
+  EmptyAttributeAccessor ();
+  ~EmptyAttributeAccessor ();
+  virtual bool Set (ObjectBase * object, const AttributeValue &value) const;
+  virtual bool Get (const ObjectBase * object, AttributeValue &attribute) const;
+  virtual bool HasGetter (void) const;
+  virtual bool HasSetter (void) const;
+};
+
+static inline Ptr<const AttributeAccessor>
+MakeEmptyAttributeAccessor ()
+{
+  return Ptr<const AttributeAccessor> (new EmptyAttributeAccessor (), false);
+}
+
+/**
+ * \brief A checker for EmptyAttributeValue
+ *
+ * Does nothing, since every EmptyAttributeValue does not contain anything and
+ * is, of course, valid.
+ */
+class EmptyAttributeChecker : public AttributeChecker
+{
+public:
+  EmptyAttributeChecker ();
+  ~EmptyAttributeChecker ();
+  virtual bool Check (const AttributeValue &value) const;
+  virtual std::string GetValueTypeName (void) const;
+  virtual bool HasUnderlyingTypeInformation (void) const;
+  virtual std::string GetUnderlyingTypeInformation (void) const;
+  virtual Ptr<AttributeValue> Create (void) const;
+  virtual bool Copy (const AttributeValue &source, AttributeValue &destination) const;
+};
+
+static inline Ptr<AttributeChecker>
+MakeEmptyAttributeChecker ()
+{
+  return Ptr<AttributeChecker> (new EmptyAttributeChecker (), false);
+}
+
 } // namespace ns3
 
 #endif /* ATTRIBUTE_H */
diff -Naur ns-3.25/src/core/model/attribute-helper.h ns-3.26/src/core/model/attribute-helper.h
--- ns-3.25/src/core/model/attribute-helper.h	2016-10-03 20:57:08.470245901 -0700
+++ ns-3.26/src/core/model/attribute-helper.h	2016-10-03 19:49:01.772386721 -0700
@@ -23,7 +23,7 @@
 #include "attribute.h"
 #include "attribute-accessor-helper.h"
 #include <sstream>
-#include "fatal-error.h"
+#include "abort.h"
 
 /**
  * \file
@@ -296,6 +296,7 @@
       std::istringstream iss;                                           \
       iss.str (value);                                                  \
       iss >> m_value;                                                   \
+      NS_ABORT_MSG_UNLESS (iss.eof (), "Attribute value " << "\"" << value << "\"" << " is not properly formatted");                                        \
       return !iss.bad () && !iss.fail ();                               \
   }
 
diff -Naur ns-3.25/src/core/model/callback.h ns-3.26/src/core/model/callback.h
--- ns-3.25/src/core/model/callback.h	2016-10-03 20:57:08.476245854 -0700
+++ ns-3.26/src/core/model/callback.h	2016-10-03 19:49:01.778386677 -0700
@@ -148,7 +148,10 @@
    * \return \c true if we are equal
    */
   virtual bool IsEqual (Ptr<const CallbackImplBase> other) const = 0;
-  /** Get the type as a string. */
+  /**
+   * Get the name of this object type.
+   * \return The object type as a string.
+   */
   virtual std::string GetTypeid (void) const = 0;
 
 protected:
@@ -161,8 +164,7 @@
    * Helper to get the C++ typeid as a string.
    *
    * \tparam T The type of the argument.
-   * \param t The object.
-   * \returns The result of applying typeid to the argument.
+   * \returns The result of applying typeid to the template type \p T.
    */
   template <typename T>
   static std::string GetCppTypeid (void)
@@ -204,6 +206,7 @@
   {
     return DoGetTypeid ();
   }
+  /** \copydoc GetTypeid(). */
   static std::string DoGetTypeid (void)
   {
     static std::string id = "CallbackImpl<" +
@@ -222,6 +225,7 @@
   {
     return DoGetTypeid ();
   }
+  /** \copydoc GetTypeid(). */
   static std::string DoGetTypeid (void)
   {
     static std::string id = "CallbackImpl<" +
@@ -241,6 +245,7 @@
   {
     return DoGetTypeid ();
   }
+  /** \copydoc GetTypeid(). */
   static std::string DoGetTypeid (void)
   {
     static std::string id = "CallbackImpl<" +
@@ -261,6 +266,7 @@
   {
     return DoGetTypeid ();
   }
+  /** \copydoc GetTypeid(). */
   static std::string DoGetTypeid (void)
   {
     static std::string id = "CallbackImpl<" +
@@ -282,6 +288,7 @@
   {
     return DoGetTypeid ();
   }
+  /** \copydoc GetTypeid(). */
   static std::string DoGetTypeid (void)
   {
     static std::string id = "CallbackImpl<" +
@@ -304,6 +311,7 @@
   {
     return DoGetTypeid ();
   }
+  /** \copydoc GetTypeid(). */
   static std::string DoGetTypeid (void)
   {
     static std::string id = "CallbackImpl<" +
@@ -327,6 +335,7 @@
   {
     return DoGetTypeid ();
   }
+  /** \copydoc GetTypeid(). */
   static std::string DoGetTypeid (void)
   {
     static std::string id = "CallbackImpl<" +
@@ -351,6 +360,7 @@
   {
     return DoGetTypeid ();
   }
+  /** \copydoc GetTypeid(). */
   static std::string DoGetTypeid (void)
   {
     static std::string id = "CallbackImpl<" +
@@ -376,6 +386,7 @@
   {
     return DoGetTypeid ();
   }
+  /** \copydoc GetTypeid(). */
   static std::string DoGetTypeid (void)
   {
     static std::string id = "CallbackImpl<" +
@@ -402,6 +413,7 @@
   {
     return DoGetTypeid ();
   }
+  /** \copydoc GetTypeid(). */
   static std::string DoGetTypeid (void)
   {
     static std::string id = "CallbackImpl<" +
@@ -1395,6 +1407,7 @@
    * Adopt the other's implementation, if type compatible
    *
    * \param [in] other Callback
+   * \returns \c true if \p other was type-compatible and could be adopted.
    */
   bool Assign (const CallbackBase &other) {
     return DoAssign (other.GetImpl ());
@@ -1425,11 +1438,7 @@
         return false;
       }
   }
-  /**
-   * Adopt the other's implementation, if type compatible
-   *
-   * \param [in] other Callback Ptr to adopt from
-   */
+  /** \copydoc Assign */
   bool DoAssign (Ptr<const CallbackImplBase> other) {
     if (!DoCheckType (other))
       {
diff -Naur ns-3.25/src/core/model/command-line.cc ns-3.26/src/core/model/command-line.cc
--- ns-3.25/src/core/model/command-line.cc	2016-10-03 20:57:08.477245846 -0700
+++ ns-3.26/src/core/model/command-line.cc	2016-10-03 19:49:01.779386669 -0700
@@ -26,6 +26,7 @@
 #include <sstream>
 
 #include "command-line.h"
+#include "des-metrics.h"
 #include "log.h"
 #include "config.h"
 #include "global-value.h"
@@ -109,17 +110,17 @@
 }
 
 void
-CommandLine::Parse (int iargc, char *argv[])
+CommandLine::Parse (int argc, char *argv[])
 {
-  NS_LOG_FUNCTION (this << iargc << argv);
+  NS_LOG_FUNCTION (this << argc << argv);
 
   m_name = SystemPath::Split (argv[0]).back ();
   
-  int argc = iargc;
-  for (argc--, argv++; argc > 0; argc--, argv++)
+  int iargc = argc;
+  for (iargc--; iargc > 0; iargc--)
     {
       // remove "--" or "-" heading.
-      std::string param = *argv;
+      std::string param = argv[iargc];
       std::string::size_type cur = param.find ("--");
       if (cur == 0)
         {
@@ -152,6 +153,11 @@
         }
       HandleArgument (name, value);
     }
+
+#ifdef ENABLE_DES_METRICS
+  DesMetrics::Get ()->Initialize (argc, argv);
+#endif
+  
 }
 
 void
diff -Naur ns-3.25/src/core/model/command-line.h ns-3.26/src/core/model/command-line.h
--- ns-3.25/src/core/model/command-line.h	2016-10-03 20:57:08.478245839 -0700
+++ ns-3.26/src/core/model/command-line.h	2016-10-03 19:49:01.780386662 -0700
@@ -197,6 +197,10 @@
  *       exit (-1);
  *     }
  * \endcode
+ *
+ * \bugid{2461} Treat non-option arguments like traditional \c getopt(), by
+ * permuting non-option arguments to the end and providing a query function
+ * for the equivalent of \c optind.
  */
 class CommandLine
 {
diff -Naur ns-3.25/src/core/model/default-simulator-impl.cc ns-3.26/src/core/model/default-simulator-impl.cc
--- ns-3.25/src/core/model/default-simulator-impl.cc	2016-10-03 20:57:08.480245823 -0700
+++ ns-3.26/src/core/model/default-simulator-impl.cc	2016-10-03 19:49:01.782386647 -0700
@@ -69,7 +69,7 @@
   // before ::Run is entered, the m_currentUid will be zero
   m_currentUid = 0;
   m_currentTs = 0;
-  m_currentContext = 0xffffffff;
+  m_currentContext = Simulator::NO_CONTEXT;
   m_unscheduledEvents = 0;
   m_eventsWithContextEmpty = true;
   m_main = SystemThread::Self();
diff -Naur ns-3.25/src/core/model/default-simulator-impl.h ns-3.26/src/core/model/default-simulator-impl.h
--- ns-3.25/src/core/model/default-simulator-impl.h	2016-10-03 20:57:08.480245823 -0700
+++ ns-3.26/src/core/model/default-simulator-impl.h	2016-10-03 19:49:01.783386640 -0700
@@ -62,9 +62,9 @@
   virtual void Destroy ();
   virtual bool IsFinished (void) const;
   virtual void Stop (void);
-  virtual void Stop (Time const &delay);
-  virtual EventId Schedule (Time const &delay, EventImpl *event);
-  virtual void ScheduleWithContext (uint32_t context, Time const &delay, EventImpl *event);
+  virtual void Stop (const Time &delay);
+  virtual EventId Schedule (const Time &delay, EventImpl *event);
+  virtual void ScheduleWithContext (uint32_t context, const Time &delay, EventImpl *event);
   virtual EventId ScheduleNow (EventImpl *event);
   virtual EventId ScheduleDestroy (EventImpl *event);
   virtual void Remove (const EventId &id);
diff -Naur ns-3.25/src/core/model/deprecated.h ns-3.26/src/core/model/deprecated.h
--- ns-3.25/src/core/model/deprecated.h	2016-10-03 20:57:08.481245815 -0700
+++ ns-3.26/src/core/model/deprecated.h	2016-10-03 19:49:01.783386640 -0700
@@ -41,8 +41,21 @@
  * \snippet src/core/doc/deprecated-example.h doxygen snippet
  */
 
-#if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ > 1)
-#define NS_DEPRECATED __attribute__ ((deprecated))
+#if defined(__GNUC__)
+/* Test for GCC >= 4.1 */
+#define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100)
+#if (GCC_VERSION >= 40100)
+#define NS_DEPRECATED  __attribute__ ((deprecated))
+#endif
+#undef GCC_VERSION
+
+
+#elif defined(__clang__) || defined(__llvm__)
+#define NS_DEPRECATED  __attribute__ ((deprecated))
+
+#elif defined(_MSC_VER)
+#define NS_DEPRECATED __declspec(deprecated)
+
 #else
 #define NS_DEPRECATED
 #endif
diff -Naur ns-3.25/src/core/model/des-metrics.cc ns-3.26/src/core/model/des-metrics.cc
--- ns-3.25/src/core/model/des-metrics.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/core/model/des-metrics.cc	2016-10-03 19:49:01.783386640 -0700
@@ -0,0 +1,157 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 LLNL
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ */
+
+
+/**
+ * @file
+ * @ingroup simulator
+ * ns3::DesMetrics implementation.
+ */
+
+#include "des-metrics.h"
+#include "simulator.h"
+#include "system-path.h"
+
+#include <ctime>    // time_t, time()
+#include <sstream>
+#include <string>
+
+namespace ns3 {
+
+/* static */
+std::string DesMetrics::m_outputDir; // = "";
+
+void 
+DesMetrics::Initialize (int argc, char * argv[], std::string outDir /* = "" */ )
+{
+  if (m_initialized)
+    {
+      // Running multiple tests, so close the previous output file
+      Close ();
+    }
+
+  m_initialized = true;
+
+  std::string model_name ("desTraceFile");
+  if (argc)
+    {
+      std::string arg0 = argv[0];
+      model_name = SystemPath::Split (arg0).back ();
+    }
+  std::string jsonFile = model_name + ".json";
+  if (outDir != "")
+    {
+      DesMetrics::m_outputDir = outDir;
+    }
+  if (DesMetrics::m_outputDir != "")
+    {
+      jsonFile = SystemPath::Append (DesMetrics::m_outputDir, jsonFile);
+    }
+
+  time_t current_time;
+  time (&current_time);
+  const char * date = ctime (&current_time);
+  std::string capture_date (date, 24);  // discard trailing newline from ctime
+
+  m_os.open (jsonFile.c_str ());
+  m_os << "{" << std::endl;
+  m_os << " \"simulator_name\" : \"ns-3\"," << std::endl;
+  m_os << " \"model_name\" : \"" << model_name << "\"," << std::endl;
+  m_os << " \"capture_date\" : \"" << capture_date << "\"," << std::endl;
+  m_os << " \"command_line_arguments\" : \"";
+  if (argc)
+    {
+      for (int i = 0; i < argc; ++i) 
+        {
+          if (i > 0) m_os << " ";
+          m_os << argv[i];
+        }
+    }
+  else
+    {
+      m_os << "[argv empty or not available]";
+    }
+  m_os << "\"," << std::endl;
+  m_os << " \"events\" : [" << std::endl;
+
+  m_separator = ' ';
+ 
+}
+
+void
+DesMetrics::Trace (const Time & now, const Time & delay)
+{
+  TraceWithContext (Simulator::GetContext (), now, delay);
+}
+ 
+void
+DesMetrics::TraceWithContext (uint32_t context, const Time & now, const Time & delay)
+{
+  if (!m_initialized)
+    {
+      Initialize (0, 0);
+    }
+
+  std::ostringstream ss;
+  if (m_separator == ',')
+    {
+      ss << m_separator << std::endl;
+    }
+
+  uint32_t sendCtx = Simulator::GetContext ();
+  // Force to signed so we can show NoContext as '-1'
+  int32_t send = (sendCtx != Simulator::NO_CONTEXT) ? (int32_t)sendCtx : -1;
+  int32_t recv = (context != Simulator::NO_CONTEXT) ? (int32_t)context : -1;
+  
+  ss <<                                 "  [\""
+     << send                         << "\",\""
+     << now.GetTimeStep ()           << "\",\""
+     << recv                         << "\",\""
+     << (now + delay).GetTimeStep () << "\"]";
+
+  {
+    CriticalSection cs (m_mutex);
+    m_os << ss.str ();
+  }
+
+  m_separator = ',';
+}
+
+DesMetrics::~DesMetrics (void)
+{
+  Close ();
+}
+
+void
+DesMetrics::Close (void)
+{
+  m_os << std::endl;    // Finish the last event line
+  
+  m_os << " ]" << std::endl;
+  m_os << "}" << std::endl;
+  m_os.close ();
+
+  m_initialized = false;
+}
+
+
+
+} // namespace ns3
+
diff -Naur ns-3.25/src/core/model/des-metrics.h ns-3.26/src/core/model/des-metrics.h
--- ns-3.25/src/core/model/des-metrics.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/core/model/des-metrics.h	2016-10-03 19:49:01.784386632 -0700
@@ -0,0 +1,170 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 LLNL
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ */
+
+#ifndef DESMETRICS_H
+#define DESMETRICS_H
+
+/**
+ * @file
+ * @ingroup simulator
+ * ns3::DesMetrics declaration.
+ */
+
+#include "nstime.h"
+#include "singleton.h"
+#include "system-mutex.h"
+
+#include <stdint.h>    // uint32_t
+#include <fstream>
+#include <string>
+
+namespace ns3 {
+
+/**
+ * @ingroup simulator
+ *
+ * @brief Event trace data collector for the DES Metrics project.
+ *
+ * This feature generates a JSON file with event trace data,
+ * including the source and destination context for each
+ * event, and the (virtual) times when the event was scheduled and
+ * when it will execute.
+ *
+ * See the DES Metrics Project page: https://wilseypa.github.io/desMetrics/
+ * for more information and analysis tools.
+ *
+ * If enabled (see below), ns-3 scripts should use CommandLine to
+ * parse arguments, which will open the JSON file with the same name
+ * as the script, and write the JSON header.  Failure to use CommandLine when
+ * DES Metrics is enabled will put the trace data in the file
+ * \c desTraceFile.json instead. All examples accessible from \c test.py
+ * use CommandLine, and so generate JSON files.
+ *
+ * Output from scripts ends up in the current working directory (normally the
+ * top level directory). When \c test.py is used to run tests or examples
+ * the trace files are generated in a time-stamped subdirectory of
+ * \c testpy-output/,  which \c test.py normally deletes.
+ * To keep the output of examples, use the \c --retain argument to \c test.py.
+ *
+ * The output file has the following form:
+ * \verbatim
+{
+ "simulator_name" : "ns-3",
+ "model_name" : "ipv4-raw",
+ "capture_date" : "Fri May 27 00:34:27 2016",
+ "command_line_arguments" : "ipv4-raw [ns3-dev-test-runner-debug] --test-name=ipv4-raw --stop-on-failure --fullness=QUICK --xml --tempdir=testpy-output/2016-05-27-04-33-35-CUT --out=testpy-output/2016-05-27-04-33-35-CUT/ipv4-raw.xml",
+ "events" : [
+  ["0",0,"0",0],
+  ["1",0,"0",0],
+  ["0",0,"0",0],
+  ...
+  ["0",0,"0",0]
+ ]
+} \endverbatim
+ * The first few fields are self-explanatory. The \c event record consists of
+ * the source context, the event send time, the destination context,
+ * and the event execution time.  Times are given in the
+ * current Time resolution.
+ *
+ * <b> Enabling DES Metrics </b>
+ *
+ * Enable DES Metrics at configure time with
+ * \verbatim
+   $ waf configure ... --enable-des-metrics \endverbatim
+ *
+ * <b> Working with DES Metrics </b>
+ *
+ * Some useful shell pipelines:
+ *
+ * \li Run everything, retaining the results directory: <br/>
+ *   \code  ./test.py --nowaf --retain \endcode
+ * \li Example traces end up in \c testpy-output/, so move there: <br/>
+ *   \code cd testpy-output/$(date +"%F")*_/  \endcode 
+ *   (Remove the `_', which is to work around a Doxygen limitation.)
+ * \li Remove the traces with less than 10 events: <br/>
+ *   \code wc -l *.json | sort -nr | grep "^ *[789] " | cut -d ' ' -f 9 | xargs rm -f \endcode
+ * \li Show the largest file, and total number of trace files: <br/>
+ *   \code wc -l *.json | sort -n | tail -2 \endcode
+ *
+ */
+class DesMetrics : public Singleton<DesMetrics> 
+{
+public:
+
+  /**
+   * Open the DesMetrics trace file and print the header.
+   *
+   * The trace file will have the same base name as the main program, 
+   * '.json' as the extension. 
+   *
+   * \param argc [in] Command line argument count.
+   * \param argv [in] Command line arguments.
+   * \param outDir [in] Directory where the trace file should be written.
+   */
+  void Initialize (int argc, char * argv[], std::string outDir = "");
+
+  /**
+   * Trace an event to self at the time it is scheduled.
+   *
+   * \param now [in] The local simulation time. 
+   * \param delay [in] The delay to the event. 
+   */
+  void Trace (const Time & now, const Time & delay); 
+
+  /**
+   * Trace an event (with context) at the time it is scheduled.
+   *
+   * \param context [in] The context (NodeId) which will receive the event.
+   * \param now [in] The local simulation time.
+   * \param delay [in] The delay to the event.
+   */
+  void TraceWithContext (uint32_t context,  const Time & now, const Time & delay);
+
+  /**
+   * Destructor, closes the trace file.
+   */
+  ~DesMetrics (void);
+
+private:
+
+  /** Close the output file. */
+  void Close (void);
+
+  /**
+   * Cache the last-used output directory.
+   *
+   * This is enables repeated/re-entrant use of CommandLine, for example
+   * in \c command-line-test-suite.cc
+   */
+  static std::string m_outputDir;
+  
+  bool m_initialized;    //!< Have we been initialized.
+  std::ofstream m_os;    //!< The output json trace file stream.
+  char m_separator;      //!< The separator between event records.
+
+  /** Mutex to control access to the output file. */
+  SystemMutex m_mutex;
+  
+};  // class DesMetrics
+
+
+} // namespace ns3
+
+#endif /* DESMETRICS_H */
diff -Naur ns-3.25/src/core/model/fatal-error.h ns-3.26/src/core/model/fatal-error.h
--- ns-3.25/src/core/model/fatal-error.h	2016-10-03 20:57:08.485245784 -0700
+++ ns-3.26/src/core/model/fatal-error.h	2016-10-03 19:49:01.787386610 -0700
@@ -55,16 +55,15 @@
 /**
  * \ingroup fatal
  *
- * \brief Fatal error reporting implementation.
+ * \brief Fatal error reporting with no message, implementation.
  *
  * When this macro is hit at runtime the error details will
- * printed to \c stderr, including the supplied \c msg,
- * and the file name and line number.  Optionally, if \c fatal is true,
- * the macro will invoke \c std::terminate().  If \c fatal is false,
+ * printed to \c stderr, including the file name and line number.
+ * Optionally, if \c fatal is true, the macro
+ * will invoke \c std::terminate().  If \c fatal is false,
  * the invoking function should return an error code to its caller,
  * which is expected to call NS_FATAL_ERROR to cause termination.
  *
- * \param [in] msg The error message to print, if not empty.
  * \param [in] fatal Call \c std::terminate() if true.
  *
  * This macro is enabled unconditionally in all builds,
@@ -81,6 +80,24 @@
   while (false)
 
 
+/**
+ * \ingroup fatal
+ *
+ * \brief Fatal error reporting with a message, implementation.
+ *
+ * When this macro is hit at runtime the error details will
+ * printed to \c stderr, including the message, file name and line number.
+ * Optionally, if \c fatal is true, the macro
+ * will invoke \c std::terminate().  If \c fatal is false,
+ * the invoking function should return an error code to its caller,
+ * which is expected to call NS_FATAL_ERROR to cause termination.
+ *
+ * \param [in] msg The error message to print, if not empty.
+ * \param [in] fatal Call \c std::terminate() if true.
+ *
+ * This macro is enabled unconditionally in all builds,
+ * including debug and optimized builds.
+ */
 #define NS_FATAL_ERROR_IMPL(msg,fatal) \
   do                                                    \
     {                                                   \
diff -Naur ns-3.25/src/core/model/global-value.h ns-3.26/src/core/model/global-value.h
--- ns-3.25/src/core/model/global-value.h	2016-10-03 20:57:08.486245777 -0700
+++ ns-3.26/src/core/model/global-value.h	2016-10-03 19:49:01.789386595 -0700
@@ -38,18 +38,34 @@
 /**
  * \ingroup Core
  *
- * \brief hold a so-called 'global value'.
+ * \brief Hold a so-called 'global value'.
+ *
+ * A GlobalValue will get its value from (in order):
+ *   - The initial value configured where it is defined,
+ *   - From the \c NS_GLOBAL_VALUE environment variable,
+ *   - From the command line,
+ *   - By explicit call to SetValue() or Bind().
  *
  * Instances of this class are expected to be allocated as static 
  * global variables and should be used to store configurable global state.
- * GlobalValues can be set directly by calling ns3::GlobalValue::SetValue
- * but they can also be set through the NS_GLOBAL_VALUE environment variable.
- * For example, NS_GLOBAL_VALUE='Name=Value;OtherName=OtherValue;' would set
- * global values Name and OtherName to Value and OtherValue respectively. 
+ * For example:
+ * \code
+ *   // source.cc:
+ *   static GlobalValue g_myGlobal =
+ *     GlobalValue ("myGlobal", "My global value for ...",
+ *                  IntegerValue (12),
+ *                  MakeIntegerChecker ());
+ * \endcode
+ *
+ * GlobalValues can be set directly by calling GlobalValue::SetValue()
+ * but they can also be set through the \c NS_GLOBAL_VALUE environment variable.
+ * For example, \c NS_GLOBAL_VALUE='Name=Value;OtherName=OtherValue;' would set
+ * global values \c Name and \c OtherName to \c Value and \c OtherValue,
+ * respectively. 
  *
- * Users of the ns3::CommandLine class also get the ability to set global 
- * values through commandline arguments to their program: --Name=Value will
- * set global value Name to Value.
+ * Users of the CommandLine class also get the ability to set global 
+ * values through command line arguments to their program:
+ * \c --Name=Value will set global value \c Name to \c Value.
  */
 class GlobalValue
 {
diff -Naur ns-3.25/src/core/model/int64x64.cc ns-3.26/src/core/model/int64x64.cc
--- ns-3.25/src/core/model/int64x64.cc	2016-10-03 20:57:08.494245714 -0700
+++ ns-3.26/src/core/model/int64x64.cc	2016-10-03 19:49:01.796386542 -0700
@@ -74,7 +74,7 @@
   int64_t hi = absVal.GetHigh ();
 
   // Save stream format flags
-  const std::streamsize precision = os.precision ();
+  std::size_t precision = static_cast<std::size_t> (os.precision ());
   std::ios_base::fmtflags ff = os.flags ();
   const bool floatfield = os.flags () & std::ios_base::floatfield;
   os << std::setw (1) << std::noshowpos;
@@ -86,7 +86,7 @@
 
 
   int64x64_t low(0, absVal.GetLow ());
-  int places = 0;    // Number of decimal places printed so far
+  std::size_t places = 0;    // Number of decimal places printed so far
   bool more = true;  // Should we print more digits?
   
   NS_LOG_LOGIC (std::endl
diff -Naur ns-3.25/src/core/model/log.cc ns-3.26/src/core/model/log.cc
--- ns-3.25/src/core/model/log.cc	2016-10-03 20:57:08.497245691 -0700
+++ ns-3.26/src/core/model/log.cc	2016-10-03 19:49:01.799386520 -0700
@@ -638,4 +638,28 @@
 {
 }
 
+template<>
+ParameterLogger&
+ParameterLogger::operator<< <std::string>(const std::string param)
+{
+  if (m_first)
+    {
+      m_os << "\"" << param << "\"";
+      m_first = false;
+    }
+  else
+    {
+      m_os << ", \"" << param << "\"";
+    }
+  return *this;
+}
+
+template<>
+ParameterLogger&
+ParameterLogger::operator<< <const char *>(const char * param)
+{
+  (*this) << std::string (param);
+  return *this;
+}
+
 } // namespace ns3
diff -Naur ns-3.25/src/core/model/log.h ns-3.26/src/core/model/log.h
--- ns-3.25/src/core/model/log.h	2016-10-03 20:57:08.498245683 -0700
+++ ns-3.26/src/core/model/log.h	2016-10-03 19:49:01.800386513 -0700
@@ -433,21 +433,44 @@
    * \return This ParameterLogger, so it's chainable.
    */
   template<typename T>
-  ParameterLogger& operator<< (T param)
-  {
-    if (m_first)
-      {
-        m_os << param;
-        m_first = false;
-      }
-    else
-      {
-        m_os << ", " << param;
-      }
-    return *this;
-  }
+  ParameterLogger& operator<< (T param);
+
 };
 
+template<typename T>
+ParameterLogger&
+ParameterLogger::operator<< (T param)
+{
+  if (m_first)
+    {
+      m_os << param;
+      m_first = false;
+    }
+  else
+    {
+      m_os << ", " << param;
+    }
+  return *this;
+}
+
+/**
+ * Specialization for strings.
+ * \param [in] param The function parameter.
+ * \return This ParameterLogger, so it's chainable.
+ */
+template<>
+ParameterLogger&
+ParameterLogger::operator<< <std::string>(const std::string param);
+  
+/**
+ * Specialization for C-strings.
+ * \param [in] param The function parameter.
+ * \return This ParameterLogger, so it's chainable.
+ */
+template<>
+ParameterLogger&
+ParameterLogger::operator<< <const char *>(const char * param);
+  
 } // namespace ns3
 
 /**@}*/  // \ingroup logging
diff -Naur ns-3.25/src/core/model/object.cc ns-3.26/src/core/model/object.cc
--- ns-3.25/src/core/model/object.cc	2016-10-03 20:57:08.506245621 -0700
+++ ns-3.26/src/core/model/object.cc	2016-10-03 19:49:01.809386446 -0700
@@ -204,6 +204,12 @@
         }
     }
 }
+bool
+Object::IsInitialized (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_initialized;
+}
 void 
 Object::Dispose (void)
 {
@@ -251,13 +257,6 @@
   NS_ASSERT (CheckLoose ());
   NS_ASSERT (o->CheckLoose ());
 
-  if (DoGetObject (o->GetInstanceTypeId ()))
-    {
-      NS_FATAL_ERROR ("Object::AggregateObject(): "
-                      "Multiple aggregation of objects of type " << 
-                      o->GetInstanceTypeId ().GetName ());
-    }
-
   Object *other = PeekPointer (o);
   // first create the new aggregate buffer.
   uint32_t total = m_aggregates->n + other->m_aggregates->n;
@@ -274,6 +273,14 @@
   for (uint32_t i = 0; i < other->m_aggregates->n; i++)
     {
       aggregates->buffer[m_aggregates->n+i] = other->m_aggregates->buffer[i];
+      const TypeId typeId = other->m_aggregates->buffer[i]->GetInstanceTypeId ();
+      if (DoGetObject (typeId))
+        {
+          NS_FATAL_ERROR ("Object::AggregateObject(): "
+                          "Multiple aggregation of objects of type " <<
+                          other->GetInstanceTypeId () <<
+                          " on objects of type " << typeId);
+        }
       UpdateSortedArray (aggregates, m_aggregates->n + i);
     }
 
diff -Naur ns-3.25/src/core/model/object-factory.cc ns-3.26/src/core/model/object-factory.cc
--- ns-3.25/src/core/model/object-factory.cc	2016-10-03 20:57:08.504245637 -0700
+++ ns-3.26/src/core/model/object-factory.cc	2016-10-03 19:49:01.806386468 -0700
@@ -188,6 +188,7 @@
             }
         }
     }
+  NS_ABORT_MSG_IF (is.bad (), "Failure to parse " << parameters);
   return is;
 }
 
diff -Naur ns-3.25/src/core/model/object.h ns-3.26/src/core/model/object.h
--- ns-3.25/src/core/model/object.h	2016-10-03 20:57:08.507245613 -0700
+++ ns-3.26/src/core/model/object.h	2016-10-03 19:49:01.810386438 -0700
@@ -219,6 +219,13 @@
    */
   void Initialize (void);
 
+  /**
+   * Check if the object has been initialized.
+   *
+   * \brief returns true if the object has been initialized. 
+   */
+  bool IsInitialized (void) const;
+
 protected:
   /**
    * Notify all Objects aggregated to this one of a new Object being
diff -Naur ns-3.25/src/core/model/realtime-simulator-impl.cc ns-3.26/src/core/model/realtime-simulator-impl.cc
--- ns-3.25/src/core/model/realtime-simulator-impl.cc	2016-10-03 20:57:08.511245582 -0700
+++ ns-3.26/src/core/model/realtime-simulator-impl.cc	2016-10-03 19:49:01.814386409 -0700
@@ -88,7 +88,7 @@
   // before ::Run is entered, the m_currentUid will be zero
   m_currentUid = 0;
   m_currentTs = 0;
-  m_currentContext = 0xffffffff;
+  m_currentContext = Simulator::NO_CONTEXT;
   m_unscheduledEvents = 0;
 
   m_main = SystemThread::Self();
diff -Naur ns-3.25/src/core/model/realtime-simulator-impl.h ns-3.26/src/core/model/realtime-simulator-impl.h
--- ns-3.25/src/core/model/realtime-simulator-impl.h	2016-10-03 20:57:08.512245575 -0700
+++ ns-3.26/src/core/model/realtime-simulator-impl.h	2016-10-03 19:49:01.815386401 -0700
@@ -92,9 +92,9 @@
   virtual void Destroy ();
   virtual bool IsFinished (void) const;
   virtual void Stop (void);
-  virtual void Stop (Time const &delay);
-  virtual EventId Schedule (Time const &delay, EventImpl *event);
-  virtual void ScheduleWithContext (uint32_t context, Time const &delay, EventImpl *event);
+  virtual void Stop (const Time &delay);
+  virtual EventId Schedule (const Time &delay, EventImpl *event);
+  virtual void ScheduleWithContext (uint32_t context, const Time &delay, EventImpl *event);
   virtual EventId ScheduleNow (EventImpl *event);
   virtual EventId ScheduleDestroy (EventImpl *event);
   virtual void Remove (const EventId &ev);
@@ -109,9 +109,9 @@
   virtual uint32_t GetContext (void) const;
 
   /** \copydoc ScheduleWithContext(uint32_t,const Time&,EventImpl*) */
-  void ScheduleRealtimeWithContext (uint32_t context, Time const &delay, EventImpl *event);
+  void ScheduleRealtimeWithContext (uint32_t context, const Time &delay, EventImpl *event);
   /** \copydoc Schedule(const Time&,EventImpl*) */
-  void ScheduleRealtime (Time const &delay, EventImpl *event);
+  void ScheduleRealtime (const Time &delay, EventImpl *event);
   /**
    * \copybrief ScheduleNow(EventImpl*)
    *
diff -Naur ns-3.25/src/core/model/ref-count-base.cc ns-3.26/src/core/model/ref-count-base.cc
--- ns-3.25/src/core/model/ref-count-base.cc	2016-10-03 20:57:08.512245575 -0700
+++ ns-3.26/src/core/model/ref-count-base.cc	2016-10-03 19:49:01.815386401 -0700
@@ -27,7 +27,8 @@
 /**
  * \file
  * \ingroup ptr
- * (Deprecated) ns3::RefCountBase implementation.
+ * ns3::RefCountBase implementation.
+ * \deprecated See \ref ns3::SimpleRefCount
  */
 
 namespace ns3 {
diff -Naur ns-3.25/src/core/model/ref-count-base.h ns-3.26/src/core/model/ref-count-base.h
--- ns-3.25/src/core/model/ref-count-base.h	2016-10-03 20:57:08.512245575 -0700
+++ ns-3.26/src/core/model/ref-count-base.h	2016-10-03 19:49:01.815386401 -0700
@@ -28,7 +28,8 @@
 /**
  * \file
  * \ingroup ptr
- * (Deprecated) ns3::RefCountBase declaration.
+ * ns3::RefCountBase declaration.
+ * \deprecated See \ref ns3::SimpleRefCount
  */
 
 namespace ns3 {
diff -Naur ns-3.25/src/core/model/rng-seed-manager.cc ns-3.26/src/core/model/rng-seed-manager.cc
--- ns-3.25/src/core/model/rng-seed-manager.cc	2016-10-03 20:57:08.513245567 -0700
+++ ns-3.26/src/core/model/rng-seed-manager.cc	2016-10-03 19:49:01.816386394 -0700
@@ -42,7 +42,10 @@
 static uint64_t g_nextStreamIndex = 0;
 /**
  * \relates RngSeedManager
- * The random number generator seed number global value.
+ * The random number generator seed number global value.  This is used to
+ * generate an new master PRNG sequence.  It is typically not modified
+ * by user programs; the variable RngRun is preferred for independent
+ * replications.
  *
  * This is accessible as "--RngSeed" from CommandLine.
  */
@@ -52,12 +55,15 @@
                                    ns3::MakeIntegerChecker<uint32_t> ());
 /**
  * \relates RngSeedManager
- * The random number generator run number global value.
+ * The random number generator substream index.  This is used to generate
+ * new PRNG sequences for all streams (random variables) in such a manner
+ * that the streams remain uncorrelated.  Incrementing this variable can
+ * be used for independent replications.
  *
  * This is accessible as "--RngRun" from CommandLine.
  */
 static ns3::GlobalValue g_rngRun ("RngRun", 
-                                  "The run number used to modify the global seed",
+                                  "The substream index used for all streams",
                                   ns3::IntegerValue (1),
                                   ns3::MakeIntegerChecker<int64_t> ());
 
diff -Naur ns-3.25/src/core/model/simulator.cc ns-3.26/src/core/model/simulator.cc
--- ns-3.25/src/core/model/simulator.cc	2016-10-03 20:57:08.517245536 -0700
+++ ns-3.26/src/core/model/simulator.cc	2016-10-03 19:49:01.820386364 -0700
@@ -23,6 +23,7 @@
 #include "scheduler.h"
 #include "map-scheduler.h"
 #include "event-impl.h"
+#include "des-metrics.h"
 
 #include "ptr.h"
 #include "string.h"
@@ -96,7 +97,7 @@
 static void
 NodePrinter (std::ostream &os)
 {
-  if (Simulator::GetContext () == 0xffffffff)
+  if (Simulator::GetContext () == Simulator::NO_CONTEXT)
     {
       os << "-1";
     }
@@ -249,6 +250,9 @@
 void
 Simulator::ScheduleWithContext (uint32_t context, const Time &delay, EventImpl *impl)
 {
+#ifdef ENABLE_DES_METRICS
+  DesMetrics::Get ()->TraceWithContext (context, Now (), delay);
+#endif
   return GetImpl ()->ScheduleWithContext (context, delay, impl);
 }
 EventId
@@ -259,11 +263,17 @@
 EventId 
 Simulator::DoSchedule (Time const &time, EventImpl *impl)
 {
+#ifdef ENABLE_DES_METRICS
+  DesMetrics::Get ()->Trace (Now (), time);
+#endif
   return GetImpl ()->Schedule (time, impl);
 }
 EventId 
 Simulator::DoScheduleNow (EventImpl *impl)
 {
+#ifdef ENABLE_DES_METRICS
+  DesMetrics::Get ()->Trace (Now (), Time (0));
+#endif
   return GetImpl ()->ScheduleNow (impl);
 }
 EventId 
diff -Naur ns-3.25/src/core/model/simulator.h ns-3.26/src/core/model/simulator.h
--- ns-3.25/src/core/model/simulator.h	2016-10-03 20:57:08.518245528 -0700
+++ ns-3.26/src/core/model/simulator.h	2016-10-03 19:49:01.821386356 -0700
@@ -64,8 +64,6 @@
  * A simple example of how to use the Simulator class to schedule events
  * is shown in sample-simulator.cc:
  * @include src/core/examples/sample-simulator.cc
- *
- * @todo Define what the simulation or event context means.
  */
 class Simulator 
 {
@@ -166,9 +164,35 @@
    * current simulation time.
    * @param [in] delay The stop time, relative to the current time.
    */
-  static void Stop (Time const &delay);
+  static void Stop (const Time &delay);
 
   /**
+   * Get the current simulation context.
+   *
+   * The simulation context is the ns-3 notion of a Logical Process.
+   * Events in a single context should only modify state associated with
+   * that context. Events for objects in other contexts should be
+   * scheduled with ScheduleWithContext() to track the context switches.
+   * In other words, events in different contexts should be mutually
+   * thread safe, by not modify overlapping model state.
+   *
+   * In circumstances where the context can't be determined, such as
+   * during object initialization, the \c enum value \c NO_CONTEXT
+   * should be used.
+   *
+   * @return The current simulation context
+   */
+  static uint32_t GetContext (void);
+
+  /** Context enum values. */
+  enum {
+    /**
+     * Flag for events not associated with any particular context.
+     */
+    NO_CONTEXT = 0xffffffff
+  };
+  
+  /**
    * @name Schedule events (in the same context) to run at a future time.
    */
   /** @{ */
@@ -181,8 +205,8 @@
    * When the event expires (when it becomes due to be run), the 
    * input method will be invoked on the input object.
    *
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
    * @param [in] delay The relative expiration time of the event.
    * @param [in] mem_ptr Member method pointer to invoke
    * @param [in] obj The object on which to invoke the member method
@@ -193,9 +217,9 @@
 
   /**
    * @see Schedule(const Time&,MEM,OBJ)
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
-   * @tparam T1 @inferred Type of first argument.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
+   * @tparam T1 @deduced Type of first argument.
    * @param [in] delay The relative expiration time of the event.
    * @param [in] mem_ptr Member method pointer to invoke
    * @param [in] obj The object on which to invoke the member method
@@ -207,10 +231,10 @@
 
   /**
    * @see Schedule(const Time&,MEM,OBJ)
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
-   * @tparam T1 @inferred Type of first argument.
-   * @tparam T2 @inferred Type of second argument.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
+   * @tparam T1 @deduced Type of first argument.
+   * @tparam T2 @deduced Type of second argument.
    * @param [in] delay The relative expiration time of the event.
    * @param [in] mem_ptr Member method pointer to invoke
    * @param [in] obj The object on which to invoke the member method
@@ -223,11 +247,11 @@
 
   /**
    * @see Schedule(const Time&,MEM,OBJ)
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
-   * @tparam T1 @inferred Type of first argument.
-   * @tparam T2 @inferred Type of second argument.
-   * @tparam T3 @inferred Type of third argument.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
+   * @tparam T1 @deduced Type of first argument.
+   * @tparam T2 @deduced Type of second argument.
+   * @tparam T3 @deduced Type of third argument.
    * @param [in] delay The relative expiration time of the event.
    * @param [in] mem_ptr Member method pointer to invoke
    * @param [in] obj The object on which to invoke the member method
@@ -242,12 +266,12 @@
 
   /**
    * @see Schedule(const Time&,MEM,OBJ)
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
-   * @tparam T1 @inferred Type of first argument.
-   * @tparam T2 @inferred Type of second argument.
-   * @tparam T3 @inferred Type of third argument.
-   * @tparam T4 @inferred Type of fourth argument.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
+   * @tparam T1 @deduced Type of first argument.
+   * @tparam T2 @deduced Type of second argument.
+   * @tparam T3 @deduced Type of third argument.
+   * @tparam T4 @deduced Type of fourth argument.
    * @param [in] delay The relative expiration time of the event.
    * @param [in] mem_ptr Member method pointer to invoke
    * @param [in] obj The object on which to invoke the member method
@@ -263,13 +287,13 @@
 
   /**
    * @see Schedule(const Time&,MEM,OBJ)
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
-   * @tparam T1 @inferred Type of first argument.
-   * @tparam T2 @inferred Type of second argument.
-   * @tparam T3 @inferred Type of third argument.
-   * @tparam T4 @inferred Type of fourth argument.
-   * @tparam T5 @inferred Type of fifth argument.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
+   * @tparam T1 @deduced Type of first argument.
+   * @tparam T2 @deduced Type of second argument.
+   * @tparam T3 @deduced Type of third argument.
+   * @tparam T4 @deduced Type of fourth argument.
+   * @tparam T5 @deduced Type of fifth argument.
    * @param [in] delay The relative expiration time of the event.
    * @param [in] mem_ptr Member method pointer to invoke
    * @param [in] obj The object on which to invoke the member method
@@ -285,7 +309,10 @@
   static EventId Schedule (Time const &delay, MEM mem_ptr, OBJ obj, 
                            T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
   /**
-   * @copybrief Schedule(const Time&,MEM,OBJ)
+   * Schedule an event to expire after @p delay.
+   * This can be thought of as scheduling an event
+   * for the current simulation time plus the @p delay  passed as a
+   * parameter.
    *
    * When the event expires (when it becomes due to be run), the
    * function will be invoked with any supplied arguments.
@@ -297,8 +324,8 @@
 
   /**
    * @see Schedule(const Time&,(*)())
-   * @tparam U1 @inferred Formal type of the first argument to the function.
-   * @tparam T1 @inferred Actual type of the first argument.
+   * @tparam U1 @deduced Formal type of the first argument to the function.
+   * @tparam T1 @deduced Actual type of the first argument.
    * @param [in] delay The relative expiration time of the event.
    * @param [in] f The function to invoke
    * @param [in] a1 The first argument to pass to the function to invoke.
@@ -309,10 +336,10 @@
 
   /**
    * @see Schedule(const Time&,(*)())
-   * @tparam U1 @inferred Formal type of the first argument to the function.
-   * @tparam U2 @inferred Formal type of the second argument to the function.
-   * @tparam T1 @inferred Actual type of the first argument.
-   * @tparam T2 @inferred Actual type of the second argument.
+   * @tparam U1 @deduced Formal type of the first argument to the function.
+   * @tparam U2 @deduced Formal type of the second argument to the function.
+   * @tparam T1 @deduced Actual type of the first argument.
+   * @tparam T2 @deduced Actual type of the second argument.
    * @param [in] delay The relative expiration time of the event.
    * @param [in] f The function to invoke
    * @param [in] a1 The first argument to pass to the function to invoke
@@ -325,12 +352,12 @@
 
   /**
    * @see Schedule(const Time&,void(*)())
-   * @tparam U1 @inferred Formal type of the first argument to the function.
-   * @tparam U2 @inferred Formal type of the second argument to the function.
-   * @tparam U3 @inferred Formal type of the third argument to the function.
-   * @tparam T1 @inferred Actual type of the first argument.
-   * @tparam T2 @inferred Actual type of the second argument.
-   * @tparam T3 @inferred Actual type of the third argument.
+   * @tparam U1 @deduced Formal type of the first argument to the function.
+   * @tparam U2 @deduced Formal type of the second argument to the function.
+   * @tparam U3 @deduced Formal type of the third argument to the function.
+   * @tparam T1 @deduced Actual type of the first argument.
+   * @tparam T2 @deduced Actual type of the second argument.
+   * @tparam T3 @deduced Actual type of the third argument.
    * @param [in] delay The relative expiration time of the event.
    * @param [in] f The function to invoke
    * @param [in] a1 The first argument to pass to the function to invoke
@@ -344,14 +371,14 @@
 
   /**
    * @see Schedule(const Time&,(*)(void))
-   * @tparam U1 @inferred Formal type of the first argument to the function.
-   * @tparam U2 @inferred Formal type of the second argument to the function.
-   * @tparam U3 @inferred Formal type of the third argument to the function.
-   * @tparam U4 @inferred Formal type of the fourth argument to the function.
-   * @tparam T1 @inferred Actual type of the first argument.
-   * @tparam T2 @inferred Actual type of the second argument.
-   * @tparam T3 @inferred Actual type of the third argument.
-   * @tparam T4 @inferred Actual type of the fourth argument.
+   * @tparam U1 @deduced Formal type of the first argument to the function.
+   * @tparam U2 @deduced Formal type of the second argument to the function.
+   * @tparam U3 @deduced Formal type of the third argument to the function.
+   * @tparam U4 @deduced Formal type of the fourth argument to the function.
+   * @tparam T1 @deduced Actual type of the first argument.
+   * @tparam T2 @deduced Actual type of the second argument.
+   * @tparam T3 @deduced Actual type of the third argument.
+   * @tparam T4 @deduced Actual type of the fourth argument.
    * @param [in] delay The relative expiration time of the event.
    * @param [in] f The function to invoke
    * @param [in] a1 The first argument to pass to the function to invoke
@@ -366,16 +393,16 @@
 
   /**
    * @see Schedule(const Time&,void(*)(void))
-   * @tparam U1 @inferred Formal type of the first argument to the function.
-   * @tparam U2 @inferred Formal type of the second argument to the function.
-   * @tparam U3 @inferred Formal type of the third argument to the function.
-   * @tparam U4 @inferred Formal type of the fourth argument to the function.
-   * @tparam U5 @inferred Formal type of the fifth argument to the function.
-   * @tparam T1 @inferred Actual type of the first argument.
-   * @tparam T2 @inferred Actual type of the second argument.
-   * @tparam T3 @inferred Actual type of the third argument.
-   * @tparam T4 @inferred Actual type of the fourth argument.
-   * @tparam T5 @inferred Actual type of the fifth argument.
+   * @tparam U1 @deduced Formal type of the first argument to the function.
+   * @tparam U2 @deduced Formal type of the second argument to the function.
+   * @tparam U3 @deduced Formal type of the third argument to the function.
+   * @tparam U4 @deduced Formal type of the fourth argument to the function.
+   * @tparam U5 @deduced Formal type of the fifth argument to the function.
+   * @tparam T1 @deduced Actual type of the first argument.
+   * @tparam T2 @deduced Actual type of the second argument.
+   * @tparam T3 @deduced Actual type of the third argument.
+   * @tparam T4 @deduced Actual type of the fourth argument.
+   * @tparam T5 @deduced Actual type of the fifth argument.
    * @param [in] delay The relative expiration time of the event.
    * @param [in] f The function to invoke
    * @param [in] a1 The first argument to pass to the function to invoke
@@ -403,8 +430,8 @@
    * This method is thread-safe: it can be called from any thread.
    *
    * @see Schedule(const Time&,MEM,OBJ)
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
    * @param [in] context User-specified context parameter
    * @param [in] delay The relative expiration time of the event.
    * @param [in] mem_ptr Member method pointer to invoke
@@ -415,9 +442,9 @@
 
   /**
    * @see ScheduleWithContext(uint32_t,const Time&,MEM,OBJ)
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
-   * @tparam T1 @inferred Type of first argument.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
+   * @tparam T1 @deduced Type of first argument.
    * @param [in] context User-specified context parameter
    * @param [in] delay The relative expiration time of the event.
    * @param [in] mem_ptr Member method pointer to invoke
@@ -429,10 +456,10 @@
 
   /**
    * @see ScheduleWithContext(uint32_t,const Time&,MEM,OBJ)
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
-   * @tparam T1 @inferred Type of first argument.
-   * @tparam T2 @inferred Type of second argument.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
+   * @tparam T1 @deduced Type of first argument.
+   * @tparam T2 @deduced Type of second argument.
    * @param [in] context User-specified context parameter
    * @param [in] delay The relative expiration time of the event.
    * @param [in] mem_ptr Member method pointer to invoke
@@ -445,11 +472,11 @@
 
   /**
    * @see ScheduleWithContext(uint32_t,const Time&,MEM,OBJ)
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
-   * @tparam T1 @inferred Type of first argument.
-   * @tparam T2 @inferred Type of second argument.
-   * @tparam T3 @inferred Type of third argument.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
+   * @tparam T1 @deduced Type of first argument.
+   * @tparam T2 @deduced Type of second argument.
+   * @tparam T3 @deduced Type of third argument.
    * @param [in] context User-specified context parameter
    * @param [in] delay The relative expiration time of the event.
    * @param [in] mem_ptr Member method pointer to invoke
@@ -464,12 +491,12 @@
 
   /**
    * @see ScheduleWithContext(uint32_t,const Time&,MEM,OBJ)
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
-   * @tparam T1 @inferred Type of first argument.
-   * @tparam T2 @inferred Type of second argument.
-   * @tparam T3 @inferred Type of third argument.
-   * @tparam T4 @inferred Type of fourth argument.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
+   * @tparam T1 @deduced Type of first argument.
+   * @tparam T2 @deduced Type of second argument.
+   * @tparam T3 @deduced Type of third argument.
+   * @tparam T4 @deduced Type of fourth argument.
    * @param [in] context User-specified context parameter
    * @param [in] delay The relative expiration time of the event.
    * @param [in] mem_ptr Member method pointer to invoke
@@ -485,13 +512,13 @@
 
   /**
    * @see ScheduleWithContext(uint32_t,const Time&,MEM,OBJ)
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
-   * @tparam T1 @inferred Type of first argument.
-   * @tparam T2 @inferred Type of second argument.
-   * @tparam T3 @inferred Type of third argument.
-   * @tparam T4 @inferred Type of fourth argument.
-   * @tparam T5 @inferred Type of fifth argument.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
+   * @tparam T1 @deduced Type of first argument.
+   * @tparam T2 @deduced Type of second argument.
+   * @tparam T3 @deduced Type of third argument.
+   * @tparam T4 @deduced Type of fourth argument.
+   * @tparam T5 @deduced Type of fifth argument.
    * @param [in] context User-specified context parameter
    * @param [in] delay The relative expiration time of the event.
    * @param [in] mem_ptr Member method pointer to invoke
@@ -507,7 +534,9 @@
   static void ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj, 
                                    T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
   /**
-   * @copybrief ScheduleWithContext(uint32_t,const Time&,MEM,OBJ)
+   * Schedule an event with the given context.
+   * A context of 0xffffffff means no context is specified.
+   * This method is thread-safe: it can be called from any thread.
    *
    * When the event expires (when it becomes due to be run), the
    * function will be invoked with any supplied arguments.
@@ -521,8 +550,8 @@
 
   /**
    * @see ScheduleWithContext(uint32_t,const Time&,(*)())
-   * @tparam U1 @inferred Formal type of the first argument to the function.
-   * @tparam T1 @inferred Actual type of the first argument.
+   * @tparam U1 @deduced Formal type of the first argument to the function.
+   * @tparam T1 @deduced Actual type of the first argument.
    * @param [in] context User-specified context parameter
    * @param [in] delay The relative expiration time of the event.
    * @param [in] f The function to invoke
@@ -534,10 +563,10 @@
 
   /**
    * @see ScheduleWithContext(uint32_t,const Time&,(*)())
-   * @tparam U1 @inferred Formal type of the first argument to the function.
-   * @tparam U2 @inferred Formal type of the second argument to the function.
-   * @tparam T1 @inferred Actual type of the first argument.
-   * @tparam T2 @inferred Actual type of the second argument.
+   * @tparam U1 @deduced Formal type of the first argument to the function.
+   * @tparam U2 @deduced Formal type of the second argument to the function.
+   * @tparam T1 @deduced Actual type of the first argument.
+   * @tparam T2 @deduced Actual type of the second argument.
    * @param [in] context User-specified context parameter
    * @param [in] delay The relative expiration time of the event.
    * @param [in] f The function to invoke
@@ -550,12 +579,12 @@
 
   /**
    * @see ScheduleWithContext(uint32_t,const Time&,(*)())
-   * @tparam U1 @inferred Formal type of the first argument to the function.
-   * @tparam U2 @inferred Formal type of the second argument to the function.
-   * @tparam U3 @inferred Formal type of the third argument to the function.
-   * @tparam T1 @inferred Actual type of the first argument.
-   * @tparam T2 @inferred Actual type of the second argument.
-   * @tparam T3 @inferred Actual type of the third argument.
+   * @tparam U1 @deduced Formal type of the first argument to the function.
+   * @tparam U2 @deduced Formal type of the second argument to the function.
+   * @tparam U3 @deduced Formal type of the third argument to the function.
+   * @tparam T1 @deduced Actual type of the first argument.
+   * @tparam T2 @deduced Actual type of the second argument.
+   * @tparam T3 @deduced Actual type of the third argument.
    * @param [in] context User-specified context parameter
    * @param [in] delay The relative expiration time of the event.
    * @param [in] f The function to invoke
@@ -569,14 +598,14 @@
 
   /**
    * @see ScheduleWithContext(uint32_t,const Time&,(*)())
-   * @tparam U1 @inferred Formal type of the first argument to the function.
-   * @tparam U2 @inferred Formal type of the second argument to the function.
-   * @tparam U3 @inferred Formal type of the third argument to the function.
-   * @tparam U4 @inferred Formal type of the fourth argument to the function.
-   * @tparam T1 @inferred Actual type of the first argument.
-   * @tparam T2 @inferred Actual type of the second argument.
-   * @tparam T3 @inferred Actual type of the third argument.
-   * @tparam T4 @inferred Actual type of the fourth argument.
+   * @tparam U1 @deduced Formal type of the first argument to the function.
+   * @tparam U2 @deduced Formal type of the second argument to the function.
+   * @tparam U3 @deduced Formal type of the third argument to the function.
+   * @tparam U4 @deduced Formal type of the fourth argument to the function.
+   * @tparam T1 @deduced Actual type of the first argument.
+   * @tparam T2 @deduced Actual type of the second argument.
+   * @tparam T3 @deduced Actual type of the third argument.
+   * @tparam T4 @deduced Actual type of the fourth argument.
    * @param [in] context User-specified context parameter
    * @param [in] delay The relative expiration time of the event.
    * @param [in] f The function to invoke
@@ -591,16 +620,16 @@
 
   /**
    * @see ScheduleWithContext(uint32_t,const Time&,(*)())
-   * @tparam U1 @inferred Formal type of the first argument to the function.
-   * @tparam U2 @inferred Formal type of the second argument to the function.
-   * @tparam U3 @inferred Formal type of the third argument to the function.
-   * @tparam U4 @inferred Formal type of the fourth argument to the function.
-   * @tparam U5 @inferred Formal type of the fifth argument to the function.
-   * @tparam T1 @inferred Actual type of the first argument.
-   * @tparam T2 @inferred Actual type of the second argument.
-   * @tparam T3 @inferred Actual type of the third argument.
-   * @tparam T4 @inferred Actual type of the fourth argument.
-   * @tparam T5 @inferred Actual type of the fifth argument.
+   * @tparam U1 @deduced Formal type of the first argument to the function.
+   * @tparam U2 @deduced Formal type of the second argument to the function.
+   * @tparam U3 @deduced Formal type of the third argument to the function.
+   * @tparam U4 @deduced Formal type of the fourth argument to the function.
+   * @tparam U5 @deduced Formal type of the fifth argument to the function.
+   * @tparam T1 @deduced Actual type of the first argument.
+   * @tparam T2 @deduced Actual type of the second argument.
+   * @tparam T3 @deduced Actual type of the third argument.
+   * @tparam T4 @deduced Actual type of the fourth argument.
+   * @tparam T5 @deduced Actual type of the fifth argument.
    * @param [in] context User-specified context parameter
    * @param [in] delay The relative expiration time of the event.
    * @param [in] f The function to invoke
@@ -625,8 +654,8 @@
    * to expire "Now" are scheduled FIFO, after all normal events
    * have expired. 
    *
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
    * @param [in] mem_ptr Member method pointer to invoke
    * @param [in] obj The object on which to invoke the member method
    * @return The EventId of the scheduled event.
@@ -636,9 +665,9 @@
 
   /**
    * @see ScheduleNow(MEM,OBJ)
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
-   * @tparam T1 @inferred Type of first argument.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
+   * @tparam T1 @deduced Type of first argument.
    * @param [in] mem_ptr Member method pointer to invoke
    * @param [in] obj The object on which to invoke the member method
    * @param [in] a1 The first argument to pass to the invoked method
@@ -650,10 +679,10 @@
 
   /**
    * @see ScheduleNow(MEM,OBJ)
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
-   * @tparam T1 @inferred Type of first argument.
-   * @tparam T2 @inferred Type of second argument.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
+   * @tparam T1 @deduced Type of first argument.
+   * @tparam T2 @deduced Type of second argument.
    * @param [in] mem_ptr Member method pointer to invoke
    * @param [in] obj The object on which to invoke the member method
    * @param [in] a1 The first argument to pass to the invoked method
@@ -666,11 +695,11 @@
 
   /**
    * @see ScheduleNow(MEM,OBJ)
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
-   * @tparam T1 @inferred Type of first argument.
-   * @tparam T2 @inferred Type of second argument.
-   * @tparam T3 @inferred Type of third argument.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
+   * @tparam T1 @deduced Type of first argument.
+   * @tparam T2 @deduced Type of second argument.
+   * @tparam T3 @deduced Type of third argument.
    * @param [in] mem_ptr Member method pointer to invoke
    * @param [in] obj The object on which to invoke the member method
    * @param [in] a1 The first argument to pass to the invoked method
@@ -684,12 +713,12 @@
 
   /**
    * @see ScheduleNow(MEM,OBJ)
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
-   * @tparam T1 @inferred Type of first argument.
-   * @tparam T2 @inferred Type of second argument.
-   * @tparam T3 @inferred Type of third argument.
-   * @tparam T4 @inferred Type of fourth argument.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
+   * @tparam T1 @deduced Type of first argument.
+   * @tparam T2 @deduced Type of second argument.
+   * @tparam T3 @deduced Type of third argument.
+   * @tparam T4 @deduced Type of fourth argument.
    * @param [in] mem_ptr Member method pointer to invoke
    * @param [in] obj The object on which to invoke the member method
    * @param [in] a1 The first argument to pass to the invoked method
@@ -704,13 +733,13 @@
                               T1 a1, T2 a2, T3 a3, T4 a4);
   /**
    * @see ScheduleNow(MEM,OBJ)
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
-   * @tparam T1 @inferred Type of first argument.
-   * @tparam T2 @inferred Type of second argument.
-   * @tparam T3 @inferred Type of third argument.
-   * @tparam T4 @inferred Type of fourth argument.
-   * @tparam T5 @inferred Type of fifth argument.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
+   * @tparam T1 @deduced Type of first argument.
+   * @tparam T2 @deduced Type of second argument.
+   * @tparam T3 @deduced Type of third argument.
+   * @tparam T4 @deduced Type of fourth argument.
+   * @tparam T5 @deduced Type of fifth argument.
    * @param [in] mem_ptr Member method pointer to invoke
    * @param [in] obj The object on which to invoke the member method
    * @param [in] a1 The first argument to pass to the invoked method
@@ -736,8 +765,8 @@
 
   /**
    * @see ScheduleNow(*)
-   * @tparam U1 @inferred Formal type of the first argument to the function.
-   * @tparam T1 @inferred Actual type of the first argument.
+   * @tparam U1 @deduced Formal type of the first argument to the function.
+   * @tparam T1 @deduced Actual type of the first argument.
    * @param [in] f The function to invoke
    * @param [in] a1 The first argument to pass to the function to invoke
    * @return The EventId of the scheduled event.
@@ -748,10 +777,10 @@
 
   /**
    * @see ScheduleNow(*)
-   * @tparam U1 @inferred Formal type of the first argument to the function.
-   * @tparam U2 @inferred Formal type of the second argument to the function.
-   * @tparam T1 @inferred Actual type of the first argument.
-   * @tparam T2 @inferred Actual type of the second argument.
+   * @tparam U1 @deduced Formal type of the first argument to the function.
+   * @tparam U2 @deduced Formal type of the second argument to the function.
+   * @tparam T1 @deduced Actual type of the first argument.
+   * @tparam T2 @deduced Actual type of the second argument.
    * @param [in] f The function to invoke
    * @param [in] a1 The first argument to pass to the function to invoke
    * @param [in] a2 The second argument to pass to the function to invoke
@@ -763,12 +792,12 @@
 
   /**
    * @see ScheduleNow(*)
-   * @tparam U1 @inferred Formal type of the first argument to the function.
-   * @tparam U2 @inferred Formal type of the second argument to the function.
-   * @tparam U3 @inferred Formal type of the third argument to the function.
-   * @tparam T1 @inferred Actual type of the first argument.
-   * @tparam T2 @inferred Actual type of the second argument.
-   * @tparam T3 @inferred Actual type of the third argument.
+   * @tparam U1 @deduced Formal type of the first argument to the function.
+   * @tparam U2 @deduced Formal type of the second argument to the function.
+   * @tparam U3 @deduced Formal type of the third argument to the function.
+   * @tparam T1 @deduced Actual type of the first argument.
+   * @tparam T2 @deduced Actual type of the second argument.
+   * @tparam T3 @deduced Actual type of the third argument.
    * @param [in] f The function to invoke
    * @param [in] a1 The first argument to pass to the function to invoke
    * @param [in] a2 The second argument to pass to the function to invoke
@@ -781,14 +810,14 @@
 
   /**
    * @see ScheduleNow(*)
-   * @tparam U1 @inferred Formal type of the first argument to the function.
-   * @tparam U2 @inferred Formal type of the second argument to the function.
-   * @tparam U3 @inferred Formal type of the third argument to the function.
-   * @tparam U4 @inferred Formal type of the fourth argument to the function.
-   * @tparam T1 @inferred Actual type of the first argument.
-   * @tparam T2 @inferred Actual type of the second argument.
-   * @tparam T3 @inferred Actual type of the third argument.
-   * @tparam T4 @inferred Actual type of the fourth argument.
+   * @tparam U1 @deduced Formal type of the first argument to the function.
+   * @tparam U2 @deduced Formal type of the second argument to the function.
+   * @tparam U3 @deduced Formal type of the third argument to the function.
+   * @tparam U4 @deduced Formal type of the fourth argument to the function.
+   * @tparam T1 @deduced Actual type of the first argument.
+   * @tparam T2 @deduced Actual type of the second argument.
+   * @tparam T3 @deduced Actual type of the third argument.
+   * @tparam T4 @deduced Actual type of the fourth argument.
    * @param [in] f The function to invoke
    * @param [in] a1 The first argument to pass to the function to invoke
    * @param [in] a2 The second argument to pass to the function to invoke
@@ -802,16 +831,16 @@
 
   /**
    * @see ScheduleNow(*)
-   * @tparam U1 @inferred Formal type of the first argument to the function.
-   * @tparam U2 @inferred Formal type of the second argument to the function.
-   * @tparam U3 @inferred Formal type of the third argument to the function.
-   * @tparam U4 @inferred Formal type of the fourth argument to the function.
-   * @tparam U5 @inferred Formal type of the fifth argument to the function.
-   * @tparam T1 @inferred Actual type of the first argument.
-   * @tparam T2 @inferred Actual type of the second argument.
-   * @tparam T3 @inferred Actual type of the third argument.
-   * @tparam T4 @inferred Actual type of the fourth argument.
-   * @tparam T5 @inferred Actual type of the fifth argument.
+   * @tparam U1 @deduced Formal type of the first argument to the function.
+   * @tparam U2 @deduced Formal type of the second argument to the function.
+   * @tparam U3 @deduced Formal type of the third argument to the function.
+   * @tparam U4 @deduced Formal type of the fourth argument to the function.
+   * @tparam U5 @deduced Formal type of the fifth argument to the function.
+   * @tparam T1 @deduced Actual type of the first argument.
+   * @tparam T2 @deduced Actual type of the second argument.
+   * @tparam T3 @deduced Actual type of the third argument.
+   * @tparam T4 @deduced Actual type of the fourth argument.
+   * @tparam T5 @deduced Actual type of the fifth argument.
    * @param [in] f The function to invoke
    * @param [in] a1 The first argument to pass to the function to invoke
    * @param [in] a2 The second argument to pass to the function to invoke
@@ -836,8 +865,8 @@
    * after all normal events have expired and only when 
    * Simulator::Destroy is invoked.
    *
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
    * @param [in] mem_ptr Member method pointer to invoke
    * @param [in] obj The object on which to invoke the member method
    * @return The EventId of the scheduled event.
@@ -847,9 +876,9 @@
 
   /**
    * @see ScheduleDestroy(MEM,OBJ)
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
-   * @tparam T1 @inferred Type of first argument.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
+   * @tparam T1 @deduced Type of first argument.
    * @param [in] mem_ptr Member method pointer to invoke
    * @param [in] obj The object on which to invoke the member method
    * @param [in] a1 The first argument to pass to the invoked method
@@ -861,10 +890,10 @@
 
   /**
    * @see ScheduleDestroy(MEM,OBJ)
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
-   * @tparam T1 @inferred Type of first argument.
-   * @tparam T2 @inferred Type of second argument.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
+   * @tparam T1 @deduced Type of first argument.
+   * @tparam T2 @deduced Type of second argument.
    * @param [in] mem_ptr Member method pointer to invoke
    * @param [in] obj The object on which to invoke the member method
    * @param [in] a1 The first argument to pass to the invoked method
@@ -877,11 +906,11 @@
 
   /**
    * @see ScheduleDestroy(MEM,OBJ)
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
-   * @tparam T1 @inferred Type of first argument.
-   * @tparam T2 @inferred Type of second argument.
-   * @tparam T3 @inferred Type of third argument.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
+   * @tparam T1 @deduced Type of first argument.
+   * @tparam T2 @deduced Type of second argument.
+   * @tparam T3 @deduced Type of third argument.
    * @param [in] mem_ptr Member method pointer to invoke
    * @param [in] obj The object on which to invoke the member method
    * @param [in] a1 The first argument to pass to the invoked method
@@ -895,12 +924,12 @@
 
   /**
    * @see ScheduleDestroy(MEM,OBJ)
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
-   * @tparam T1 @inferred Type of first argument.
-   * @tparam T2 @inferred Type of second argument.
-   * @tparam T3 @inferred Type of third argument.
-   * @tparam T4 @inferred Type of fourth argument.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
+   * @tparam T1 @deduced Type of first argument.
+   * @tparam T2 @deduced Type of second argument.
+   * @tparam T3 @deduced Type of third argument.
+   * @tparam T4 @deduced Type of fourth argument.
    * @param [in] mem_ptr Member method pointer to invoke
    * @param [in] obj The object on which to invoke the member method
    * @param [in] a1 The first argument to pass to the invoked method
@@ -915,13 +944,13 @@
                                   T1 a1, T2 a2, T3 a3, T4 a4);
   /**
    * @see ScheduleDestroy(MEM,OBJ)
-   * @tparam MEM @inferred Class method function signature type.
-   * @tparam OBJ @inferred Class type of the object.
-   * @tparam T1 @inferred Type of first argument.
-   * @tparam T2 @inferred Type of second argument.
-   * @tparam T3 @inferred Type of third argument.
-   * @tparam T4 @inferred Type of fourth argument.
-   * @tparam T5 @inferred Type of fifth argument.
+   * @tparam MEM @deduced Class method function signature type.
+   * @tparam OBJ @deduced Class type of the object.
+   * @tparam T1 @deduced Type of first argument.
+   * @tparam T2 @deduced Type of second argument.
+   * @tparam T3 @deduced Type of third argument.
+   * @tparam T4 @deduced Type of fourth argument.
+   * @tparam T5 @deduced Type of fifth argument.
    * @param [in] mem_ptr Member method pointer to invoke
    * @param [in] obj The object on which to invoke the member method
    * @param [in] a1 The first argument to pass to the invoked method
@@ -946,8 +975,8 @@
 
   /**
    * @see ScheduleDestory((*)())
-   * @tparam U1 @inferred Formal type of the first argument to the function.
-   * @tparam T1 @inferred Actual type of the first argument.
+   * @tparam U1 @deduced Formal type of the first argument to the function.
+   * @tparam T1 @deduced Actual type of the first argument.
    * @param [in] f The function to invoke
    * @param [in] a1 The first argument to pass to the function to invoke
    * @return The EventId of the scheduled event.
@@ -958,10 +987,10 @@
 
   /**
    * @see ScheduleDestory((*)())
-   * @tparam U1 @inferred Formal type of the first argument to the function.
-   * @tparam U2 @inferred Formal type of the second argument to the function.
-   * @tparam T1 @inferred Actual type of the first argument.
-   * @tparam T2 @inferred Actual type of the second argument.
+   * @tparam U1 @deduced Formal type of the first argument to the function.
+   * @tparam U2 @deduced Formal type of the second argument to the function.
+   * @tparam T1 @deduced Actual type of the first argument.
+   * @tparam T2 @deduced Actual type of the second argument.
    * @param [in] f The function to invoke
    * @param [in] a1 The first argument to pass to the function to invoke
    * @param [in] a2 The second argument to pass to the function to invoke
@@ -973,12 +1002,12 @@
 
   /**
    * @see ScheduleDestory((*)())
-   * @tparam U1 @inferred Formal type of the first argument to the function.
-   * @tparam U2 @inferred Formal type of the second argument to the function.
-   * @tparam U3 @inferred Formal type of the third argument to the function.
-   * @tparam T1 @inferred Actual type of the first argument.
-   * @tparam T2 @inferred Actual type of the second argument.
-   * @tparam T3 @inferred Actual type of the third argument.
+   * @tparam U1 @deduced Formal type of the first argument to the function.
+   * @tparam U2 @deduced Formal type of the second argument to the function.
+   * @tparam U3 @deduced Formal type of the third argument to the function.
+   * @tparam T1 @deduced Actual type of the first argument.
+   * @tparam T2 @deduced Actual type of the second argument.
+   * @tparam T3 @deduced Actual type of the third argument.
    * @param [in] f The function to invoke
    * @param [in] a1 The first argument to pass to the function to invoke
    * @param [in] a2 The second argument to pass to the function to invoke
@@ -991,14 +1020,14 @@
 
   /**
    * @see ScheduleDestory((*)())
-   * @tparam U1 @inferred Formal type of the first argument to the function.
-   * @tparam U2 @inferred Formal type of the second argument to the function.
-   * @tparam U3 @inferred Formal type of the third argument to the function.
-   * @tparam U4 @inferred Formal type of the fourth argument to the function.
-   * @tparam T1 @inferred Actual type of the first argument.
-   * @tparam T2 @inferred Actual type of the second argument.
-   * @tparam T3 @inferred Actual type of the third argument.
-   * @tparam T4 @inferred Actual type of the fourth argument.
+   * @tparam U1 @deduced Formal type of the first argument to the function.
+   * @tparam U2 @deduced Formal type of the second argument to the function.
+   * @tparam U3 @deduced Formal type of the third argument to the function.
+   * @tparam U4 @deduced Formal type of the fourth argument to the function.
+   * @tparam T1 @deduced Actual type of the first argument.
+   * @tparam T2 @deduced Actual type of the second argument.
+   * @tparam T3 @deduced Actual type of the third argument.
+   * @tparam T4 @deduced Actual type of the fourth argument.
    * @param [in] f The function to invoke
    * @param [in] a1 The first argument to pass to the function to invoke
    * @param [in] a2 The second argument to pass to the function to invoke
@@ -1012,16 +1041,16 @@
 
   /**
    * @see ScheduleDestory((*)())
-   * @tparam U1 @inferred Formal type of the first argument to the function.
-   * @tparam U2 @inferred Formal type of the second argument to the function.
-   * @tparam U3 @inferred Formal type of the third argument to the function.
-   * @tparam U4 @inferred Formal type of the fourth argument to the function.
-   * @tparam U5 @inferred Formal type of the fifth argument to the function.
-   * @tparam T1 @inferred Actual type of the first argument.
-   * @tparam T2 @inferred Actual type of the second argument.
-   * @tparam T3 @inferred Actual type of the third argument.
-   * @tparam T4 @inferred Actual type of the fourth argument.
-   * @tparam T5 @inferred Actual type of the fifth argument.
+   * @tparam U1 @deduced Formal type of the first argument to the function.
+   * @tparam U2 @deduced Formal type of the second argument to the function.
+   * @tparam U3 @deduced Formal type of the third argument to the function.
+   * @tparam U4 @deduced Formal type of the fourth argument to the function.
+   * @tparam U5 @deduced Formal type of the fifth argument to the function.
+   * @tparam T1 @deduced Actual type of the first argument.
+   * @tparam T2 @deduced Actual type of the second argument.
+   * @tparam T3 @deduced Actual type of the third argument.
+   * @tparam T4 @deduced Actual type of the fourth argument.
+   * @tparam T5 @deduced Actual type of the fifth argument.
    * @param [in] f The function to invoke
    * @param [in] a1 The first argument to pass to the function to invoke
    * @param [in] a2 The second argument to pass to the function to invoke
@@ -1109,20 +1138,13 @@
   static Time GetMaximumSimulationTime (void);
 
   /**
-   * Get the current simulation context.
-   *
-   * @return The current simulation context
-   */
-  static uint32_t GetContext (void);
-
-  /**
    * Schedule a future event execution (in the same context).
    *
    * @param [in] delay Delay until the event expires.
    * @param [in] event The event to schedule.
    * @returns A unique identifier for the newly-scheduled event.
    */
-  static EventId Schedule (Time const &delay, const Ptr<EventImpl> &event);
+  static EventId Schedule (const Time &delay, const Ptr<EventImpl> &event);
 
   /**
    * Schedule a future event execution (in a different context).
diff -Naur ns-3.25/src/core/model/simulator-impl.h ns-3.26/src/core/model/simulator-impl.h
--- ns-3.25/src/core/model/simulator-impl.h	2016-10-03 20:57:08.516245544 -0700
+++ ns-3.26/src/core/model/simulator-impl.h	2016-10-03 19:49:01.819386371 -0700
@@ -62,11 +62,11 @@
   /** \copydoc Simulator::Stop(void) */
   virtual void Stop (void) = 0;
   /** \copydoc Simulator::Stop(const Time&) */
-  virtual void Stop (Time const &delay) = 0;
+  virtual void Stop (const Time &delay) = 0;
   /** \copydoc Simulator::Schedule(const Time&,const Ptr<EventImpl>&) */
-  virtual EventId Schedule (Time const &delay, EventImpl *event) = 0;
+  virtual EventId Schedule (const Time &delay, EventImpl *event) = 0;
   /** \copydoc Simulator::ScheduleWithContext(uint32_t,const Time&,EventImpl*) */
-  virtual void ScheduleWithContext (uint32_t context, Time const &delay, EventImpl *event) = 0;
+  virtual void ScheduleWithContext (uint32_t context, const Time &delay, EventImpl *event) = 0;
   /** \copydoc Simulator::ScheduleNow(const Ptr<EventImpl>&) */
   virtual EventId ScheduleNow (EventImpl *event) = 0;
   /** \copydoc Simulator::ScheduleDestroy(const Ptr<EventImpl>&) */
diff -Naur ns-3.25/src/core/model/test.cc ns-3.26/src/core/model/test.cc
--- ns-3.25/src/core/model/test.cc	2016-10-03 20:57:08.523245489 -0700
+++ ns-3.26/src/core/model/test.cc	2016-10-03 19:49:01.826386319 -0700
@@ -22,6 +22,7 @@
 #include "singleton.h"
 #include "system-path.h"
 #include "log.h"
+#include "des-metrics.h"
 #include <cmath>
 #include <cstring>
 #include <vector>
@@ -875,11 +876,12 @@
   enum TestCase::TestDuration maximumTestDuration = TestCase::QUICK;
   char *progname = argv[0];
 
-  argv++;
+  char ** argi = argv;
+  ++argi;
 
-  while (*argv != 0)
+  while (*argi != 0)
     {
-      char *arg = *argv;
+      char *arg = *argi;
 
       if (strcmp(arg, "--assert-on-failure") == 0)
         {
@@ -971,7 +973,7 @@
           PrintHelp (progname);
           return 0;
         }
-      argv++;
+      argi++;
     }
   enum TestSuite::Type testType;
   if (testTypeString == "")
@@ -1064,6 +1066,31 @@
     {
       TestCase *test = *i;
 
+#ifdef ENABLE_DES_METRICS
+      {
+        /*
+          Reorganize argv
+          Since DES Metrics uses argv[0] for the trace file name,
+          grab the test name and put it in argv[0],
+          with test-runner as argv[1]
+          then the rest of the original arguments.
+        */
+        std::string testname = test->GetName ();
+        std::string runner = "[" + SystemPath::Split (argv[0]).back () + "]";
+
+        int  desargc = argc + 1;
+        char ** desargv = new char * [desargc];
+        desargv[0] = const_cast<char *>(testname.c_str ());
+        desargv[1] = const_cast<char *>(runner.c_str ());
+        for (int i = 2; i < desargc; ++i)
+          {
+            desargv[i] = argv[i - 1];
+          }
+        DesMetrics::Get ()->Initialize (desargc, desargv, m_tempDir);
+        delete [] desargv;
+      }
+#endif
+      
       test->Run (this);
       PrintReport (test, os, xml, 0);
       if (test->IsFailed ())
diff -Naur ns-3.25/src/core/model/traced-value.h ns-3.26/src/core/model/traced-value.h
--- ns-3.25/src/core/model/traced-value.h	2016-10-03 20:57:08.529245443 -0700
+++ ns-3.26/src/core/model/traced-value.h	2016-10-03 19:49:01.832386274 -0700
@@ -87,6 +87,7 @@
   typedef void (* Int32) (int32_t  oldValue, int32_t  newValue);
   typedef void (* Uint32)(uint32_t oldValue, uint32_t newValue);
   typedef void (* Double)(double   oldValue, double   newValue);
+  typedef void (* Void)  (void);
   /**@}*/
 }  // namespace TracedValueCallback
 
diff -Naur ns-3.25/src/core/model/trace-source-accessor.h ns-3.26/src/core/model/trace-source-accessor.h
--- ns-3.25/src/core/model/trace-source-accessor.h	2016-10-03 20:57:08.527245458 -0700
+++ ns-3.26/src/core/model/trace-source-accessor.h	2016-10-03 19:49:01.831386282 -0700
@@ -107,7 +107,7 @@
  * type implements a statically-polymorphic set of Connect and Disconnect
  * methods and creates a dynamic-polymorphic class to wrap the underlying
  * static-polymorphic class.  This functionality is typically provided
- * by wrapping an object data member in a TracedCallback.
+ * by wrapping an object data member in a TracedCallback or TracedValue.
  *
  * \param [in] a The trace source
  * \returns The TraceSourceAccessor
@@ -115,6 +115,19 @@
 template <typename T>
 Ptr<const TraceSourceAccessor> MakeTraceSourceAccessor (T a);
 
+/**
+ * \ingroup tracing
+ *
+ * Create an empty TraceSourceAccessor.
+ *
+ * \returns The empty TraceSourceAccessor (runtime exception if used)
+ */
+static inline
+Ptr<const TraceSourceAccessor> MakeEmptyTraceSourceAccessor ()
+{
+  return Ptr<const TraceSourceAccessor> (0);
+}
+
 } // namespace ns3
 
 
diff -Naur ns-3.25/src/core/model/type-id.cc ns-3.26/src/core/model/type-id.cc
--- ns-3.25/src/core/model/type-id.cc	2016-10-03 20:57:08.529245443 -0700
+++ ns-3.26/src/core/model/type-id.cc	2016-10-03 19:49:01.833386267 -0700
@@ -195,6 +195,8 @@
    *             subclass.
    * \param [in] checker An instance of the associated AttributeChecker
    *             subclass.
+   * \param [in] supportLevel The support/deprecation status for this attribute.
+   * \param [in] supportMsg Upgrade hint if this attribute is no longer supported.
    */
   void AddAttribute (uint16_t uid,
                      std::string name,
@@ -202,7 +204,9 @@
                      uint32_t flags,
                      Ptr<const AttributeValue> initialValue,
                      Ptr<const AttributeAccessor> accessor,
-                     Ptr<const AttributeChecker> checker);
+                     Ptr<const AttributeChecker> checker,
+                     TypeId::SupportLevel supportLevel = TypeId::SUPPORTED,
+                     const std::string &supportMsg = "");
   /**
    * Set the initial value of an Attribute.
    * \param [in] uid The id.
@@ -236,13 +240,17 @@
    * \param [in] callback Fully qualified typedef name for the callback
    *             signature.  Generally this should begin with the
    *             "ns3::" namespace qualifier.  
+   * \param [in] supportLevel The support/deprecation status for this attribute.
+   * \param [in] supportMsg Upgrade hint if this attribute is no longer supported.
    * \returns This TypeId instance.
    */
   void AddTraceSource (uint16_t uid,
                        std::string name, 
                        std::string help,
                        Ptr<const TraceSourceAccessor> accessor,
-                       std::string callback);
+                       std::string callback,
+                       TypeId::SupportLevel supportLevel = TypeId::SUPPORTED,
+                       const std::string &supportMsg = "");
   /**
    * Get the number of Trace sources.
    * \param [in] uid The id.
@@ -307,6 +315,10 @@
     std::vector<struct TypeId::AttributeInformation> attributes;
     /** The container of TraceSources. */
     std::vector<struct TypeId::TraceSourceInformation> traceSources;
+    /** Support level/deprecation. */
+    TypeId::SupportLevel supportLevel;
+    /** Support message. */
+    std::string supportMsg;
   };
   /** Iterator type. */
   typedef std::vector<struct IidInformation>::const_iterator Iterator;
@@ -332,6 +344,7 @@
   hashmap_t m_hashmap;
 
 
+  /** IidManager constants. */
   enum {
     /**
      * Hash chaining flag.
@@ -351,11 +364,14 @@
   static ns3::Hasher hasher ( Create<Hash::Function::Murmur3> () );
   return hasher.clear ().GetHash32 (name);
 }
-  
+
+#define IID "IidManager"
+#define IIDL IID << ": "
+
 uint16_t
 IidManager::AllocateUid (std::string name)
 {
-  NS_LOG_FUNCTION (this << name);
+  NS_LOG_FUNCTION (IID << name);
   // Type names are definitive: equal names are equal types
   NS_ASSERT_MSG (m_namemap.count (name) == 0,
                  "Trying to allocate twice the same uid: " << name);
@@ -391,12 +407,12 @@
     struct IidInformation * hinfo = LookupInformation (GetUid (hash));
     if (name > hinfo->name)
       { // new type gets chained
-        NS_LOG_LOGIC ("New TypeId '" << name << "' getting chained.");
+        NS_LOG_LOGIC (IIDL << "New TypeId '" << name << "' getting chained.");
         hash = hash | HashChainFlag;
       }
     else
       { // chain old type
-        NS_LOG_LOGIC ("Old TypeId '" << hinfo->name << "' getting chained.");
+        NS_LOG_LOGIC (IIDL << "Old TypeId '" << hinfo->name << "' getting chained.");
         uint32_t oldUid = GetUid (hinfo->hash);
         m_hashmap.erase (m_hashmap.find (hinfo->hash));
         hinfo->hash = hash | HashChainFlag;
@@ -420,21 +436,23 @@
   // Add to both maps:
   m_namemap.insert (std::make_pair (name, uid));
   m_hashmap.insert (std::make_pair (hash, uid));
+  NS_LOG_LOGIC (IIDL << uid);
   return uid;
 }
 
 struct IidManager::IidInformation *
 IidManager::LookupInformation (uint16_t uid) const
 {
-  NS_LOG_FUNCTION (this << uid);
+  NS_LOG_FUNCTION (IID << uid);
   NS_ASSERT (uid <= m_information.size () && uid != 0);
+  NS_LOG_LOGIC (IIDL << m_information[uid-1].name);
   return const_cast<struct IidInformation *> (&m_information[uid-1]);
 }
 
 void 
 IidManager::SetParent (uint16_t uid, uint16_t parent)
 {
-  NS_LOG_FUNCTION (this << uid << parent);
+  NS_LOG_FUNCTION (IID << uid << parent);
   NS_ASSERT (parent <= m_information.size ());
   struct IidInformation *information = LookupInformation (uid);
   information->parent = parent;
@@ -442,21 +460,21 @@
 void 
 IidManager::SetGroupName (uint16_t uid, std::string groupName)
 {
-  NS_LOG_FUNCTION (this << uid << groupName);
+  NS_LOG_FUNCTION (IID << uid << groupName);
   struct IidInformation *information = LookupInformation (uid);
   information->groupName = groupName;
 }
 void
 IidManager::SetSize (uint16_t uid, std::size_t size)
 {
-  NS_LOG_FUNCTION (this << uid << size);
+  NS_LOG_FUNCTION (IID << uid << size);
   struct IidInformation *information = LookupInformation (uid);
   information->size = size;
 }
 void
 IidManager::HideFromDocumentation (uint16_t uid)
 {
-  NS_LOG_FUNCTION (this << uid);
+  NS_LOG_FUNCTION (IID << uid);
   struct IidInformation *information = LookupInformation (uid);
   information->mustHideFromDocumentation = true;
 }
@@ -464,7 +482,7 @@
 void 
 IidManager::AddConstructor (uint16_t uid, Callback<ObjectBase *> callback)
 {
-  NS_LOG_FUNCTION (this << uid << &callback);
+  NS_LOG_FUNCTION (IID << uid << &callback);
   struct IidInformation *information = LookupInformation (uid);
   if (information->hasConstructor)
     {
@@ -477,70 +495,77 @@
 uint16_t 
 IidManager::GetUid (std::string name) const
 {
-  NS_LOG_FUNCTION (this << name);
+  NS_LOG_FUNCTION (IID << name);
+  uint16_t uid = 0;
   namemap_t::const_iterator it = m_namemap.find (name);
   if (it != m_namemap.end ())
     {
-      return it->second;
-    }
-  else
-    {
-      return 0;
+      uid = it->second;
     }
+  NS_LOG_LOGIC (IIDL << uid);
+  return uid;
 }
 uint16_t 
 IidManager::GetUid (TypeId::hash_t hash) const
 {
+  NS_LOG_FUNCTION (IID << hash);
   hashmap_t::const_iterator it = m_hashmap.find (hash);
+  uint16_t uid = 0;
   if (it != m_hashmap.end ())
     {
-    return it->second;
-    }
-  else
-    { // hash not found 
-      return 0;
+      uid = it->second;
     }
+  NS_LOG_LOGIC (IIDL << uid);
+  return uid;
 }
 std::string 
 IidManager::GetName (uint16_t uid) const
 {
-  NS_LOG_FUNCTION (this << uid);
+  NS_LOG_FUNCTION (IID << uid);
   struct IidInformation *information = LookupInformation (uid);
+  NS_LOG_LOGIC (IIDL << information->name);
   return information->name;
 }
 TypeId::hash_t
 IidManager::GetHash (uint16_t uid) const
 {
-  NS_LOG_FUNCTION (this << uid);
+  NS_LOG_FUNCTION (IID << uid);
   struct IidInformation *information = LookupInformation (uid);
-  return information->hash;
+  TypeId::hash_t hash = information->hash;
+  NS_LOG_LOGIC (IIDL << hash);
+  return hash;
 }
 uint16_t 
 IidManager::GetParent (uint16_t uid) const
 {
-  NS_LOG_FUNCTION (this << uid);
+  NS_LOG_FUNCTION (IID << uid);
   struct IidInformation *information = LookupInformation (uid);
-  return information->parent;
+  uint16_t pid = information->parent;
+  NS_LOG_LOGIC (IIDL << pid);
+  return pid;
 }
 std::string 
 IidManager::GetGroupName (uint16_t uid) const
 {
-  NS_LOG_FUNCTION (this << uid);
+  NS_LOG_FUNCTION (IID << uid);
   struct IidInformation *information = LookupInformation (uid);
+  NS_LOG_LOGIC (IIDL << information->groupName);
   return information->groupName;
 }
 std::size_t
 IidManager::GetSize (uint16_t uid) const
 {
-  NS_LOG_FUNCTION (this << uid);
+  NS_LOG_FUNCTION (IID << uid);
   struct IidInformation *information = LookupInformation (uid);
-  return information->size;
+  std::size_t size = information->size;
+  NS_LOG_LOGIC (IIDL << size);
+  return size;
 }
 
 Callback<ObjectBase *> 
 IidManager::GetConstructor (uint16_t uid) const
 {
-  NS_LOG_FUNCTION (this << uid);
+  NS_LOG_FUNCTION (IID << uid);
   struct IidInformation *information = LookupInformation (uid);
   if (!information->hasConstructor)
     {
@@ -552,21 +577,23 @@
 bool 
 IidManager::HasConstructor (uint16_t uid) const
 {
-  NS_LOG_FUNCTION (this << uid);
+  NS_LOG_FUNCTION (IID << uid);
   struct IidInformation *information = LookupInformation (uid);
-  return information->hasConstructor;
+  bool hasC = information->hasConstructor;
+  NS_LOG_LOGIC (IIDL << hasC);
+  return hasC;
 }
 
 uint32_t 
 IidManager::GetRegisteredN (void) const
 {
-  NS_LOG_FUNCTION (this);
+  NS_LOG_FUNCTION (IID << m_information.size ());
   return m_information.size ();
 }
 uint16_t 
 IidManager::GetRegistered (uint32_t i) const
 {
-  NS_LOG_FUNCTION (this << i);
+  NS_LOG_FUNCTION (IID << i);
   return i + 1;
 }
 
@@ -574,7 +601,7 @@
 IidManager::HasAttribute (uint16_t uid,
                           std::string name)
 {
-  NS_LOG_FUNCTION (this << uid << name);
+  NS_LOG_FUNCTION (IID << uid << name);
   struct IidInformation *information  = LookupInformation (uid);
   while (true)
     {
@@ -583,6 +610,7 @@
         {
           if (i->name == name)
             {
+              NS_LOG_LOGIC (IIDL << true);
               return true;
             }
         }
@@ -590,25 +618,37 @@
       if (parent == information)
         {
           // top of inheritance tree
+          NS_LOG_LOGIC (IIDL << false);
           return false;
         }
       // check parent
       information = parent;
     }
+  NS_LOG_LOGIC (IIDL << false);
   return false;
 }
 
 void 
-IidManager::AddAttribute (uint16_t uid, 
+IidManager::AddAttribute (uint16_t uid,
                           std::string name,
-                          std::string help, 
+                          std::string help,
                           uint32_t flags,
                           Ptr<const AttributeValue> initialValue,
                           Ptr<const AttributeAccessor> accessor,
-                          Ptr<const AttributeChecker> checker)
-{
-  NS_LOG_FUNCTION (this << uid << name << help << flags << initialValue << accessor << checker);
-  struct IidInformation *information = LookupInformation (uid);
+                          Ptr<const AttributeChecker> checker,
+                          TypeId::SupportLevel supportLevel,
+                          const std::string &supportMsg)
+{
+  NS_LOG_FUNCTION (IID << uid << name << help << flags
+                   << initialValue << accessor << checker
+                   << supportLevel << supportMsg);
+  struct IidInformation *information = LookupInformation (uid);
+  if (name.find (' ') != std::string::npos)
+    {
+      NS_FATAL_ERROR ("Attribute name \"" << name << "\" may not contain spaces ' ', "
+                      << "encountered when registering TypeId \""
+                      << information->name << "\"");
+    }
   if (HasAttribute (uid, name))
     {
       NS_FATAL_ERROR ("Attribute \"" << name << "\" already registered on tid=\"" << 
@@ -622,14 +662,17 @@
   info.originalInitialValue = initialValue;
   info.accessor = accessor;
   info.checker = checker;
+  info.supportLevel = supportLevel;
+  info.supportMsg = supportMsg;
   information->attributes.push_back (info);
+  NS_LOG_LOGIC (IIDL << information->attributes.size () - 1);
 }
 void 
 IidManager::SetAttributeInitialValue(uint16_t uid,
                                      uint32_t i,
                                      Ptr<const AttributeValue> initialValue)
 {
-  NS_LOG_FUNCTION (this << uid << i << initialValue);
+  NS_LOG_FUNCTION (IID << uid << i << initialValue);
   struct IidInformation *information = LookupInformation (uid);
   NS_ASSERT (i < information->attributes.size ());
   information->attributes[i].initialValue = initialValue;
@@ -640,16 +683,19 @@
 uint32_t 
 IidManager::GetAttributeN (uint16_t uid) const
 {
-  NS_LOG_FUNCTION (this << uid);
+  NS_LOG_FUNCTION (IID << uid);
   struct IidInformation *information = LookupInformation (uid);
-  return information->attributes.size ();
+  uint32_t size = information->attributes.size ();
+  NS_LOG_LOGIC (IIDL << size);
+  return size;
 }
 struct TypeId::AttributeInformation 
 IidManager::GetAttribute(uint16_t uid, uint32_t i) const
 {
-  NS_LOG_FUNCTION (this << uid << i);
+  NS_LOG_FUNCTION (IID << uid << i);
   struct IidInformation *information = LookupInformation (uid);
   NS_ASSERT (i < information->attributes.size ());
+  NS_LOG_LOGIC (IIDL << information->name);
   return information->attributes[i];
 }
 
@@ -657,7 +703,7 @@
 IidManager::HasTraceSource (uint16_t uid,
                             std::string name)
 {
-  NS_LOG_FUNCTION (this << uid << name);
+  NS_LOG_FUNCTION (IID << uid << name);
   struct IidInformation *information  = LookupInformation (uid);
   while (true)
     {
@@ -666,18 +712,21 @@
         {
           if (i->name == name)
             {
-              return true;
+              NS_LOG_LOGIC (IIDL << true);
+              return true ;
             }
         }
       struct IidInformation *parent = LookupInformation (information->parent);
       if (parent == information)
         {
           // top of inheritance tree
+          NS_LOG_LOGIC (IIDL << false);
           return false;
         }
       // check parent
       information = parent;
     }
+  NS_LOG_LOGIC (IIDL << false);
   return false;
 }
 
@@ -686,9 +735,13 @@
                             std::string name, 
                             std::string help,
                             Ptr<const TraceSourceAccessor> accessor,
-                            std::string callback)
-{
-  NS_LOG_FUNCTION (this << uid << name << help << accessor);
+                            std::string callback,
+                            TypeId::SupportLevel supportLevel,
+                            const std::string &supportMsg)
+{
+  NS_LOG_FUNCTION (IID << uid << name << help
+                   << accessor << callback
+                   << supportLevel << supportMsg);
   struct IidInformation *information  = LookupInformation (uid);
   if (HasTraceSource (uid, name))
     {
@@ -700,29 +753,37 @@
   source.help = help;
   source.accessor = accessor;
   source.callback = callback;
+  source.supportLevel = supportLevel;
+  source.supportMsg = supportMsg;
   information->traceSources.push_back (source);
+  NS_LOG_LOGIC (IIDL << information->traceSources.size () - 1);
 }
 uint32_t 
 IidManager::GetTraceSourceN (uint16_t uid) const
 {
-  NS_LOG_FUNCTION (this << uid);
+  NS_LOG_FUNCTION (IID << uid);
   struct IidInformation *information = LookupInformation (uid);
-  return information->traceSources.size ();
+  uint32_t size = information->traceSources.size ();
+  NS_LOG_LOGIC (IIDL << size);
+  return size;
 }
 struct TypeId::TraceSourceInformation 
 IidManager::GetTraceSource(uint16_t uid, uint32_t i) const
 {
-  NS_LOG_FUNCTION (this << uid << i);
+  NS_LOG_FUNCTION (IID << uid << i);
   struct IidInformation *information = LookupInformation (uid);
   NS_ASSERT (i < information->traceSources.size ());
+  NS_LOG_LOGIC (IIDL << information->name);
   return information->traceSources[i];
 }
 bool 
 IidManager::MustHideFromDocumentation (uint16_t uid) const
 {
-  NS_LOG_FUNCTION (this << uid);
+  NS_LOG_FUNCTION (IID << uid);
   struct IidInformation *information = LookupInformation (uid);
-  return information->mustHideFromDocumentation;
+  bool hide = information->mustHideFromDocumentation;
+  NS_LOG_LOGIC (IIDL << hide);
+  return hide;
 }
 
 } // namespace ns3
@@ -737,6 +798,7 @@
 {
   NS_LOG_FUNCTION (this << name);
   uint16_t uid = IidManager::Get ()->AllocateUid (name);
+  NS_LOG_LOGIC (uid);
   NS_ASSERT (uid != 0);
   m_tid = uid;
 }
@@ -758,7 +820,7 @@
 bool
 TypeId::LookupByNameFailSafe (std::string name, TypeId *tid)
 {
-  NS_LOG_FUNCTION (name << tid);
+  NS_LOG_FUNCTION (name << tid->GetUid ());
   uint16_t uid = IidManager::Get ()->GetUid (name);
   if (uid == 0)
     {
@@ -813,8 +875,24 @@
           struct TypeId::AttributeInformation tmp = tid.GetAttribute(i);
           if (tmp.name == name)
             {
-              *info = tmp;
-              return true;
+              if (tmp.supportLevel == TypeId::SUPPORTED)
+                {
+                  *info = tmp;
+                  return true;
+                }
+              else if (tmp.supportLevel == TypeId::DEPRECATED)
+                {
+                  std::cerr << "Attribute '" << name << "' is deprecated: "
+                                 << tmp.supportMsg << std::endl;
+                  *info = tmp;
+                  return true;
+                }
+              else if (tmp.supportLevel == TypeId::OBSOLETE)
+                {
+                  NS_FATAL_ERROR ("Attribute '" << name
+                                  << "' is obsolete, with no fallback: "
+                                  << tmp.supportMsg);
+                }
             }
         }
       nextTid = tid.GetParent ();
@@ -825,7 +903,7 @@
 TypeId 
 TypeId::SetParent (TypeId tid)
 {
-  NS_LOG_FUNCTION (this << tid);
+  NS_LOG_FUNCTION (this << tid.GetUid ());
   IidManager::Get ()->SetParent (m_tid, tid.m_tid);
   return *this;
 }
@@ -860,7 +938,7 @@
 bool 
 TypeId::IsChildOf (TypeId other) const
 {
-  NS_LOG_FUNCTION (this << other);
+  NS_LOG_FUNCTION (this << other.GetUid ());
   TypeId tmp = *this;
   while (tmp != other && tmp != tmp.GetParent ())
     {
@@ -918,10 +996,16 @@
                       std::string help, 
                       const AttributeValue &initialValue,
                       Ptr<const AttributeAccessor> accessor,
-                      Ptr<const AttributeChecker> checker)
-{
-  NS_LOG_FUNCTION (this << name << help << &initialValue << accessor << checker);
-  IidManager::Get ()->AddAttribute (m_tid, name, help, ATTR_SGC, initialValue.Copy (), accessor, checker);
+                      Ptr<const AttributeChecker> checker,
+                      SupportLevel supportLevel,
+                      const std::string &supportMsg)
+{
+  NS_LOG_FUNCTION (this << name << help
+                   << &initialValue << accessor << checker
+                   << supportLevel << supportMsg);
+  IidManager::Get ()->AddAttribute (m_tid, name, help, ATTR_SGC,
+                                    initialValue.Copy (), accessor, checker,
+                                    supportLevel, supportMsg);
   return *this;
 }
 
@@ -931,10 +1015,16 @@
                       uint32_t flags,
                       const AttributeValue &initialValue,
                       Ptr<const AttributeAccessor> accessor,
-                      Ptr<const AttributeChecker> checker)
-{
-  NS_LOG_FUNCTION (this << name << help << flags << &initialValue << accessor << checker);
-  IidManager::Get ()->AddAttribute (m_tid, name, help, flags, initialValue.Copy (), accessor, checker);
+                      Ptr<const AttributeChecker> checker,
+                      SupportLevel supportLevel,
+                      const std::string &supportMsg)
+{
+  NS_LOG_FUNCTION (this << name << help << flags
+                   << &initialValue << accessor << checker
+                   << supportLevel << supportMsg);
+  IidManager::Get ()->AddAttribute (m_tid, name, help, flags,
+                                    initialValue.Copy (), accessor, checker,
+                                    supportLevel, supportMsg);
   return *this;
 }
 
@@ -1010,10 +1100,16 @@
 TypeId::AddTraceSource (std::string name,
                         std::string help,
                         Ptr<const TraceSourceAccessor> accessor,
-                        std::string callback)
-{
-  NS_LOG_FUNCTION (this << name << help << accessor);
-  IidManager::Get ()->AddTraceSource (m_tid, name, help, accessor, callback);
+                        std::string callback,
+                        SupportLevel supportLevel,
+                        const std::string &supportMsg)
+{
+  NS_LOG_FUNCTION (this << name << help
+                   << accessor << callback
+                   << supportLevel << supportMsg);
+  IidManager::Get ()->AddTraceSource (m_tid, name, help,
+                                      accessor, callback,
+                                      supportLevel, supportMsg);
   return *this;
 }
 
@@ -1025,21 +1121,39 @@
   return *this;
 }
 
-
-Ptr<const TraceSourceAccessor> 
-TypeId::LookupTraceSourceByName (std::string name) const
+Ptr<const TraceSourceAccessor>
+TypeId::LookupTraceSourceByName (std::string name,
+                                 struct TraceSourceInformation *info) const
 {
   NS_LOG_FUNCTION (this << name);
   TypeId tid;
   TypeId nextTid = *this;
+  struct TypeId::TraceSourceInformation tmp;
   do {
       tid = nextTid;
       for (uint32_t i = 0; i < tid.GetTraceSourceN (); i++)
         {
-          struct TypeId::TraceSourceInformation info = tid.GetTraceSource (i);
-          if (info.name == name)
+          tmp = tid.GetTraceSource (i);
+          if (tmp.name == name)
             {
-              return info.accessor;
+              if (tmp.supportLevel == TypeId::SUPPORTED)
+                {
+                  *info = tmp;
+                   return tmp.accessor;
+                }
+              else if (tmp.supportLevel == TypeId::DEPRECATED)
+                {
+                  std::cerr << "TraceSource '" << name << "' is deprecated: "
+                                 << tmp.supportMsg << std::endl;
+                  *info = tmp;
+                  return tmp.accessor;
+                }
+              else  if (tmp.supportLevel == TypeId::OBSOLETE)
+                {
+                  NS_FATAL_ERROR ("TraceSource '" << name
+                                  << "' is obsolete, with no fallback: "
+                                  << tmp.supportMsg);
+                }
             }
         }
       nextTid = tid.GetParent ();
@@ -1047,6 +1161,13 @@
   return 0;
 }
 
+Ptr<const TraceSourceAccessor> 
+TypeId::LookupTraceSourceByName (std::string name) const
+{
+  struct TraceSourceInformation info;
+  return LookupTraceSourceByName (name, &info);
+}
+
 uint16_t 
 TypeId::GetUid (void) const
 {
@@ -1054,10 +1175,10 @@
   return m_tid;
 }
 void 
-TypeId::SetUid (uint16_t tid)
+TypeId::SetUid (uint16_t uid)
 {
-  NS_LOG_FUNCTION (this << tid);
-  m_tid = tid;
+  NS_LOG_FUNCTION (this << uid);
+  m_tid = uid;
 }
 
 std::ostream & operator << (std::ostream &os, TypeId tid)
diff -Naur ns-3.25/src/core/model/type-id.h ns-3.26/src/core/model/type-id.h
--- ns-3.25/src/core/model/type-id.h	2016-10-03 20:57:08.530245435 -0700
+++ ns-3.26/src/core/model/type-id.h	2016-10-03 19:49:01.834386259 -0700
@@ -65,6 +65,13 @@
     ATTR_CONSTRUCT = 1<<2, /**< The attribute can be written at construction-time */
     ATTR_SGC = ATTR_GET | ATTR_SET | ATTR_CONSTRUCT, /**< The attribute can be read, and written at any time */
   };
+  /** The level of support or deprecation for attributes or trace sources. */
+  enum SupportLevel
+  {
+    SUPPORTED,   /**< Attribute or trace source is currently used. */
+    DEPRECATED,  /**< Attribute or trace source is deprecated; user is warned. */
+    OBSOLETE     /**< Attribute or trace source is not used anymore; simulation fails. */
+  };
   /** Attribute implementation. */
   struct AttributeInformation {
     /** Attribute name. */
@@ -81,6 +88,10 @@
     Ptr<const AttributeAccessor> accessor;
     /** Checker object. */
     Ptr<const AttributeChecker> checker;
+    /** Support level/deprecation. */
+    TypeId::SupportLevel supportLevel;
+    /** Support message. */
+    std::string supportMsg;
   };
   /** TraceSource implementation. */
   struct TraceSourceInformation {
@@ -92,6 +103,10 @@
     std::string callback;
     /** Trace accessor. */
     Ptr<const TraceSourceAccessor> accessor;
+    /** Support level/deprecation. */
+    TypeId::SupportLevel supportLevel;
+    /** Support message. */
+    std::string supportMsg;
   };
 
   /** Type of hash values. */
@@ -349,13 +364,24 @@
    *             subclass.
    * \param [in] checker An instance of the associated AttributeChecker
    *             subclass.
+   * \param [in] supportLevel Support/deprecation status of the attribute.
+   * \param [in] supportMsg Upgrade hint if this attribute is no longer
+   *             supported.  If the attribute is \c DEPRECATED the attribute
+   *             behavior still exists, but user code should be updated
+   *             following guidance in the hint..
+   *             If the attribute is \c OBSOLETE, the hint should indicate
+   *             which class the attribute functional has been moved to,
+   *             or that the functionality is no longer supported.
+   *             See test file \file type-id-test-suite.cc for examples.
    * \returns This TypeId instance
    */
   TypeId AddAttribute (std::string name,
                        std::string help, 
                        const AttributeValue &initialValue,
                        Ptr<const AttributeAccessor> accessor,
-                       Ptr<const AttributeChecker> checker);
+                       Ptr<const AttributeChecker> checker,
+                       SupportLevel supportLevel = SUPPORTED,
+                       const std::string &supportMsg = "");
 
   /**
    * Set the initial value of an Attribute.
@@ -379,6 +405,14 @@
    *             subclass.
    * \param [in] checker An instance of the associated AttributeChecker
    *             subclass.
+   * \param [in] supportLevel Support/deprecation status of the attribute.
+   * \param [in] supportMsg Upgrade hint if this attribute is no longer
+   *             supported.  If the attribute is \c DEPRECATED the attribute
+   *             behavior still exists, but user code should be updated
+   *             following guidance in the hint..
+   *             If the attribute is \c OBSOLETE, the hint should indicate
+   *             which class the attribute functional has been moved to,
+   *             or that the functionality is no longer supported.
    * \returns This TypeId instance
    */
   TypeId AddAttribute (std::string name,
@@ -386,7 +420,9 @@
                        uint32_t flags,
                        const AttributeValue &initialValue,
                        Ptr<const AttributeAccessor> accessor,
-                       Ptr<const AttributeChecker> checker);
+                       Ptr<const AttributeChecker> checker,
+                       SupportLevel supportLevel = SUPPORTED,
+                       const std::string &supportMsg = "");
 
   /**
    * Record a new TraceSource.
@@ -397,11 +433,12 @@
    * \param [in] accessor A pointer to a TraceSourceAccessor which can be
    *             used to connect/disconnect sinks to this trace source.
    * \returns this TypeId instance.
+   * \deprecated
    */
+  NS_DEPRECATED
   TypeId AddTraceSource (std::string name,
                          std::string help,
-                         Ptr<const TraceSourceAccessor> accessor)
-    NS_DEPRECATED;
+                         Ptr<const TraceSourceAccessor> accessor);
   
   /**
    * Record a new TraceSource.
@@ -414,12 +451,23 @@
    * \param [in] callback Fully qualified typedef name for the callback
    *             signature.  Generally this should begin with the
    *             "ns3::" namespace qualifier.
+   * \param [in] supportLevel Support/deprecation status of the attribute.
+   * \param [in] supportMsg Upgrade hint if this attribute is no longer
+   *             supported.  If the attribute is \c DEPRECATED the attribute
+   *             behavior still exists, but user code should be updated
+   *             following guidance in the hint..
+   *             If the attribute is \c OBSOLETE, the hint should indicate
+   *             which class the attribute functional has been moved to,
+   *             or that the functionality is no longer supported.
+   *             See test file \file type-id-test-suite.cc for examples.
    * \returns This TypeId instance.
    */
   TypeId AddTraceSource (std::string name,
                          std::string help,
                          Ptr<const TraceSourceAccessor> accessor,
-                         std::string callback);
+                         std::string callback,
+                         SupportLevel supportLevel = SUPPORTED,
+                         const std::string &supportMsg = "");
 
   /**
    * Hide this TypeId from documentation.
@@ -428,10 +476,10 @@
   TypeId HideFromDocumentation (void);
 
   /**
-   * Find an Attribute by name.
+   * Find an Attribute by name, retrieving the associated AttributeInformation.
    *
    * \param [in]  name The name of the requested attribute
-   * \param [out] info A pointer to the TypeId::AttributeInformation
+   * \param [in,out] info A pointer to the TypeId::AttributeInformation
    *              data structure where the result value of this method
    *              will be stored.
    * \returns \c true if the requested attribute could be found.
@@ -443,11 +491,23 @@
    * If no matching trace source is found, this method returns zero.
    *
    * \param [in] name The name of the requested trace source
-   * \returns The trace source accessor which can be used to connect
+   * \return The trace source accessor which can be used to connect
    *  and disconnect trace sinks with the requested trace source on
    *  an object instance.
    */
   Ptr<const TraceSourceAccessor> LookupTraceSourceByName (std::string name) const;
+  /**
+   * Find a TraceSource by name, retrieving the associated TraceSourceInformation.
+   *
+   * \param [in]  name The name of the requested trace source.
+   * \param [out] info A pointer to the TypeId::TraceSourceInformation
+   *              data structure where the result value of this method
+   *              will be stored.
+   * \return The trace source accessor which can be used to connect
+   *  and disconnect trace sinks with the requested trace source on
+   *  an object instance.
+   */
+  Ptr<const TraceSourceAccessor> LookupTraceSourceByName (std::string name, struct TraceSourceInformation *info) const;
 
   /**
    * Get the internal id of this TypeId.
@@ -461,7 +521,7 @@
   /**
    * Set the internal id of this TypeId.
    *
-   * \param [in] tid The internal integer which uniquely identifies
+   * \param [in] uid The internal integer which uniquely identifies
    *            this TypeId.  This TypeId should already have been registered.
    *
    * Typically this is used in serialization/deserialization.
@@ -470,7 +530,7 @@
    * at your own risk and don't be surprised that it eats raw 
    * babies on full-moon nights.
    */
-  void SetUid (uint16_t tid);
+  void SetUid (uint16_t uid);
 
   /** Default constructor.  This produces an invalid TypeId. */
   inline TypeId ();
diff -Naur ns-3.25/src/core/test/attribute-test-suite.cc ns-3.26/src/core/test/attribute-test-suite.cc
--- ns-3.25/src/core/test/attribute-test-suite.cc	2016-10-03 20:57:08.541245350 -0700
+++ ns-3.26/src/core/test/attribute-test-suite.cc	2016-10-03 19:49:01.845386178 -0700
@@ -823,17 +823,13 @@
   //
   // Try to set a UniformRandomVariable
   //
-  ok = p->SetAttributeFailSafe ("TestRandom", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
+  ok = p->SetAttributeFailSafe ("TestRandom", StringValue ("ns3::UniformRandomVariable[Min=0.|Max=1.]"));
   NS_TEST_ASSERT_MSG_EQ (ok, true, "Could not SetAttributeFailSafe() a UniformRandomVariable");
 
   //
   // Try to set a <snicker> ConstantRandomVariable
   //
-  //  ok = p->SetAttributeFailSafe ("TestRandom", StringValue ("ns3::ConstantRandomVariable[Constant=10.0]"));
-  //ok = p->SetAttributeFailSafe ("TestRandom", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
-
   ok = p->SetAttributeFailSafe ("TestRandom", StringValue ("ns3::ConstantRandomVariable[Constant=1.0]"));
-
   NS_TEST_ASSERT_MSG_EQ (ok, true, "Could not SetAttributeFailSafe() a ConstantRandomVariable");
 }
 
diff -Naur ns-3.25/src/core/test/command-line-test-suite.cc ns-3.26/src/core/test/command-line-test-suite.cc
--- ns-3.25/src/core/test/command-line-test-suite.cc	2016-10-03 20:57:08.543245334 -0700
+++ ns-3.26/src/core/test/command-line-test-suite.cc	2016-10-03 19:49:01.846386170 -0700
@@ -21,11 +21,13 @@
 #include "ns3/log.h"
 #include "ns3/config.h"
 #include "ns3/global-value.h"
+#include "ns3/system-path.h"
 #include "ns3/type-id.h"
 #include "ns3/test.h"
 #include "ns3/string.h"
 #include <cstdlib>
 #include <cstdarg>
+#include <sstream>
 
 using namespace ns3;
 
@@ -51,8 +53,13 @@
    * \param n the number of arguments
    */
   void Parse (CommandLine &cmd, int n, ...);
+
+  /** Test iteration counter to give each test a unique name. */
+  static int m_count;
 };
 
+int CommandLineTestCaseBase::m_count = 0;
+
 CommandLineTestCaseBase::CommandLineTestCaseBase (std::string description)
   : TestCase (description)
 {
@@ -61,21 +68,35 @@
 void
 CommandLineTestCaseBase::Parse (CommandLine &cmd, int n, ...)
 {
-  char **args = new char* [n+1];
-  args[0] = (char *) "Test";
+  std::stringstream ss;
+  ss << GetParent ()->GetName () << "-testcase-" << m_count << "-" << GetName ();
+  ++m_count;
+  
+  int argc = n + 1;  // test name will go in argv[0], other n to follow
+  char ** argv = new char* [argc + 1];  // extra entry for final null
+  argv[argc] = 0;
+
+  argv[0] = new char [strlen (ss.str ().c_str ()) + 1];
+  strcpy (argv[0], ss.str ().c_str ());
+  
   va_list ap;
   va_start (ap, n);
-  int i = 0;
-  while (i < n)
+  for (int i = 1; i < argc; ++i)
     {
       char *arg = va_arg (ap, char *);
-      args[i+1] = arg;
-      i++;
+      argv[i] = new char [strlen (arg) + 1];
+      strcpy (argv[i], arg);
     }
   va_end (ap);
-  int argc = n + 1;
-  cmd.Parse (argc, args);
-  delete [] args;
+
+  cmd.Parse (argc, argv);
+
+  // Clean up all the new's
+  for (int i = 0; i < argc; ++i)
+    {
+      delete [] argv[i];
+    }
+  delete [] argv;
 }
 
 /*************************************************************************//**
@@ -93,7 +114,7 @@
 };
 
 CommandLineBooleanTestCase::CommandLineBooleanTestCase ()
-  : CommandLineTestCaseBase ("Check boolean arguments")
+  : CommandLineTestCaseBase ("boolean")
 {
 }
 
@@ -141,7 +162,7 @@
 };
 
 CommandLineIntTestCase::CommandLineIntTestCase ()
-  : CommandLineTestCaseBase ("Check int arguments")
+  : CommandLineTestCaseBase ("int")
 {
 }
 
@@ -179,7 +200,7 @@
 };
 
 CommandLineUnsignedIntTestCase::CommandLineUnsignedIntTestCase ()
-  : CommandLineTestCaseBase ("Check unsigned int arguments")
+  : CommandLineTestCaseBase ("unsigned-int")
 {
 }
 
@@ -214,7 +235,7 @@
 };
 
 CommandLineStringTestCase::CommandLineStringTestCase ()
-  : CommandLineTestCaseBase ("Check unsigned int arguments")
+  : CommandLineTestCaseBase ("string")
 {
 }
 
diff -Naur ns-3.25/src/core/test/examples-to-run.py ns-3.26/src/core/test/examples-to-run.py
--- ns-3.25/src/core/test/examples-to-run.py	2016-10-03 20:57:08.544245326 -0700
+++ ns-3.26/src/core/test/examples-to-run.py	2016-10-03 19:49:01.847386163 -0700
@@ -14,6 +14,7 @@
     ("main-ptr", "True", "True"),
     ("main-random-variable", "True", "False"),
     ("sample-random-variable", "True", "True"),
+    ("test-string-value-formatting", "True", "True"),
 ]
 
 # A list of Python examples to run in order to ensure that they remain
diff -Naur ns-3.25/src/core/test/threaded-test-suite.cc ns-3.26/src/core/test/threaded-test-suite.cc
--- ns-3.25/src/core/test/threaded-test-suite.cc	2016-10-03 20:57:08.550245280 -0700
+++ ns-3.26/src/core/test/threaded-test-suite.cc	2016-10-03 19:49:01.854386110 -0700
@@ -91,7 +91,7 @@
   while (!me->m_stop)
     {
       me->m_threadWaiting[threadno] = true;
-      Simulator::ScheduleWithContext (uint32_t (-1), 
+      Simulator::ScheduleWithContext (threadno,
                                       MicroSeconds (1),
                                       &ThreadedSimulatorEventsTestCase::DoNothing, me, threadno);
       while (!me->m_stop && me->m_threadWaiting[threadno])
diff -Naur ns-3.25/src/core/test/type-id-test-suite.cc ns-3.26/src/core/test/type-id-test-suite.cc
--- ns-3.25/src/core/test/type-id-test-suite.cc	2016-10-03 20:57:08.552245264 -0700
+++ ns-3.26/src/core/test/type-id-test-suite.cc	2016-10-03 19:49:01.855386103 -0700
@@ -22,9 +22,14 @@
 #include <iomanip>
 #include <ctime>
 
+#include "ns3/integer.h"
+#include "ns3/double.h"
+#include "ns3/object.h"
+#include "ns3/traced-value.h"
 #include "ns3/type-id.h"
 #include "ns3/test.h"
 #include "ns3/log.h"
+#include "ns3/unused.h"
 
 using namespace std;
 
@@ -125,7 +130,7 @@
 };
 
 CollisionTestCase::CollisionTestCase ()
-  : TestCase ("Check behavour when type names collide")
+  : TestCase ("Check behavior when type names collide")
 {
 }
 
@@ -186,7 +191,140 @@
    */
   
 }
+
+
+//----------------------------
+//
+// Deprecated Attribute test
+
+class DeprecatedAttribute : public Object
+{
+private:
+  // float m_obsAttr;  // this is obsolete, no trivial forwarding
+  // int m_oldAttr;  // this has become m_attr
+  int m_attr;
+
+  // TracedValue<int> m_obsTrace;  // this is obsolete, no trivial forwarding
+  // TracedValue<double> m_oldTrace;  // this has become m_trace
+  TracedValue<double> m_trace;
+
+public:
+  DeprecatedAttribute () : m_attr (0) { NS_UNUSED (m_attr); };
+  virtual ~DeprecatedAttribute () { };
+
+  // Register a type with a deprecated Attribute and TraceSource
+  static TypeId GetTypeId (void)
+  {
+    static TypeId tid = TypeId ("DeprecatedAttribute")
+      .SetParent<Object> ()
+      
+      // The new attribute
+      .AddAttribute ("attribute",
+                     "the Attribute",
+                     IntegerValue (1),
+                     MakeIntegerAccessor (&DeprecatedAttribute::m_attr),
+                     MakeIntegerChecker<int> ())
+      // The old deprecated attribute
+      .AddAttribute ("oldAttribute",
+                     "the old attribute",
+                     IntegerValue (1),
+                     MakeIntegerAccessor (&DeprecatedAttribute::m_attr),
+                     MakeIntegerChecker<int> (),
+                     TypeId::DEPRECATED,
+                     "use 'attribute' instead")
+      // Obsolete attribute, as an example
+      .AddAttribute ("obsoleteAttribute",
+                     "the obsolete attribute",
+                     EmptyAttributeValue (),
+                     MakeEmptyAttributeAccessor (),
+                     MakeEmptyAttributeChecker (),
+                     TypeId::OBSOLETE,
+                     "refactor to use 'attribute'")
+
+      // The new trace source
+      .AddTraceSource ("trace",
+                       "the TraceSource",
+                       MakeTraceSourceAccessor (&DeprecatedAttribute::m_trace),
+                       "ns3::TracedValueCallback::Double")
+      // The old trace source
+      .AddTraceSource ("oldTrace",
+                       "the old trace source",
+                       MakeTraceSourceAccessor (&DeprecatedAttribute::m_trace),
+                       "ns3::TracedValueCallback::Double",
+                       TypeId::DEPRECATED,
+                       "use 'trace' instead")
+      // Obsolete trace source, as an example
+      .AddTraceSource ("obsoleteTraceSource",
+                       "the obsolete trace source",
+                       MakeEmptyTraceSourceAccessor (),
+                       "ns3::TracedValueCallback::Void",
+                       TypeId::OBSOLETE,
+                       "refactor to use 'trace'");
+    
+    return tid;
+  }
+
+};
+
+
+class DeprecatedAttributeTestCase : public TestCase
+{
+public:
+  DeprecatedAttributeTestCase ();
+  virtual ~DeprecatedAttributeTestCase ();
+private:
+  virtual void DoRun (void);
+
+};
+
+DeprecatedAttributeTestCase::DeprecatedAttributeTestCase ()
+  : TestCase ("Check deprecated Attributes and TraceSources")
+{
+}
+
+DeprecatedAttributeTestCase::~DeprecatedAttributeTestCase ()
+{
+}
+
+void
+DeprecatedAttributeTestCase::DoRun (void)
+{
+  cerr << suite << endl;
+  cerr << suite << GetName () << endl;
+
+  TypeId tid = DeprecatedAttribute::GetTypeId ();
+  cerr << suite << "DeprecatedAttribute TypeId: " << tid.GetUid () << endl;
   
+  //  Try the lookups
+  struct TypeId::AttributeInformation ainfo;
+  NS_TEST_ASSERT_MSG_EQ (tid.LookupAttributeByName ("attribute", &ainfo), true,
+                      "lookup new attribute");
+  cerr << suite << "lookup new attribute:"
+       << (ainfo.supportLevel == TypeId::SUPPORTED ? "supported" : "error")
+       << endl;
+
+  NS_TEST_ASSERT_MSG_EQ (tid.LookupAttributeByName ("oldAttribute", &ainfo), true,
+                      "lookup old attribute");
+  cerr << suite << "lookup old attribute:"
+       << (ainfo.supportLevel == TypeId::DEPRECATED ? "deprecated" : "error")
+       << endl;
+
+
+  struct TypeId::TraceSourceInformation tinfo;
+  Ptr<const TraceSourceAccessor> acc;
+  acc = tid.LookupTraceSourceByName ("trace", &tinfo);
+  NS_TEST_ASSERT_MSG_NE (acc, 0, "lookup new trace source");
+  cerr << suite << "lookup new trace source:"
+       << (tinfo.supportLevel == TypeId::SUPPORTED ? "supported" : "error")
+       << endl;
+
+  acc = tid.LookupTraceSourceByName ("oldTrace", &tinfo);
+  NS_TEST_ASSERT_MSG_NE (acc, 0, "lookup old trace source");
+  cerr << suite << "lookup old trace source:"
+       << (tinfo.supportLevel == TypeId::DEPRECATED ? "deprecated" : "error")
+       << endl;
+}
+
   
 //----------------------------
 //
@@ -298,6 +436,7 @@
   // as chained.
   AddTestCase (new UniqueTypeIdTestCase, QUICK);
   AddTestCase (new CollisionTestCase, QUICK);
+  AddTestCase (new DeprecatedAttributeTestCase, QUICK);
 }
 
 static TypeIdTestSuite g_TypeIdTestSuite;  
diff -Naur ns-3.25/src/core/wscript ns-3.26/src/core/wscript
--- ns-3.25/src/core/wscript	2016-10-03 20:57:08.553245256 -0700
+++ ns-3.26/src/core/wscript	2016-10-03 19:49:01.857386088 -0700
@@ -187,6 +187,7 @@
         'model/hash-murmur3.cc',
         'model/hash-fnv.cc',
         'model/hash.cc',
+        'model/des-metrics.cc',
         ]
 
     core_test = bld.create_ns3_module_test_library('core')
@@ -299,6 +300,7 @@
         'model/valgrind.h',
         'model/non-copyable.h',
         'model/build-profile.h',
+        'model/des-metrics.h',
         ]
 
     if sys.platform == 'win32':
diff -Naur ns-3.25/src/csma/bindings/callbacks_list.py ns-3.26/src/csma/bindings/callbacks_list.py
--- ns-3.25/src/csma/bindings/callbacks_list.py	2016-10-03 20:57:08.567245148 -0700
+++ ns-3.26/src/csma/bindings/callbacks_list.py	2016-10-03 19:49:01.872385976 -0700
@@ -1,4 +1,5 @@
 callback_classes = [
+    ['void', 'ns3::Ptr<ns3::QueueItem>', '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'],
     ['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'],
diff -Naur ns-3.25/src/csma/bindings/modulegen__gcc_ILP32.py ns-3.26/src/csma/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/csma/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.572245109 -0700
+++ ns-3.26/src/csma/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.877385939 -0700
@@ -108,14 +108,16 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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]
     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')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -128,6 +130,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -234,6 +238,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -302,6 +310,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -416,6 +426,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_internal(module):
     root_module = module.get_root()
@@ -516,6 +529,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -931,6 +946,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2339,10 +2359,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -2629,23 +2649,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2760,6 +2780,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2781,10 +2806,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2806,6 +2831,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2821,6 +2850,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -3060,6 +3093,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3253,10 +3291,19 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
@@ -3269,10 +3316,10 @@
     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]
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
@@ -3289,6 +3336,11 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3RandomVariableStream_methods(root_module, cls):
@@ -4436,6 +4488,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -5156,16 +5272,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -5193,35 +5324,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -5709,6 +5835,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/csma/bindings/modulegen__gcc_LP64.py ns-3.26/src/csma/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/csma/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.577245070 -0700
+++ ns-3.26/src/csma/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.881385909 -0700
@@ -108,14 +108,16 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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]
     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')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -128,6 +130,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -234,6 +238,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -302,6 +310,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -416,6 +426,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_internal(module):
     root_module = module.get_root()
@@ -516,6 +529,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -931,6 +946,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2339,10 +2359,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -2629,23 +2649,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2760,6 +2780,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2781,10 +2806,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2806,6 +2831,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2821,6 +2850,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -3060,6 +3093,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3253,10 +3291,19 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
@@ -3269,10 +3316,10 @@
     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]
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
@@ -3289,6 +3336,11 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3RandomVariableStream_methods(root_module, cls):
@@ -4436,6 +4488,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -5156,16 +5272,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -5193,35 +5324,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -5709,6 +5835,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/csma-layout/bindings/modulegen__gcc_ILP32.py ns-3.26/src/csma-layout/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/csma-layout/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.560245202 -0700
+++ ns-3.26/src/csma-layout/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.863386043 -0700
@@ -140,8 +140,8 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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]
@@ -152,6 +152,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -162,6 +164,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -232,10 +236,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -244,6 +248,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -276,6 +282,10 @@
     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'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
@@ -342,6 +352,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -501,11 +513,11 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -520,6 +532,8 @@
     register_Ns3CsmaChannel_methods(root_module, root_module['ns3::CsmaChannel'])
     register_Ns3DataRateChecker_methods(root_module, root_module['ns3::DataRateChecker'])
     register_Ns3DataRateValue_methods(root_module, root_module['ns3::DataRateValue'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
@@ -1008,6 +1022,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1535,6 +1554,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1548,6 +1572,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
@@ -2925,10 +2953,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3253,23 +3281,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3384,6 +3412,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -3405,10 +3438,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -3430,6 +3463,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -3445,6 +3482,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -4057,6 +4098,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -4425,6 +4471,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -4450,6 +4501,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -4598,6 +4654,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -4625,11 +4685,6 @@
                    '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', 
@@ -4692,52 +4747,6 @@
                    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')])
@@ -4922,6 +4931,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -5530,6 +5585,70 @@
                    [param('ns3::DataRate const &', 'value')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -7007,16 +7126,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -7044,35 +7178,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -7472,6 +7601,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/csma-layout/bindings/modulegen__gcc_LP64.py ns-3.26/src/csma-layout/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/csma-layout/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.565245163 -0700
+++ ns-3.26/src/csma-layout/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.869385999 -0700
@@ -140,8 +140,8 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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]
@@ -152,6 +152,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -162,6 +164,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -232,10 +236,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -244,6 +248,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -276,6 +282,10 @@
     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'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
@@ -342,6 +352,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -501,11 +513,11 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -520,6 +532,8 @@
     register_Ns3CsmaChannel_methods(root_module, root_module['ns3::CsmaChannel'])
     register_Ns3DataRateChecker_methods(root_module, root_module['ns3::DataRateChecker'])
     register_Ns3DataRateValue_methods(root_module, root_module['ns3::DataRateValue'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
@@ -1008,6 +1022,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1535,6 +1554,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1548,6 +1572,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
@@ -2925,10 +2953,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3253,23 +3281,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3384,6 +3412,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -3405,10 +3438,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -3430,6 +3463,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -3445,6 +3482,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -4057,6 +4098,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -4425,6 +4471,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -4450,6 +4501,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -4598,6 +4654,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -4625,11 +4685,6 @@
                    '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', 
@@ -4692,52 +4747,6 @@
                    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')])
@@ -4922,6 +4931,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -5530,6 +5585,70 @@
                    [param('ns3::DataRate const &', 'value')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -7007,16 +7126,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -7044,35 +7178,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -7472,6 +7601,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/dsdv/bindings/callbacks_list.py ns-3.26/src/dsdv/bindings/callbacks_list.py
--- ns-3.25/src/dsdv/bindings/callbacks_list.py	2016-10-03 20:57:08.585245008 -0700
+++ ns-3.26/src/dsdv/bindings/callbacks_list.py	2016-10-03 19:49:01.890385842 -0700
@@ -1,11 +1,12 @@
 callback_classes = [
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::Ptr<ns3::QueueItem>', '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::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.25/src/dsdv/bindings/modulegen__gcc_ILP32.py ns-3.26/src/dsdv/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/dsdv/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.590244969 -0700
+++ ns-3.26/src/dsdv/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.895385805 -0700
@@ -136,6 +136,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -156,6 +158,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -232,10 +236,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -244,6 +248,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -292,6 +298,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -370,6 +380,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -484,6 +496,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_dsdv(module):
     root_module = module.get_root()
@@ -589,11 +604,11 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -616,6 +631,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -881,6 +898,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1289,6 +1311,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1302,6 +1329,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3IntToType__0_methods(root_module, cls):
@@ -2669,23 +2700,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2800,6 +2831,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2821,10 +2857,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2846,6 +2882,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2861,6 +2901,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -3215,6 +3259,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3357,10 +3406,19 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
@@ -3373,10 +3431,10 @@
     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]
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
@@ -3393,6 +3451,11 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3QueueDisc_methods(root_module, cls):
@@ -3526,6 +3589,11 @@
     cls.add_method('SetNetDevice', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetParentDropCallback(ns3::Callback<void, 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('SetParentDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetQuota(uint32_t const quota) [member function]
     cls.add_method('SetQuota', 
                    'void', 
@@ -3541,10 +3609,10 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::CheckConfig() [member function]
     cls.add_method('CheckConfig', 
@@ -3934,6 +4002,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -3959,6 +4032,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -4107,6 +4185,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -4134,11 +4216,6 @@
                    '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', 
@@ -4201,52 +4278,6 @@
                    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')])
@@ -4431,6 +4462,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -4719,11 +4796,11 @@
                    '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]
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::TrafficControlLayer::GetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('GetRootQueueDiscOnDevice', 
                    'ns3::Ptr< ns3::QueueDisc >', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## traffic-control-layer.h (module 'traffic-control'): static ns3::TypeId ns3::TrafficControlLayer::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -5315,6 +5392,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -6647,16 +6788,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -6684,35 +6840,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -7200,6 +7351,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/dsdv/bindings/modulegen__gcc_LP64.py ns-3.26/src/dsdv/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/dsdv/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.596244923 -0700
+++ ns-3.26/src/dsdv/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.901385760 -0700
@@ -136,6 +136,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -156,6 +158,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -232,10 +236,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -244,6 +248,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -292,6 +298,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -370,6 +380,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -484,6 +496,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_dsdv(module):
     root_module = module.get_root()
@@ -589,11 +604,11 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -616,6 +631,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -881,6 +898,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1289,6 +1311,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1302,6 +1329,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3IntToType__0_methods(root_module, cls):
@@ -2669,23 +2700,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2800,6 +2831,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2821,10 +2857,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2846,6 +2882,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2861,6 +2901,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -3215,6 +3259,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3357,10 +3406,19 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
@@ -3373,10 +3431,10 @@
     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]
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
@@ -3393,6 +3451,11 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3QueueDisc_methods(root_module, cls):
@@ -3526,6 +3589,11 @@
     cls.add_method('SetNetDevice', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetParentDropCallback(ns3::Callback<void, 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('SetParentDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetQuota(uint32_t const quota) [member function]
     cls.add_method('SetQuota', 
                    'void', 
@@ -3541,10 +3609,10 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::CheckConfig() [member function]
     cls.add_method('CheckConfig', 
@@ -3934,6 +4002,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -3959,6 +4032,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -4107,6 +4185,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -4134,11 +4216,6 @@
                    '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', 
@@ -4201,52 +4278,6 @@
                    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')])
@@ -4431,6 +4462,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -4719,11 +4796,11 @@
                    '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]
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::TrafficControlLayer::GetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('GetRootQueueDiscOnDevice', 
                    'ns3::Ptr< ns3::QueueDisc >', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## traffic-control-layer.h (module 'traffic-control'): static ns3::TypeId ns3::TrafficControlLayer::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -5315,6 +5392,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -6647,16 +6788,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -6684,35 +6840,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -7200,6 +7351,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/dsdv/model/dsdv-routing-protocol.cc ns-3.26/src/dsdv/model/dsdv-routing-protocol.cc
--- ns-3.25/src/dsdv/model/dsdv-routing-protocol.cc	2016-10-03 20:57:08.601244884 -0700
+++ ns-3.26/src/dsdv/model/dsdv-routing-protocol.cc	2016-10-03 19:49:01.906385723 -0700
@@ -467,6 +467,15 @@
         }
       return true;
     }
+
+  // Check if input device supports IP forwarding
+  if (m_ipv4->IsForwarding (iif) == false)
+    {
+      NS_LOG_LOGIC ("Forwarding disabled for this interface");
+      ecb (p, header, Socket::ERROR_NOROUTETOHOST);
+      return true;
+    }
+
   RoutingTableEntry toDst;
   if (m_routingTable.LookupRoute (dst,toDst))
     {
diff -Naur ns-3.25/src/dsr/bindings/callbacks_list.py ns-3.26/src/dsr/bindings/callbacks_list.py
--- ns-3.25/src/dsr/bindings/callbacks_list.py	2016-10-03 20:57:08.603244868 -0700
+++ ns-3.26/src/dsr/bindings/callbacks_list.py	2016-10-03 19:49:01.908385708 -0700
@@ -4,11 +4,12 @@
     ['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'],
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', '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'],
     ['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.25/src/dsr/bindings/modulegen__gcc_ILP32.py ns-3.26/src/dsr/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/dsr/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.612244798 -0700
+++ ns-3.26/src/dsr/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.918385634 -0700
@@ -29,7 +29,7 @@
     ## 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')
+    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', 'WIFI_PHY_STANDARD_UNSPECIFIED'], 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]
@@ -104,6 +104,10 @@
     module.add_class('IntToType', import_from_module='ns.core', template_parameters=['6'])
     ## int-to-type.h (module 'core'): ns3::IntToType<6>::v_e [enumeration]
     module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 6 >'], import_from_module='ns.core')
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper [class]
+    module.add_class('InterferenceHelper', import_from_module='ns.wifi')
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer [struct]
+    module.add_class('SnrPer', import_from_module='ns.wifi', outer_class=root_module['ns3::InterferenceHelper'])
     ## 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]
@@ -118,12 +122,6 @@
     module.add_class('Ipv6Address', import_from_module='ns.network')
     ## ipv6-address.h (module 'network'): ns3::Ipv6Address [class]
     root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress [class]
-    module.add_class('Ipv6InterfaceAddress', import_from_module='ns.internet')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e [enumeration]
-    module.add_enum('State_e', ['TENTATIVE', 'DEPRECATED', 'PREFERRED', 'PERMANENT', 'HOMEADDRESS', 'TENTATIVE_OPTIMISTIC', 'INVALID'], outer_class=root_module['ns3::Ipv6InterfaceAddress'], import_from_module='ns.internet')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e [enumeration]
-    module.add_enum('Scope_e', ['HOST', 'LINKLOCAL', 'GLOBAL'], outer_class=root_module['ns3::Ipv6InterfaceAddress'], import_from_module='ns.internet')
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
     ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
@@ -162,6 +160,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], import_from_module='ns.core')
     ## system-wall-clock-ms.h (module 'core'): ns3::SystemWallClockMs [class]
     module.add_class('SystemWallClockMs', import_from_module='ns.core')
     ## tag.h (module 'network'): ns3::Tag [class]
@@ -184,10 +184,16 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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'])
+    ## vector.h (module 'core'): ns3::Vector2D [class]
+    module.add_class('Vector2D', import_from_module='ns.core')
+    ## vector.h (module 'core'): ns3::Vector3D [class]
+    module.add_class('Vector3D', import_from_module='ns.core')
     ## wifi-mode.h (module 'wifi'): ns3::WifiMode [class]
     module.add_class('WifiMode', import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeFactory [class]
@@ -276,6 +282,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::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', 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::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     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]
@@ -300,10 +308,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -312,6 +320,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -374,6 +384,8 @@
     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'])
+    ## channel.h (module 'network'): ns3::Channel [class]
+    module.add_class('Channel', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::ConstantRandomVariable [class]
     module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
@@ -382,6 +394,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -390,6 +406,8 @@
     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-rate-model.h (module 'wifi'): ns3::ErrorRateModel [class]
+    module.add_class('ErrorRateModel', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
     ## 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]
@@ -434,8 +452,6 @@
     module.add_class('Ipv6AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue [class]
     module.add_class('Ipv6AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface [class]
-    module.add_class('Ipv6Interface', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker [class]
     module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
@@ -446,6 +462,8 @@
     module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
     module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
+    module.add_class('MobilityModel', import_from_module='ns.mobility', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -472,6 +490,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -490,12 +510,22 @@
     module.add_class('UdpL4Protocol', import_from_module='ns.internet', parent=root_module['ns3::IpL4Protocol'])
     ## uinteger.h (module 'core'): ns3::UintegerValue [class]
     module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## 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]
+    module.add_class('Vector2DValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## vector.h (module 'core'): ns3::Vector3DChecker [class]
+    module.add_class('Vector3DChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## vector.h (module 'core'): ns3::Vector3DValue [class]
+    module.add_class('Vector3DValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities [class]
     module.add_class('VhtCapabilities', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
     ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesChecker [class]
     module.add_class('VhtCapabilitiesChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
     ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesValue [class]
     module.add_class('VhtCapabilitiesValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
+    ## wifi-channel.h (module 'wifi'): ns3::WifiChannel [class]
+    module.add_class('WifiChannel', import_from_module='ns.wifi', parent=root_module['ns3::Channel'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker [class]
     module.add_class('WifiModeChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeValue [class]
@@ -513,6 +543,7 @@
     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::list< ns3::ArpCache::Entry * >', 'ns3::ArpCache::Entry *', 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*')
@@ -526,9 +557,21 @@
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >', u'ns3::SequenceNumber8')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >*', u'ns3::SequenceNumber8*')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >&', u'ns3::SequenceNumber8&')
+    typehandlers.add_type_alias(u'ns3::Vector3D', u'ns3::Vector')
+    typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
+    typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
+    module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', u'ns3::WifiModeList')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', u'ns3::WifiModeList*')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', u'ns3::WifiModeList&')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue', u'ns3::VectorValue')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue*', u'ns3::VectorValue*')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue&', u'ns3::VectorValue&')
+    module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker', u'ns3::VectorChecker')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker*', u'ns3::VectorChecker*')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker&', u'ns3::VectorChecker&')
+    module.add_typedef(root_module['ns3::Vector3DChecker'], 'VectorChecker')
     typehandlers.add_type_alias(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&')
@@ -630,6 +673,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_dsr(module):
     root_module = module.get_root()
@@ -781,11 +827,12 @@
     register_Ns3IntToType__4_methods(root_module, root_module['ns3::IntToType< 4 >'])
     register_Ns3IntToType__5_methods(root_module, root_module['ns3::IntToType< 5 >'])
     register_Ns3IntToType__6_methods(root_module, root_module['ns3::IntToType< 6 >'])
+    register_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'])
     register_Ns3Ipv4InterfaceAddress_methods(root_module, root_module['ns3::Ipv4InterfaceAddress'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
-    register_Ns3Ipv6InterfaceAddress_methods(root_module, root_module['ns3::Ipv6InterfaceAddress'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
     register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
@@ -812,6 +859,8 @@
     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_Ns3Vector2D_methods(root_module, root_module['ns3::Vector2D'])
+    register_Ns3Vector3D_methods(root_module, root_module['ns3::Vector3D'])
     register_Ns3WifiMode_methods(root_module, root_module['ns3::WifiMode'])
     register_Ns3WifiModeFactory_methods(root_module, root_module['ns3::WifiModeFactory'])
     register_Ns3WifiPhyListener_methods(root_module, root_module['ns3::WifiPhyListener'])
@@ -845,6 +894,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__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> >'])
@@ -855,11 +905,11 @@
     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'])
-    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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -885,14 +935,18 @@
     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_Ns3Channel_methods(root_module, root_module['ns3::Channel'])
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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_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'])
     register_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
@@ -913,12 +967,12 @@
     register_Ns3Ipv4RoutingProtocol_methods(root_module, root_module['ns3::Ipv4RoutingProtocol'])
     register_Ns3Ipv6AddressChecker_methods(root_module, root_module['ns3::Ipv6AddressChecker'])
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
-    register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
+    register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
     register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
@@ -940,9 +994,14 @@
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3UdpL4Protocol_methods(root_module, root_module['ns3::UdpL4Protocol'])
     register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
+    register_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'])
+    register_Ns3Vector3DValue_methods(root_module, root_module['ns3::Vector3DValue'])
     register_Ns3VhtCapabilities_methods(root_module, root_module['ns3::VhtCapabilities'])
     register_Ns3VhtCapabilitiesChecker_methods(root_module, root_module['ns3::VhtCapabilitiesChecker'])
     register_Ns3VhtCapabilitiesValue_methods(root_module, root_module['ns3::VhtCapabilitiesValue'])
+    register_Ns3WifiChannel_methods(root_module, root_module['ns3::WifiChannel'])
     register_Ns3WifiModeChecker_methods(root_module, root_module['ns3::WifiModeChecker'])
     register_Ns3WifiModeValue_methods(root_module, root_module['ns3::WifiModeValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
@@ -1213,6 +1272,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1668,6 +1732,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1681,6 +1750,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3IntToType__0_methods(root_module, cls):
@@ -1732,6 +1805,74 @@
     cls.add_constructor([param('ns3::IntToType< 6 > const &', 'arg0')])
     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')])
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::InterferenceHelper() [constructor]
+    cls.add_constructor([])
+    ## interference-helper.h (module 'wifi'): ns3::Ptr<ns3::InterferenceHelper::Event> ns3::InterferenceHelper::Add(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::Time duration, double rxPower) [member function]
+    cls.add_method('Add', 
+                   'ns3::Ptr< ns3::InterferenceHelper::Event >', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::Time', 'duration'), param('double', 'rxPower')])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::AddForeignSignal(ns3::Time duration, double rxPower) [member function]
+    cls.add_method('AddForeignSignal', 
+                   'void', 
+                   [param('ns3::Time', 'duration'), param('double', 'rxPower')])
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer ns3::InterferenceHelper::CalculatePlcpHeaderSnrPer(ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
+    cls.add_method('CalculatePlcpHeaderSnrPer', 
+                   'ns3::InterferenceHelper::SnrPer', 
+                   [param('ns3::Ptr< ns3::InterferenceHelper::Event >', 'event')])
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer ns3::InterferenceHelper::CalculatePlcpPayloadSnrPer(ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
+    cls.add_method('CalculatePlcpPayloadSnrPer', 
+                   'ns3::InterferenceHelper::SnrPer', 
+                   [param('ns3::Ptr< ns3::InterferenceHelper::Event >', 'event')])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::EraseEvents() [member function]
+    cls.add_method('EraseEvents', 
+                   'void', 
+                   [])
+    ## interference-helper.h (module 'wifi'): ns3::Time ns3::InterferenceHelper::GetEnergyDuration(double energyW) [member function]
+    cls.add_method('GetEnergyDuration', 
+                   'ns3::Time', 
+                   [param('double', 'energyW')])
+    ## interference-helper.h (module 'wifi'): ns3::Ptr<ns3::ErrorRateModel> ns3::InterferenceHelper::GetErrorRateModel() const [member function]
+    cls.add_method('GetErrorRateModel', 
+                   'ns3::Ptr< ns3::ErrorRateModel >', 
+                   [], 
+                   is_const=True)
+    ## interference-helper.h (module 'wifi'): double ns3::InterferenceHelper::GetNoiseFigure() const [member function]
+    cls.add_method('GetNoiseFigure', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::NotifyRxEnd() [member function]
+    cls.add_method('NotifyRxEnd', 
+                   'void', 
+                   [])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::NotifyRxStart() [member function]
+    cls.add_method('NotifyRxStart', 
+                   'void', 
+                   [])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::SetErrorRateModel(ns3::Ptr<ns3::ErrorRateModel> rate) [member function]
+    cls.add_method('SetErrorRateModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::ErrorRateModel >', 'rate')])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::SetNoiseFigure(double value) [member function]
+    cls.add_method('SetNoiseFigure', 
+                   'void', 
+                   [param('double', 'value')])
+    return
+
+def register_Ns3InterferenceHelperSnrPer_methods(root_module, cls):
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer::SnrPer() [constructor]
+    cls.add_constructor([])
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer::SnrPer(ns3::InterferenceHelper::SnrPer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::InterferenceHelper::SnrPer const &', 'arg0')])
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer::per [variable]
+    cls.add_instance_attribute('per', 'double', is_const=False)
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer::snr [variable]
+    cls.add_instance_attribute('snr', 'double', is_const=False)
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -2173,66 +2314,6 @@
                    [param('uint8_t *', 'address')])
     return
 
-def register_Ns3Ipv6InterfaceAddress_methods(root_module, cls):
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address, ns3::Ipv6Prefix prefix) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6Prefix', 'prefix')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6InterfaceAddress const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6InterfaceAddress const &', 'o')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceAddress::GetAddress() const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): uint32_t ns3::Ipv6InterfaceAddress::GetNsDadUid() const [member function]
-    cls.add_method('GetNsDadUid', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Prefix ns3::Ipv6InterfaceAddress::GetPrefix() const [member function]
-    cls.add_method('GetPrefix', 
-                   'ns3::Ipv6Prefix', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e ns3::Ipv6InterfaceAddress::GetScope() const [member function]
-    cls.add_method('GetScope', 
-                   'ns3::Ipv6InterfaceAddress::Scope_e', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e ns3::Ipv6InterfaceAddress::GetState() const [member function]
-    cls.add_method('GetState', 
-                   'ns3::Ipv6InterfaceAddress::State_e', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): bool ns3::Ipv6InterfaceAddress::IsInSameSubnet(ns3::Ipv6Address b) const [member function]
-    cls.add_method('IsInSameSubnet', 
-                   'bool', 
-                   [param('ns3::Ipv6Address', 'b')], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('SetAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetNsDadUid(uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('uint32_t', 'uid')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetScope(ns3::Ipv6InterfaceAddress::Scope_e scope) [member function]
-    cls.add_method('SetScope', 
-                   'void', 
-                   [param('ns3::Ipv6InterfaceAddress::Scope_e', 'scope')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetState(ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    return
-
 def register_Ns3Ipv6Prefix_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_output_stream_operator()
@@ -3087,23 +3168,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3218,6 +3299,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -3239,10 +3325,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -3264,6 +3350,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -3279,6 +3369,40 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
+    return
+
+def register_Ns3Vector2D_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D(ns3::Vector2D const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2D const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D(double _x, double _y) [constructor]
+    cls.add_constructor([param('double', '_x'), param('double', '_y')])
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2D::x [variable]
+    cls.add_instance_attribute('x', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector2D::y [variable]
+    cls.add_instance_attribute('y', 'double', is_const=False)
+    return
+
+def register_Ns3Vector3D_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D(ns3::Vector3D const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3D const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D(double _x, double _y, double _z) [constructor]
+    cls.add_constructor([param('double', '_x'), param('double', '_y'), param('double', '_z')])
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3D::x [variable]
+    cls.add_instance_attribute('x', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector3D::y [variable]
+    cls.add_instance_attribute('y', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector3D::z [variable]
+    cls.add_instance_attribute('z', 'double', is_const=False)
     return
 
 def register_Ns3WifiMode_methods(root_module, cls):
@@ -4301,6 +4425,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -4443,10 +4572,19 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
@@ -4459,10 +4597,10 @@
     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]
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
@@ -4479,6 +4617,11 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3QueueDisc_methods(root_module, cls):
@@ -4612,6 +4755,11 @@
     cls.add_method('SetNetDevice', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetParentDropCallback(ns3::Callback<void, 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('SetParentDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetQuota(uint32_t const quota) [member function]
     cls.add_method('SetQuota', 
                    'void', 
@@ -4627,10 +4775,10 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::CheckConfig() [member function]
     cls.add_method('CheckConfig', 
@@ -4840,6 +4988,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3InterferenceHelperEvent_Ns3Empty_Ns3DefaultDeleter__lt__ns3InterferenceHelperEvent__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> >::SimpleRefCount(ns3::SimpleRefCount<ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter< ns3::InterferenceHelper::Event > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -5032,6 +5192,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -5057,6 +5222,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -5205,6 +5375,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -5232,11 +5406,6 @@
                    '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', 
@@ -5299,52 +5468,6 @@
                    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')])
@@ -5529,6 +5652,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -5817,11 +5986,11 @@
                    '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]
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::TrafficControlLayer::GetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('GetRootQueueDiscOnDevice', 
                    'ns3::Ptr< ns3::QueueDisc >', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## traffic-control-layer.h (module 'traffic-control'): static ns3::TypeId ns3::TrafficControlLayer::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -6314,10 +6483,10 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureDcf(ns3::Ptr<ns3::Dcf> dcf, uint32_t cwmin, uint32_t cwmax, ns3::AcIndex ac) [member function]
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureDcf(ns3::Ptr<ns3::Dcf> dcf, uint32_t cwmin, uint32_t cwmax, bool isDsss, ns3::AcIndex ac) [member function]
     cls.add_method('ConfigureDcf', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Dcf >', 'dcf'), param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('ns3::AcIndex', 'ac')], 
+                   [param('ns3::Ptr< ns3::Dcf >', 'dcf'), param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('bool', 'isDsss'), param('ns3::AcIndex', 'ac')], 
                    visibility='protected')
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('FinishConfigureStandard', 
@@ -6766,16 +6935,16 @@
     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]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::AddSupportedChannelWidth(uint32_t channelwidth) [member function]
     cls.add_method('AddSupportedChannelWidth', 
                    'void', 
-                   [param('uint32_t', 'width')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   [param('uint32_t', 'channelwidth')], 
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): int64_t ns3::WifiPhy::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
                    [param('int64_t', 'stream')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculatePlcpPreambleAndHeaderDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('CalculatePlcpPreambleAndHeaderDuration', 
                    'ns3::Time', 
@@ -6784,7 +6953,7 @@
     cls.add_method('CalculateSnr', 
                    'double', 
                    [param('ns3::WifiTxVector', 'txVector'), param('double', 'ber')], 
-                   is_pure_virtual=True, is_const=True, is_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) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
@@ -6797,12 +6966,31 @@
     cls.add_method('ConfigureStandard', 
                    'void', 
                    [param('ns3::WifiPhyStandard', 'standard')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::DbToRatio(double db) const [member function]
+    cls.add_method('DbToRatio', 
+                   'double', 
+                   [param('double', 'db')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::DbmToW(double dbm) const [member function]
+    cls.add_method('DbmToW', 
+                   'double', 
+                   [param('double', 'dbm')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DefineChannelNumber(uint16_t channelNumber, ns3::WifiPhyStandard standard, uint32_t frequency, uint32_t channelWidth) [member function]
+    cls.add_method('DefineChannelNumber', 
+                   'bool', 
+                   [param('uint16_t', 'channelNumber'), param('ns3::WifiPhyStandard', 'standard'), param('uint32_t', 'frequency'), param('uint32_t', 'channelWidth')])
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
     cls.add_method('GetBssMembershipSelector', 
                    'uint32_t', 
                    [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetCcaMode1Threshold() const [member function]
+    cls.add_method('GetCcaMode1Threshold', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::WifiPhy::GetChannel() const [member function]
     cls.add_method('GetChannel', 
                    'ns3::Ptr< ns3::WifiChannel >', 
@@ -6812,22 +7000,27 @@
     cls.add_method('GetChannelNumber', 
                    'uint16_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetChannelSwitchDelay() const [member function]
     cls.add_method('GetChannelSwitchDelay', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetChannelWidth() const [member function]
     cls.add_method('GetChannelWidth', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::NetDevice> ns3::WifiPhy::GetDevice() const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate11Mbps() [member function]
     cls.add_method('GetDsssRate11Mbps', 
                    'ns3::WifiMode', 
@@ -6848,6 +7041,16 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetEdThreshold() const [member function]
+    cls.add_method('GetEdThreshold', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetEdThresholdW() const [member function]
+    cls.add_method('GetEdThresholdW', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate12Mbps() [member function]
     cls.add_method('GetErpOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -6888,21 +7091,26 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::ErrorRateModel> ns3::WifiPhy::GetErrorRateModel() const [member function]
+    cls.add_method('GetErrorRateModel', 
+                   'ns3::Ptr< ns3::ErrorRateModel >', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetFrequency() const [member function]
     cls.add_method('GetFrequency', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGreenfield() const [member function]
     cls.add_method('GetGreenfield', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGuardInterval() const [member function]
     cls.add_method('GetGuardInterval', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs0() [member function]
     cls.add_method('GetHtMcs0', 
                    'ns3::WifiMode', 
@@ -7072,57 +7280,61 @@
     cls.add_method('GetLastRxStartTime', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
     cls.add_method('GetLdpc', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
     cls.add_method('GetMcs', 
                    'ns3::WifiMode', 
                    [param('uint8_t', 'mcs')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
     cls.add_method('GetMembershipSelectorModes', 
                    'ns3::WifiModeList', 
                    [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::MobilityModel> ns3::WifiPhy::GetMobility() [member function]
+    cls.add_method('GetMobility', 
+                   'ns3::Ptr< ns3::MobilityModel >', 
+                   [])
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
     cls.add_method('GetNBssMembershipSelectors', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
     cls.add_method('GetNMcs', 
                    'uint8_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
     cls.add_method('GetNModes', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNTxPower() const [member function]
     cls.add_method('GetNTxPower', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
     cls.add_method('GetNumberOfReceiveAntennas', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
     cls.add_method('GetNumberOfTransmitAntennas', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
     cls.add_method('GetOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -7291,46 +7503,66 @@
                    'ns3::Time', 
                    [param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetRxGain() const [member function]
+    cls.add_method('GetRxGain', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetRxNoiseFigure() const [member function]
+    cls.add_method('GetRxNoiseFigure', 
+                   'double', 
+                   [], 
+                   is_const=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)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiPhyStandard ns3::WifiPhy::GetStandard() const [member function]
+    cls.add_method('GetStandard', 
+                   'ns3::WifiPhyStandard', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
     cls.add_method('GetStateDuration', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetStbc() const [member function]
     cls.add_method('GetStbc', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   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)
+                   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)
+                   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)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxGain() const [member function]
+    cls.add_method('GetTxGain', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
     cls.add_method('GetTxPowerEnd', 
                    'double', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerStart() const [member function]
     cls.add_method('GetTxPowerStart', 
                    'double', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::WifiPhy::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -7391,46 +7623,51 @@
                    'ns3::WifiMode', 
                    [param('ns3::WifiMode', 'payloadMode')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsMcsSupported(ns3::WifiMode mcs) const [member function]
+    cls.add_method('IsMcsSupported', 
+                   'bool', 
+                   [param('ns3::WifiMode', 'mcs')], 
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
     cls.add_method('IsModeSupported', 
                    'bool', 
                    [param('ns3::WifiMode', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateBusy() [member function]
     cls.add_method('IsStateBusy', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateCcaBusy() [member function]
     cls.add_method('IsStateCcaBusy', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateIdle() [member function]
     cls.add_method('IsStateIdle', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateRx() [member function]
     cls.add_method('IsStateRx', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSleep() [member function]
     cls.add_method('IsStateSleep', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSwitching() [member function]
     cls.add_method('IsStateSwitching', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateTx() [member function]
     cls.add_method('IsStateTx', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static bool ns3::WifiPhy::IsValidTxVector(ns3::WifiTxVector txVector) [member function]
     cls.add_method('IsValidTxVector', 
                    'bool', 
@@ -7468,6 +7705,11 @@
     cls.add_method('NotifyTxEnd', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::RatioToDb(double ratio) const [member function]
+    cls.add_method('RatioToDb', 
+                   'double', 
+                   [param('double', 'ratio')], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('RegisterListener', 
                    'void', 
@@ -7488,61 +7730,93 @@
                    '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::SetCcaMode1Threshold(double threshold) [member function]
+    cls.add_method('SetCcaMode1Threshold', 
+                   'void', 
+                   [param('double', 'threshold')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
                    'void', 
                    [param('uint16_t', 'id')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelWidth(uint32_t channelwidth) [member function]
     cls.add_method('SetChannelWidth', 
                    'void', 
                    [param('uint32_t', 'channelwidth')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetEdThreshold(double threshold) [member function]
+    cls.add_method('SetEdThreshold', 
+                   'void', 
+                   [param('double', 'threshold')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetErrorRateModel(ns3::Ptr<ns3::ErrorRateModel> rate) [member function]
+    cls.add_method('SetErrorRateModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::ErrorRateModel >', 'rate')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
     cls.add_method('SetFrequency', 
                    'void', 
                    [param('uint32_t', 'freq')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGreenfield(bool greenfield) [member function]
     cls.add_method('SetGreenfield', 
                    'void', 
                    [param('bool', 'greenfield')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool guardInterval) [member function]
     cls.add_method('SetGuardInterval', 
                    'void', 
                    [param('bool', 'guardInterval')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool ldpc) [member function]
     cls.add_method('SetLdpc', 
                    'void', 
                    [param('bool', 'ldpc')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> mobility) [member function]
+    cls.add_method('SetMobility', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MobilityModel >', 'mobility')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNTxPower(uint32_t n) [member function]
+    cls.add_method('SetNTxPower', 
+                   'void', 
+                   [param('uint32_t', 'n')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
     cls.add_method('SetNumberOfReceiveAntennas', 
                    'void', 
                    [param('uint32_t', 'rx')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
     cls.add_method('SetNumberOfTransmitAntennas', 
                    'void', 
                    [param('uint32_t', 'tx')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,bool,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveOkCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::WifiTxVector,ns3::WifiPreamble,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveOkCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiTxVector, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetRxGain(double gain) [member function]
+    cls.add_method('SetRxGain', 
+                   'void', 
+                   [param('double', 'gain')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetRxNoiseFigure(double noiseFigureDb) [member function]
+    cls.add_method('SetRxNoiseFigure', 
+                   'void', 
+                   [param('double', 'noiseFigureDb')])
     ## 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)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetSleepMode() [member function]
     cls.add_method('SetSleepMode', 
                    'void', 
@@ -7552,12 +7826,64 @@
     cls.add_method('SetStbc', 
                    'void', 
                    [param('bool', 'stbc')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxGain(double gain) [member function]
+    cls.add_method('SetTxGain', 
+                   'void', 
+                   [param('double', 'gain')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxPowerEnd(double end) [member function]
+    cls.add_method('SetTxPowerEnd', 
+                   'void', 
+                   [param('double', 'end')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxPowerStart(double start) [member function]
+    cls.add_method('SetTxPowerStart', 
+                   'void', 
+                   [param('double', 'start')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('UnregisterListener', 
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::WToDbm(double w) const [member function]
+    cls.add_method('WToDbm', 
+                   'double', 
+                   [param('double', 'w')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DoChannelSwitch(uint16_t id) [member function]
+    cls.add_method('DoChannelSwitch', 
+                   'bool', 
+                   [param('uint16_t', 'id')], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DoFrequencySwitch(uint32_t frequency) [member function]
+    cls.add_method('DoFrequencySwitch', 
+                   'bool', 
+                   [param('uint32_t', 'frequency')], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetPowerDbm(uint8_t power) const [member function]
+    cls.add_method('GetPowerDbm', 
+                   'double', 
+                   [param('uint8_t', 'power')], 
+                   is_const=True, visibility='protected')
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureChannelForStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('ConfigureChannelForStandard', 
+                   'void', 
+                   [param('ns3::WifiPhyStandard', 'standard')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureDefaultsForStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('ConfigureDefaultsForStandard', 
+                   'void', 
+                   [param('ns3::WifiPhyStandard', 'standard')], 
+                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3WifiRemoteStationManager_methods(root_module, cls):
@@ -7879,7 +8205,8 @@
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetHtSupported(bool enable) [member function]
     cls.add_method('SetHtSupported', 
                    'void', 
-                   [param('bool', 'enable')])
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetMaxSlrc(uint32_t maxSlrc) [member function]
     cls.add_method('SetMaxSlrc', 
                    'void', 
@@ -7911,7 +8238,8 @@
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetVhtSupported(bool enable) [member function]
     cls.add_method('SetVhtSupported', 
                    'void', 
-                   [param('bool', 'enable')])
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
     cls.add_method('SetupMac', 
                    'void', 
@@ -8314,6 +8642,10 @@
     cls.add_method('Lookup', 
                    'ns3::ArpCache::Entry *', 
                    [param('ns3::Ipv4Address', 'destination')])
+    ## arp-cache.h (module 'internet'): std::list<ns3::ArpCache::Entry*,std::allocator<ns3::ArpCache::Entry*> > ns3::ArpCache::LookupInverse(ns3::Address destination) [member function]
+    cls.add_method('LookupInverse', 
+                   'std::list< ns3::ArpCache::Entry * >', 
+                   [param('ns3::Address', 'destination')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::PrintArpCache(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintArpCache', 
                    'void', 
@@ -8434,6 +8766,10 @@
     cls.add_method('SetMacAddresss', 
                    'void', 
                    [param('ns3::Address', 'macAddress')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::UpdateSeen() [member function]
+    cls.add_method('UpdateSeen', 
+                   'void', 
+                   [])
     ## 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', 
@@ -8629,6 +8965,33 @@
                    [param('ns3::CallbackBase', 'base')])
     return
 
+def register_Ns3Channel_methods(root_module, cls):
+    ## channel.h (module 'network'): ns3::Channel::Channel(ns3::Channel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Channel const &', 'arg0')])
+    ## channel.h (module 'network'): ns3::Channel::Channel() [constructor]
+    cls.add_constructor([])
+    ## channel.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::Channel::GetDevice(uint32_t i) const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'i')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## channel.h (module 'network'): uint32_t ns3::Channel::GetId() const [member function]
+    cls.add_method('GetId', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## channel.h (module 'network'): uint32_t ns3::Channel::GetNDevices() const [member function]
+    cls.add_method('GetNDevices', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## channel.h (module 'network'): static ns3::TypeId ns3::Channel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=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', 
@@ -8753,6 +9116,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -8891,6 +9318,28 @@
                    is_virtual=True)
     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::WifiTxVector txVector, double ber) const [member function]
+    cls.add_method('CalculateSnr', 
+                   'double', 
+                   [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', 
+                   'double', 
+                   [param('ns3::WifiMode', 'mode'), param('ns3::WifiTxVector', 'txVector'), param('double', 'snr'), param('uint32_t', 'nbits')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## error-rate-model.h (module 'wifi'): static ns3::TypeId ns3::ErrorRateModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=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')])
@@ -10163,165 +10612,6 @@
                    [param('ns3::Ipv6Address const &', 'value')])
     return
 
-def register_Ns3Ipv6Interface_methods(root_module, cls):
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface(ns3::Ipv6Interface const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Interface const &', 'arg0')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::AddAddress(ns3::Ipv6InterfaceAddress iface) [member function]
-    cls.add_method('AddAddress', 
-                   'bool', 
-                   [param('ns3::Ipv6InterfaceAddress', 'iface')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddress(uint32_t index) const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddressMatchingDestination(ns3::Ipv6Address dst) [member function]
-    cls.add_method('GetAddressMatchingDestination', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetBaseReachableTime() const [member function]
-    cls.add_method('GetBaseReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint8_t ns3::Ipv6Interface::GetCurHopLimit() const [member function]
-    cls.add_method('GetCurHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6Interface::GetDevice() const [member function]
-    cls.add_method('GetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetLinkLocalAddress() const [member function]
-    cls.add_method('GetLinkLocalAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetMetric() const [member function]
-    cls.add_method('GetMetric', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint32_t ns3::Ipv6Interface::GetNAddresses() const [member function]
-    cls.add_method('GetNAddresses', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ptr<ns3::NdiscCache> ns3::Ipv6Interface::GetNdiscCache() const [member function]
-    cls.add_method('GetNdiscCache', 
-                   'ns3::Ptr< ns3::NdiscCache >', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetReachableTime() const [member function]
-    cls.add_method('GetReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetRetransTimer() const [member function]
-    cls.add_method('GetRetransTimer', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): static ns3::TypeId ns3::Ipv6Interface::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsDown() const [member function]
-    cls.add_method('IsDown', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsForwarding() const [member function]
-    cls.add_method('IsForwarding', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::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)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(uint32_t index) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & hdr, ns3::Ipv6Address dest) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [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', 
-                   [param('uint16_t', 'baseReachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetCurHopLimit(uint8_t curHopLimit) [member function]
-    cls.add_method('SetCurHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'curHopLimit')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('SetDevice', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDown() [member function]
-    cls.add_method('SetDown', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetForwarding(bool forward) [member function]
-    cls.add_method('SetForwarding', 
-                   'void', 
-                   [param('bool', 'forward')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetMetric(uint16_t metric) [member function]
-    cls.add_method('SetMetric', 
-                   'void', 
-                   [param('uint16_t', 'metric')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNode(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('SetNode', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNsDadUid(ns3::Ipv6Address address, uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'uid')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetReachableTime(uint16_t reachableTime) [member function]
-    cls.add_method('SetReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'reachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetRetransTimer(uint16_t retransTimer) [member function]
-    cls.add_method('SetRetransTimer', 
-                   'void', 
-                   [param('uint16_t', 'retransTimer')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetState(ns3::Ipv6Address address, ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::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', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
 def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [constructor]
     cls.add_constructor([])
@@ -10440,6 +10730,71 @@
                    [param('ns3::Mac48Address const &', 'value')])
     return
 
+def register_Ns3MobilityModel_methods(root_module, cls):
+    ## mobility-model.h (module 'mobility'): ns3::MobilityModel::MobilityModel(ns3::MobilityModel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MobilityModel const &', 'arg0')])
+    ## mobility-model.h (module 'mobility'): ns3::MobilityModel::MobilityModel() [constructor]
+    cls.add_constructor([])
+    ## mobility-model.h (module 'mobility'): int64_t ns3::MobilityModel::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## mobility-model.h (module 'mobility'): double ns3::MobilityModel::GetDistanceFrom(ns3::Ptr<const ns3::MobilityModel> position) const [member function]
+    cls.add_method('GetDistanceFrom', 
+                   'double', 
+                   [param('ns3::Ptr< ns3::MobilityModel const >', 'position')], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::GetPosition() const [member function]
+    cls.add_method('GetPosition', 
+                   'ns3::Vector', 
+                   [], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): double ns3::MobilityModel::GetRelativeSpeed(ns3::Ptr<const ns3::MobilityModel> other) const [member function]
+    cls.add_method('GetRelativeSpeed', 
+                   'double', 
+                   [param('ns3::Ptr< ns3::MobilityModel const >', 'other')], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): static ns3::TypeId ns3::MobilityModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::GetVelocity() const [member function]
+    cls.add_method('GetVelocity', 
+                   'ns3::Vector', 
+                   [], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::SetPosition(ns3::Vector const & position) [member function]
+    cls.add_method('SetPosition', 
+                   'void', 
+                   [param('ns3::Vector const &', 'position')])
+    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::NotifyCourseChange() const [member function]
+    cls.add_method('NotifyCourseChange', 
+                   'void', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## mobility-model.h (module 'mobility'): int64_t ns3::MobilityModel::DoAssignStreams(int64_t start) [member function]
+    cls.add_method('DoAssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'start')], 
+                   visibility='private', is_virtual=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::DoGetPosition() const [member function]
+    cls.add_method('DoGetPosition', 
+                   'ns3::Vector', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::DoGetVelocity() const [member function]
+    cls.add_method('DoGetVelocity', 
+                   'ns3::Vector', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::DoSetPosition(ns3::Vector const & position) [member function]
+    cls.add_method('DoSetPosition', 
+                   'void', 
+                   [param('ns3::Vector const &', 'position')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -10577,16 +10932,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -10614,35 +10984,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -11130,6 +11495,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
@@ -11619,6 +11989,86 @@
                    [param('uint64_t const &', 'value')])
     return
 
+def register_Ns3Vector2DChecker_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector2DChecker::Vector2DChecker() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2DChecker::Vector2DChecker(ns3::Vector2DChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2DChecker const &', 'arg0')])
+    return
+
+def register_Ns3Vector2DValue_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue(ns3::Vector2DValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2DValue const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue(ns3::Vector2D const & value) [constructor]
+    cls.add_constructor([param('ns3::Vector2D const &', 'value')])
+    ## vector.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::Vector2DValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vector.h (module 'core'): bool ns3::Vector2DValue::DeserializeFromString(std::string value, ns3::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)
+    ## vector.h (module 'core'): ns3::Vector2D ns3::Vector2DValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Vector2D', 
+                   [], 
+                   is_const=True)
+    ## vector.h (module 'core'): std::string ns3::Vector2DValue::SerializeToString(ns3::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)
+    ## vector.h (module 'core'): void ns3::Vector2DValue::Set(ns3::Vector2D const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Vector2D const &', 'value')])
+    return
+
+def register_Ns3Vector3DChecker_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector3DChecker::Vector3DChecker() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3DChecker::Vector3DChecker(ns3::Vector3DChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3DChecker const &', 'arg0')])
+    return
+
+def register_Ns3Vector3DValue_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue(ns3::Vector3DValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3DValue const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue(ns3::Vector3D const & value) [constructor]
+    cls.add_constructor([param('ns3::Vector3D const &', 'value')])
+    ## vector.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::Vector3DValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vector.h (module 'core'): bool ns3::Vector3DValue::DeserializeFromString(std::string value, ns3::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)
+    ## vector.h (module 'core'): ns3::Vector3D ns3::Vector3DValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Vector3D', 
+                   [], 
+                   is_const=True)
+    ## vector.h (module 'core'): std::string ns3::Vector3DValue::SerializeToString(ns3::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)
+    ## vector.h (module 'core'): void ns3::Vector3DValue::Set(ns3::Vector3D const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Vector3D const &', 'value')])
+    return
+
 def register_Ns3VhtCapabilities_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities::VhtCapabilities(ns3::VhtCapabilities const & arg0) [copy constructor]
@@ -11850,6 +12300,18 @@
                    [param('ns3::VhtCapabilities const &', 'value')])
     return
 
+def register_Ns3WifiChannel_methods(root_module, cls):
+    ## wifi-channel.h (module 'wifi'): ns3::WifiChannel::WifiChannel() [constructor]
+    cls.add_constructor([])
+    ## wifi-channel.h (module 'wifi'): ns3::WifiChannel::WifiChannel(ns3::WifiChannel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiChannel const &', 'arg0')])
+    ## wifi-channel.h (module 'wifi'): static ns3::TypeId ns3::WifiChannel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3WifiModeChecker_methods(root_module, cls):
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker::WifiModeChecker() [constructor]
     cls.add_constructor([])
@@ -14022,10 +14484,6 @@
     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', 
diff -Naur ns-3.25/src/dsr/bindings/modulegen__gcc_LP64.py ns-3.26/src/dsr/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/dsr/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.621244729 -0700
+++ ns-3.26/src/dsr/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.927385566 -0700
@@ -29,7 +29,7 @@
     ## 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')
+    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', 'WIFI_PHY_STANDARD_UNSPECIFIED'], 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]
@@ -104,6 +104,10 @@
     module.add_class('IntToType', import_from_module='ns.core', template_parameters=['6'])
     ## int-to-type.h (module 'core'): ns3::IntToType<6>::v_e [enumeration]
     module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 6 >'], import_from_module='ns.core')
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper [class]
+    module.add_class('InterferenceHelper', import_from_module='ns.wifi')
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer [struct]
+    module.add_class('SnrPer', import_from_module='ns.wifi', outer_class=root_module['ns3::InterferenceHelper'])
     ## 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]
@@ -118,12 +122,6 @@
     module.add_class('Ipv6Address', import_from_module='ns.network')
     ## ipv6-address.h (module 'network'): ns3::Ipv6Address [class]
     root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress [class]
-    module.add_class('Ipv6InterfaceAddress', import_from_module='ns.internet')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e [enumeration]
-    module.add_enum('State_e', ['TENTATIVE', 'DEPRECATED', 'PREFERRED', 'PERMANENT', 'HOMEADDRESS', 'TENTATIVE_OPTIMISTIC', 'INVALID'], outer_class=root_module['ns3::Ipv6InterfaceAddress'], import_from_module='ns.internet')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e [enumeration]
-    module.add_enum('Scope_e', ['HOST', 'LINKLOCAL', 'GLOBAL'], outer_class=root_module['ns3::Ipv6InterfaceAddress'], import_from_module='ns.internet')
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
     ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
@@ -162,6 +160,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], import_from_module='ns.core')
     ## system-wall-clock-ms.h (module 'core'): ns3::SystemWallClockMs [class]
     module.add_class('SystemWallClockMs', import_from_module='ns.core')
     ## tag.h (module 'network'): ns3::Tag [class]
@@ -184,10 +184,16 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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'])
+    ## vector.h (module 'core'): ns3::Vector2D [class]
+    module.add_class('Vector2D', import_from_module='ns.core')
+    ## vector.h (module 'core'): ns3::Vector3D [class]
+    module.add_class('Vector3D', import_from_module='ns.core')
     ## wifi-mode.h (module 'wifi'): ns3::WifiMode [class]
     module.add_class('WifiMode', import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeFactory [class]
@@ -276,6 +282,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::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', 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::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     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]
@@ -300,10 +308,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -312,6 +320,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -374,6 +384,8 @@
     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'])
+    ## channel.h (module 'network'): ns3::Channel [class]
+    module.add_class('Channel', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::ConstantRandomVariable [class]
     module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
@@ -382,6 +394,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -390,6 +406,8 @@
     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-rate-model.h (module 'wifi'): ns3::ErrorRateModel [class]
+    module.add_class('ErrorRateModel', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
     ## 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]
@@ -434,8 +452,6 @@
     module.add_class('Ipv6AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue [class]
     module.add_class('Ipv6AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface [class]
-    module.add_class('Ipv6Interface', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker [class]
     module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
@@ -446,6 +462,8 @@
     module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
     module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
+    module.add_class('MobilityModel', import_from_module='ns.mobility', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -472,6 +490,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -490,12 +510,22 @@
     module.add_class('UdpL4Protocol', import_from_module='ns.internet', parent=root_module['ns3::IpL4Protocol'])
     ## uinteger.h (module 'core'): ns3::UintegerValue [class]
     module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## 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]
+    module.add_class('Vector2DValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## vector.h (module 'core'): ns3::Vector3DChecker [class]
+    module.add_class('Vector3DChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## vector.h (module 'core'): ns3::Vector3DValue [class]
+    module.add_class('Vector3DValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities [class]
     module.add_class('VhtCapabilities', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
     ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesChecker [class]
     module.add_class('VhtCapabilitiesChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
     ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesValue [class]
     module.add_class('VhtCapabilitiesValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
+    ## wifi-channel.h (module 'wifi'): ns3::WifiChannel [class]
+    module.add_class('WifiChannel', import_from_module='ns.wifi', parent=root_module['ns3::Channel'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker [class]
     module.add_class('WifiModeChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeValue [class]
@@ -513,6 +543,7 @@
     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::list< ns3::ArpCache::Entry * >', 'ns3::ArpCache::Entry *', 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*')
@@ -526,9 +557,21 @@
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >', u'ns3::SequenceNumber8')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >*', u'ns3::SequenceNumber8*')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >&', u'ns3::SequenceNumber8&')
+    typehandlers.add_type_alias(u'ns3::Vector3D', u'ns3::Vector')
+    typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
+    typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
+    module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', u'ns3::WifiModeList')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', u'ns3::WifiModeList*')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', u'ns3::WifiModeList&')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue', u'ns3::VectorValue')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue*', u'ns3::VectorValue*')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue&', u'ns3::VectorValue&')
+    module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker', u'ns3::VectorChecker')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker*', u'ns3::VectorChecker*')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker&', u'ns3::VectorChecker&')
+    module.add_typedef(root_module['ns3::Vector3DChecker'], 'VectorChecker')
     typehandlers.add_type_alias(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&')
@@ -630,6 +673,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_dsr(module):
     root_module = module.get_root()
@@ -781,11 +827,12 @@
     register_Ns3IntToType__4_methods(root_module, root_module['ns3::IntToType< 4 >'])
     register_Ns3IntToType__5_methods(root_module, root_module['ns3::IntToType< 5 >'])
     register_Ns3IntToType__6_methods(root_module, root_module['ns3::IntToType< 6 >'])
+    register_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'])
     register_Ns3Ipv4InterfaceAddress_methods(root_module, root_module['ns3::Ipv4InterfaceAddress'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
-    register_Ns3Ipv6InterfaceAddress_methods(root_module, root_module['ns3::Ipv6InterfaceAddress'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
     register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
@@ -812,6 +859,8 @@
     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_Ns3Vector2D_methods(root_module, root_module['ns3::Vector2D'])
+    register_Ns3Vector3D_methods(root_module, root_module['ns3::Vector3D'])
     register_Ns3WifiMode_methods(root_module, root_module['ns3::WifiMode'])
     register_Ns3WifiModeFactory_methods(root_module, root_module['ns3::WifiModeFactory'])
     register_Ns3WifiPhyListener_methods(root_module, root_module['ns3::WifiPhyListener'])
@@ -845,6 +894,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__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> >'])
@@ -855,11 +905,11 @@
     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'])
-    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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -885,14 +935,18 @@
     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_Ns3Channel_methods(root_module, root_module['ns3::Channel'])
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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_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'])
     register_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
@@ -913,12 +967,12 @@
     register_Ns3Ipv4RoutingProtocol_methods(root_module, root_module['ns3::Ipv4RoutingProtocol'])
     register_Ns3Ipv6AddressChecker_methods(root_module, root_module['ns3::Ipv6AddressChecker'])
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
-    register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
+    register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
     register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
@@ -940,9 +994,14 @@
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3UdpL4Protocol_methods(root_module, root_module['ns3::UdpL4Protocol'])
     register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
+    register_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'])
+    register_Ns3Vector3DValue_methods(root_module, root_module['ns3::Vector3DValue'])
     register_Ns3VhtCapabilities_methods(root_module, root_module['ns3::VhtCapabilities'])
     register_Ns3VhtCapabilitiesChecker_methods(root_module, root_module['ns3::VhtCapabilitiesChecker'])
     register_Ns3VhtCapabilitiesValue_methods(root_module, root_module['ns3::VhtCapabilitiesValue'])
+    register_Ns3WifiChannel_methods(root_module, root_module['ns3::WifiChannel'])
     register_Ns3WifiModeChecker_methods(root_module, root_module['ns3::WifiModeChecker'])
     register_Ns3WifiModeValue_methods(root_module, root_module['ns3::WifiModeValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
@@ -1213,6 +1272,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1668,6 +1732,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1681,6 +1750,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3IntToType__0_methods(root_module, cls):
@@ -1732,6 +1805,74 @@
     cls.add_constructor([param('ns3::IntToType< 6 > const &', 'arg0')])
     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')])
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::InterferenceHelper() [constructor]
+    cls.add_constructor([])
+    ## interference-helper.h (module 'wifi'): ns3::Ptr<ns3::InterferenceHelper::Event> ns3::InterferenceHelper::Add(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::Time duration, double rxPower) [member function]
+    cls.add_method('Add', 
+                   'ns3::Ptr< ns3::InterferenceHelper::Event >', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::Time', 'duration'), param('double', 'rxPower')])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::AddForeignSignal(ns3::Time duration, double rxPower) [member function]
+    cls.add_method('AddForeignSignal', 
+                   'void', 
+                   [param('ns3::Time', 'duration'), param('double', 'rxPower')])
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer ns3::InterferenceHelper::CalculatePlcpHeaderSnrPer(ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
+    cls.add_method('CalculatePlcpHeaderSnrPer', 
+                   'ns3::InterferenceHelper::SnrPer', 
+                   [param('ns3::Ptr< ns3::InterferenceHelper::Event >', 'event')])
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer ns3::InterferenceHelper::CalculatePlcpPayloadSnrPer(ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
+    cls.add_method('CalculatePlcpPayloadSnrPer', 
+                   'ns3::InterferenceHelper::SnrPer', 
+                   [param('ns3::Ptr< ns3::InterferenceHelper::Event >', 'event')])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::EraseEvents() [member function]
+    cls.add_method('EraseEvents', 
+                   'void', 
+                   [])
+    ## interference-helper.h (module 'wifi'): ns3::Time ns3::InterferenceHelper::GetEnergyDuration(double energyW) [member function]
+    cls.add_method('GetEnergyDuration', 
+                   'ns3::Time', 
+                   [param('double', 'energyW')])
+    ## interference-helper.h (module 'wifi'): ns3::Ptr<ns3::ErrorRateModel> ns3::InterferenceHelper::GetErrorRateModel() const [member function]
+    cls.add_method('GetErrorRateModel', 
+                   'ns3::Ptr< ns3::ErrorRateModel >', 
+                   [], 
+                   is_const=True)
+    ## interference-helper.h (module 'wifi'): double ns3::InterferenceHelper::GetNoiseFigure() const [member function]
+    cls.add_method('GetNoiseFigure', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::NotifyRxEnd() [member function]
+    cls.add_method('NotifyRxEnd', 
+                   'void', 
+                   [])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::NotifyRxStart() [member function]
+    cls.add_method('NotifyRxStart', 
+                   'void', 
+                   [])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::SetErrorRateModel(ns3::Ptr<ns3::ErrorRateModel> rate) [member function]
+    cls.add_method('SetErrorRateModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::ErrorRateModel >', 'rate')])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::SetNoiseFigure(double value) [member function]
+    cls.add_method('SetNoiseFigure', 
+                   'void', 
+                   [param('double', 'value')])
+    return
+
+def register_Ns3InterferenceHelperSnrPer_methods(root_module, cls):
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer::SnrPer() [constructor]
+    cls.add_constructor([])
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer::SnrPer(ns3::InterferenceHelper::SnrPer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::InterferenceHelper::SnrPer const &', 'arg0')])
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer::per [variable]
+    cls.add_instance_attribute('per', 'double', is_const=False)
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer::snr [variable]
+    cls.add_instance_attribute('snr', 'double', is_const=False)
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -2173,66 +2314,6 @@
                    [param('uint8_t *', 'address')])
     return
 
-def register_Ns3Ipv6InterfaceAddress_methods(root_module, cls):
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address, ns3::Ipv6Prefix prefix) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6Prefix', 'prefix')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6InterfaceAddress const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6InterfaceAddress const &', 'o')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceAddress::GetAddress() const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): uint32_t ns3::Ipv6InterfaceAddress::GetNsDadUid() const [member function]
-    cls.add_method('GetNsDadUid', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Prefix ns3::Ipv6InterfaceAddress::GetPrefix() const [member function]
-    cls.add_method('GetPrefix', 
-                   'ns3::Ipv6Prefix', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e ns3::Ipv6InterfaceAddress::GetScope() const [member function]
-    cls.add_method('GetScope', 
-                   'ns3::Ipv6InterfaceAddress::Scope_e', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e ns3::Ipv6InterfaceAddress::GetState() const [member function]
-    cls.add_method('GetState', 
-                   'ns3::Ipv6InterfaceAddress::State_e', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): bool ns3::Ipv6InterfaceAddress::IsInSameSubnet(ns3::Ipv6Address b) const [member function]
-    cls.add_method('IsInSameSubnet', 
-                   'bool', 
-                   [param('ns3::Ipv6Address', 'b')], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('SetAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetNsDadUid(uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('uint32_t', 'uid')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetScope(ns3::Ipv6InterfaceAddress::Scope_e scope) [member function]
-    cls.add_method('SetScope', 
-                   'void', 
-                   [param('ns3::Ipv6InterfaceAddress::Scope_e', 'scope')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetState(ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    return
-
 def register_Ns3Ipv6Prefix_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_output_stream_operator()
@@ -3087,23 +3168,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3218,6 +3299,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -3239,10 +3325,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -3264,6 +3350,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -3279,6 +3369,40 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
+    return
+
+def register_Ns3Vector2D_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D(ns3::Vector2D const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2D const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D(double _x, double _y) [constructor]
+    cls.add_constructor([param('double', '_x'), param('double', '_y')])
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2D::x [variable]
+    cls.add_instance_attribute('x', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector2D::y [variable]
+    cls.add_instance_attribute('y', 'double', is_const=False)
+    return
+
+def register_Ns3Vector3D_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D(ns3::Vector3D const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3D const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D(double _x, double _y, double _z) [constructor]
+    cls.add_constructor([param('double', '_x'), param('double', '_y'), param('double', '_z')])
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3D::x [variable]
+    cls.add_instance_attribute('x', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector3D::y [variable]
+    cls.add_instance_attribute('y', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector3D::z [variable]
+    cls.add_instance_attribute('z', 'double', is_const=False)
     return
 
 def register_Ns3WifiMode_methods(root_module, cls):
@@ -4301,6 +4425,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -4443,10 +4572,19 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
@@ -4459,10 +4597,10 @@
     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]
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
@@ -4479,6 +4617,11 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3QueueDisc_methods(root_module, cls):
@@ -4612,6 +4755,11 @@
     cls.add_method('SetNetDevice', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetParentDropCallback(ns3::Callback<void, 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('SetParentDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetQuota(uint32_t const quota) [member function]
     cls.add_method('SetQuota', 
                    'void', 
@@ -4627,10 +4775,10 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::CheckConfig() [member function]
     cls.add_method('CheckConfig', 
@@ -4840,6 +4988,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3InterferenceHelperEvent_Ns3Empty_Ns3DefaultDeleter__lt__ns3InterferenceHelperEvent__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> >::SimpleRefCount(ns3::SimpleRefCount<ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter< ns3::InterferenceHelper::Event > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -5032,6 +5192,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -5057,6 +5222,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -5205,6 +5375,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -5232,11 +5406,6 @@
                    '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', 
@@ -5299,52 +5468,6 @@
                    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')])
@@ -5529,6 +5652,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -5817,11 +5986,11 @@
                    '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]
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::TrafficControlLayer::GetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('GetRootQueueDiscOnDevice', 
                    'ns3::Ptr< ns3::QueueDisc >', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## traffic-control-layer.h (module 'traffic-control'): static ns3::TypeId ns3::TrafficControlLayer::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -6314,10 +6483,10 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureDcf(ns3::Ptr<ns3::Dcf> dcf, uint32_t cwmin, uint32_t cwmax, ns3::AcIndex ac) [member function]
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureDcf(ns3::Ptr<ns3::Dcf> dcf, uint32_t cwmin, uint32_t cwmax, bool isDsss, ns3::AcIndex ac) [member function]
     cls.add_method('ConfigureDcf', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Dcf >', 'dcf'), param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('ns3::AcIndex', 'ac')], 
+                   [param('ns3::Ptr< ns3::Dcf >', 'dcf'), param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('bool', 'isDsss'), param('ns3::AcIndex', 'ac')], 
                    visibility='protected')
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('FinishConfigureStandard', 
@@ -6766,16 +6935,16 @@
     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]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::AddSupportedChannelWidth(uint32_t channelwidth) [member function]
     cls.add_method('AddSupportedChannelWidth', 
                    'void', 
-                   [param('uint32_t', 'width')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   [param('uint32_t', 'channelwidth')], 
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): int64_t ns3::WifiPhy::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
                    [param('int64_t', 'stream')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculatePlcpPreambleAndHeaderDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('CalculatePlcpPreambleAndHeaderDuration', 
                    'ns3::Time', 
@@ -6784,7 +6953,7 @@
     cls.add_method('CalculateSnr', 
                    'double', 
                    [param('ns3::WifiTxVector', 'txVector'), param('double', 'ber')], 
-                   is_pure_virtual=True, is_const=True, is_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) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
@@ -6797,12 +6966,31 @@
     cls.add_method('ConfigureStandard', 
                    'void', 
                    [param('ns3::WifiPhyStandard', 'standard')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::DbToRatio(double db) const [member function]
+    cls.add_method('DbToRatio', 
+                   'double', 
+                   [param('double', 'db')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::DbmToW(double dbm) const [member function]
+    cls.add_method('DbmToW', 
+                   'double', 
+                   [param('double', 'dbm')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DefineChannelNumber(uint16_t channelNumber, ns3::WifiPhyStandard standard, uint32_t frequency, uint32_t channelWidth) [member function]
+    cls.add_method('DefineChannelNumber', 
+                   'bool', 
+                   [param('uint16_t', 'channelNumber'), param('ns3::WifiPhyStandard', 'standard'), param('uint32_t', 'frequency'), param('uint32_t', 'channelWidth')])
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
     cls.add_method('GetBssMembershipSelector', 
                    'uint32_t', 
                    [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetCcaMode1Threshold() const [member function]
+    cls.add_method('GetCcaMode1Threshold', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::WifiPhy::GetChannel() const [member function]
     cls.add_method('GetChannel', 
                    'ns3::Ptr< ns3::WifiChannel >', 
@@ -6812,22 +7000,27 @@
     cls.add_method('GetChannelNumber', 
                    'uint16_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetChannelSwitchDelay() const [member function]
     cls.add_method('GetChannelSwitchDelay', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetChannelWidth() const [member function]
     cls.add_method('GetChannelWidth', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::NetDevice> ns3::WifiPhy::GetDevice() const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate11Mbps() [member function]
     cls.add_method('GetDsssRate11Mbps', 
                    'ns3::WifiMode', 
@@ -6848,6 +7041,16 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetEdThreshold() const [member function]
+    cls.add_method('GetEdThreshold', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetEdThresholdW() const [member function]
+    cls.add_method('GetEdThresholdW', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate12Mbps() [member function]
     cls.add_method('GetErpOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -6888,21 +7091,26 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::ErrorRateModel> ns3::WifiPhy::GetErrorRateModel() const [member function]
+    cls.add_method('GetErrorRateModel', 
+                   'ns3::Ptr< ns3::ErrorRateModel >', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetFrequency() const [member function]
     cls.add_method('GetFrequency', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGreenfield() const [member function]
     cls.add_method('GetGreenfield', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGuardInterval() const [member function]
     cls.add_method('GetGuardInterval', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs0() [member function]
     cls.add_method('GetHtMcs0', 
                    'ns3::WifiMode', 
@@ -7072,57 +7280,61 @@
     cls.add_method('GetLastRxStartTime', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
     cls.add_method('GetLdpc', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
     cls.add_method('GetMcs', 
                    'ns3::WifiMode', 
                    [param('uint8_t', 'mcs')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
     cls.add_method('GetMembershipSelectorModes', 
                    'ns3::WifiModeList', 
                    [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::MobilityModel> ns3::WifiPhy::GetMobility() [member function]
+    cls.add_method('GetMobility', 
+                   'ns3::Ptr< ns3::MobilityModel >', 
+                   [])
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
     cls.add_method('GetNBssMembershipSelectors', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
     cls.add_method('GetNMcs', 
                    'uint8_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
     cls.add_method('GetNModes', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNTxPower() const [member function]
     cls.add_method('GetNTxPower', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
     cls.add_method('GetNumberOfReceiveAntennas', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
     cls.add_method('GetNumberOfTransmitAntennas', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
     cls.add_method('GetOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -7291,46 +7503,66 @@
                    'ns3::Time', 
                    [param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetRxGain() const [member function]
+    cls.add_method('GetRxGain', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetRxNoiseFigure() const [member function]
+    cls.add_method('GetRxNoiseFigure', 
+                   'double', 
+                   [], 
+                   is_const=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)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiPhyStandard ns3::WifiPhy::GetStandard() const [member function]
+    cls.add_method('GetStandard', 
+                   'ns3::WifiPhyStandard', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
     cls.add_method('GetStateDuration', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetStbc() const [member function]
     cls.add_method('GetStbc', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   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)
+                   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)
+                   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)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxGain() const [member function]
+    cls.add_method('GetTxGain', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
     cls.add_method('GetTxPowerEnd', 
                    'double', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerStart() const [member function]
     cls.add_method('GetTxPowerStart', 
                    'double', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::WifiPhy::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -7391,46 +7623,51 @@
                    'ns3::WifiMode', 
                    [param('ns3::WifiMode', 'payloadMode')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsMcsSupported(ns3::WifiMode mcs) const [member function]
+    cls.add_method('IsMcsSupported', 
+                   'bool', 
+                   [param('ns3::WifiMode', 'mcs')], 
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
     cls.add_method('IsModeSupported', 
                    'bool', 
                    [param('ns3::WifiMode', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateBusy() [member function]
     cls.add_method('IsStateBusy', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateCcaBusy() [member function]
     cls.add_method('IsStateCcaBusy', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateIdle() [member function]
     cls.add_method('IsStateIdle', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateRx() [member function]
     cls.add_method('IsStateRx', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSleep() [member function]
     cls.add_method('IsStateSleep', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSwitching() [member function]
     cls.add_method('IsStateSwitching', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateTx() [member function]
     cls.add_method('IsStateTx', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static bool ns3::WifiPhy::IsValidTxVector(ns3::WifiTxVector txVector) [member function]
     cls.add_method('IsValidTxVector', 
                    'bool', 
@@ -7468,6 +7705,11 @@
     cls.add_method('NotifyTxEnd', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::RatioToDb(double ratio) const [member function]
+    cls.add_method('RatioToDb', 
+                   'double', 
+                   [param('double', 'ratio')], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('RegisterListener', 
                    'void', 
@@ -7488,61 +7730,93 @@
                    '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::SetCcaMode1Threshold(double threshold) [member function]
+    cls.add_method('SetCcaMode1Threshold', 
+                   'void', 
+                   [param('double', 'threshold')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
                    'void', 
                    [param('uint16_t', 'id')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelWidth(uint32_t channelwidth) [member function]
     cls.add_method('SetChannelWidth', 
                    'void', 
                    [param('uint32_t', 'channelwidth')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetEdThreshold(double threshold) [member function]
+    cls.add_method('SetEdThreshold', 
+                   'void', 
+                   [param('double', 'threshold')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetErrorRateModel(ns3::Ptr<ns3::ErrorRateModel> rate) [member function]
+    cls.add_method('SetErrorRateModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::ErrorRateModel >', 'rate')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
     cls.add_method('SetFrequency', 
                    'void', 
                    [param('uint32_t', 'freq')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGreenfield(bool greenfield) [member function]
     cls.add_method('SetGreenfield', 
                    'void', 
                    [param('bool', 'greenfield')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool guardInterval) [member function]
     cls.add_method('SetGuardInterval', 
                    'void', 
                    [param('bool', 'guardInterval')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool ldpc) [member function]
     cls.add_method('SetLdpc', 
                    'void', 
                    [param('bool', 'ldpc')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> mobility) [member function]
+    cls.add_method('SetMobility', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MobilityModel >', 'mobility')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNTxPower(uint32_t n) [member function]
+    cls.add_method('SetNTxPower', 
+                   'void', 
+                   [param('uint32_t', 'n')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
     cls.add_method('SetNumberOfReceiveAntennas', 
                    'void', 
                    [param('uint32_t', 'rx')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
     cls.add_method('SetNumberOfTransmitAntennas', 
                    'void', 
                    [param('uint32_t', 'tx')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,bool,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveOkCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::WifiTxVector,ns3::WifiPreamble,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveOkCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiTxVector, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetRxGain(double gain) [member function]
+    cls.add_method('SetRxGain', 
+                   'void', 
+                   [param('double', 'gain')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetRxNoiseFigure(double noiseFigureDb) [member function]
+    cls.add_method('SetRxNoiseFigure', 
+                   'void', 
+                   [param('double', 'noiseFigureDb')])
     ## 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)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetSleepMode() [member function]
     cls.add_method('SetSleepMode', 
                    'void', 
@@ -7552,12 +7826,64 @@
     cls.add_method('SetStbc', 
                    'void', 
                    [param('bool', 'stbc')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxGain(double gain) [member function]
+    cls.add_method('SetTxGain', 
+                   'void', 
+                   [param('double', 'gain')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxPowerEnd(double end) [member function]
+    cls.add_method('SetTxPowerEnd', 
+                   'void', 
+                   [param('double', 'end')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxPowerStart(double start) [member function]
+    cls.add_method('SetTxPowerStart', 
+                   'void', 
+                   [param('double', 'start')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('UnregisterListener', 
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::WToDbm(double w) const [member function]
+    cls.add_method('WToDbm', 
+                   'double', 
+                   [param('double', 'w')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DoChannelSwitch(uint16_t id) [member function]
+    cls.add_method('DoChannelSwitch', 
+                   'bool', 
+                   [param('uint16_t', 'id')], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DoFrequencySwitch(uint32_t frequency) [member function]
+    cls.add_method('DoFrequencySwitch', 
+                   'bool', 
+                   [param('uint32_t', 'frequency')], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetPowerDbm(uint8_t power) const [member function]
+    cls.add_method('GetPowerDbm', 
+                   'double', 
+                   [param('uint8_t', 'power')], 
+                   is_const=True, visibility='protected')
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureChannelForStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('ConfigureChannelForStandard', 
+                   'void', 
+                   [param('ns3::WifiPhyStandard', 'standard')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureDefaultsForStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('ConfigureDefaultsForStandard', 
+                   'void', 
+                   [param('ns3::WifiPhyStandard', 'standard')], 
+                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3WifiRemoteStationManager_methods(root_module, cls):
@@ -7879,7 +8205,8 @@
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetHtSupported(bool enable) [member function]
     cls.add_method('SetHtSupported', 
                    'void', 
-                   [param('bool', 'enable')])
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetMaxSlrc(uint32_t maxSlrc) [member function]
     cls.add_method('SetMaxSlrc', 
                    'void', 
@@ -7911,7 +8238,8 @@
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetVhtSupported(bool enable) [member function]
     cls.add_method('SetVhtSupported', 
                    'void', 
-                   [param('bool', 'enable')])
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
     cls.add_method('SetupMac', 
                    'void', 
@@ -8314,6 +8642,10 @@
     cls.add_method('Lookup', 
                    'ns3::ArpCache::Entry *', 
                    [param('ns3::Ipv4Address', 'destination')])
+    ## arp-cache.h (module 'internet'): std::list<ns3::ArpCache::Entry*,std::allocator<ns3::ArpCache::Entry*> > ns3::ArpCache::LookupInverse(ns3::Address destination) [member function]
+    cls.add_method('LookupInverse', 
+                   'std::list< ns3::ArpCache::Entry * >', 
+                   [param('ns3::Address', 'destination')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::PrintArpCache(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintArpCache', 
                    'void', 
@@ -8434,6 +8766,10 @@
     cls.add_method('SetMacAddresss', 
                    'void', 
                    [param('ns3::Address', 'macAddress')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::UpdateSeen() [member function]
+    cls.add_method('UpdateSeen', 
+                   'void', 
+                   [])
     ## 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', 
@@ -8629,6 +8965,33 @@
                    [param('ns3::CallbackBase', 'base')])
     return
 
+def register_Ns3Channel_methods(root_module, cls):
+    ## channel.h (module 'network'): ns3::Channel::Channel(ns3::Channel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Channel const &', 'arg0')])
+    ## channel.h (module 'network'): ns3::Channel::Channel() [constructor]
+    cls.add_constructor([])
+    ## channel.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::Channel::GetDevice(uint32_t i) const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'i')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## channel.h (module 'network'): uint32_t ns3::Channel::GetId() const [member function]
+    cls.add_method('GetId', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## channel.h (module 'network'): uint32_t ns3::Channel::GetNDevices() const [member function]
+    cls.add_method('GetNDevices', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## channel.h (module 'network'): static ns3::TypeId ns3::Channel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=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', 
@@ -8753,6 +9116,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -8891,6 +9318,28 @@
                    is_virtual=True)
     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::WifiTxVector txVector, double ber) const [member function]
+    cls.add_method('CalculateSnr', 
+                   'double', 
+                   [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', 
+                   'double', 
+                   [param('ns3::WifiMode', 'mode'), param('ns3::WifiTxVector', 'txVector'), param('double', 'snr'), param('uint32_t', 'nbits')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## error-rate-model.h (module 'wifi'): static ns3::TypeId ns3::ErrorRateModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=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')])
@@ -10163,165 +10612,6 @@
                    [param('ns3::Ipv6Address const &', 'value')])
     return
 
-def register_Ns3Ipv6Interface_methods(root_module, cls):
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface(ns3::Ipv6Interface const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Interface const &', 'arg0')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::AddAddress(ns3::Ipv6InterfaceAddress iface) [member function]
-    cls.add_method('AddAddress', 
-                   'bool', 
-                   [param('ns3::Ipv6InterfaceAddress', 'iface')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddress(uint32_t index) const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddressMatchingDestination(ns3::Ipv6Address dst) [member function]
-    cls.add_method('GetAddressMatchingDestination', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetBaseReachableTime() const [member function]
-    cls.add_method('GetBaseReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint8_t ns3::Ipv6Interface::GetCurHopLimit() const [member function]
-    cls.add_method('GetCurHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6Interface::GetDevice() const [member function]
-    cls.add_method('GetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetLinkLocalAddress() const [member function]
-    cls.add_method('GetLinkLocalAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetMetric() const [member function]
-    cls.add_method('GetMetric', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint32_t ns3::Ipv6Interface::GetNAddresses() const [member function]
-    cls.add_method('GetNAddresses', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ptr<ns3::NdiscCache> ns3::Ipv6Interface::GetNdiscCache() const [member function]
-    cls.add_method('GetNdiscCache', 
-                   'ns3::Ptr< ns3::NdiscCache >', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetReachableTime() const [member function]
-    cls.add_method('GetReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetRetransTimer() const [member function]
-    cls.add_method('GetRetransTimer', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): static ns3::TypeId ns3::Ipv6Interface::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsDown() const [member function]
-    cls.add_method('IsDown', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsForwarding() const [member function]
-    cls.add_method('IsForwarding', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::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)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(uint32_t index) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & hdr, ns3::Ipv6Address dest) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [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', 
-                   [param('uint16_t', 'baseReachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetCurHopLimit(uint8_t curHopLimit) [member function]
-    cls.add_method('SetCurHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'curHopLimit')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('SetDevice', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDown() [member function]
-    cls.add_method('SetDown', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetForwarding(bool forward) [member function]
-    cls.add_method('SetForwarding', 
-                   'void', 
-                   [param('bool', 'forward')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetMetric(uint16_t metric) [member function]
-    cls.add_method('SetMetric', 
-                   'void', 
-                   [param('uint16_t', 'metric')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNode(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('SetNode', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNsDadUid(ns3::Ipv6Address address, uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'uid')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetReachableTime(uint16_t reachableTime) [member function]
-    cls.add_method('SetReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'reachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetRetransTimer(uint16_t retransTimer) [member function]
-    cls.add_method('SetRetransTimer', 
-                   'void', 
-                   [param('uint16_t', 'retransTimer')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetState(ns3::Ipv6Address address, ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::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', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
 def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [constructor]
     cls.add_constructor([])
@@ -10440,6 +10730,71 @@
                    [param('ns3::Mac48Address const &', 'value')])
     return
 
+def register_Ns3MobilityModel_methods(root_module, cls):
+    ## mobility-model.h (module 'mobility'): ns3::MobilityModel::MobilityModel(ns3::MobilityModel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MobilityModel const &', 'arg0')])
+    ## mobility-model.h (module 'mobility'): ns3::MobilityModel::MobilityModel() [constructor]
+    cls.add_constructor([])
+    ## mobility-model.h (module 'mobility'): int64_t ns3::MobilityModel::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## mobility-model.h (module 'mobility'): double ns3::MobilityModel::GetDistanceFrom(ns3::Ptr<const ns3::MobilityModel> position) const [member function]
+    cls.add_method('GetDistanceFrom', 
+                   'double', 
+                   [param('ns3::Ptr< ns3::MobilityModel const >', 'position')], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::GetPosition() const [member function]
+    cls.add_method('GetPosition', 
+                   'ns3::Vector', 
+                   [], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): double ns3::MobilityModel::GetRelativeSpeed(ns3::Ptr<const ns3::MobilityModel> other) const [member function]
+    cls.add_method('GetRelativeSpeed', 
+                   'double', 
+                   [param('ns3::Ptr< ns3::MobilityModel const >', 'other')], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): static ns3::TypeId ns3::MobilityModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::GetVelocity() const [member function]
+    cls.add_method('GetVelocity', 
+                   'ns3::Vector', 
+                   [], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::SetPosition(ns3::Vector const & position) [member function]
+    cls.add_method('SetPosition', 
+                   'void', 
+                   [param('ns3::Vector const &', 'position')])
+    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::NotifyCourseChange() const [member function]
+    cls.add_method('NotifyCourseChange', 
+                   'void', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## mobility-model.h (module 'mobility'): int64_t ns3::MobilityModel::DoAssignStreams(int64_t start) [member function]
+    cls.add_method('DoAssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'start')], 
+                   visibility='private', is_virtual=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::DoGetPosition() const [member function]
+    cls.add_method('DoGetPosition', 
+                   'ns3::Vector', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::DoGetVelocity() const [member function]
+    cls.add_method('DoGetVelocity', 
+                   'ns3::Vector', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::DoSetPosition(ns3::Vector const & position) [member function]
+    cls.add_method('DoSetPosition', 
+                   'void', 
+                   [param('ns3::Vector const &', 'position')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -10577,16 +10932,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -10614,35 +10984,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -11130,6 +11495,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
@@ -11619,6 +11989,86 @@
                    [param('uint64_t const &', 'value')])
     return
 
+def register_Ns3Vector2DChecker_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector2DChecker::Vector2DChecker() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2DChecker::Vector2DChecker(ns3::Vector2DChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2DChecker const &', 'arg0')])
+    return
+
+def register_Ns3Vector2DValue_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue(ns3::Vector2DValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2DValue const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue(ns3::Vector2D const & value) [constructor]
+    cls.add_constructor([param('ns3::Vector2D const &', 'value')])
+    ## vector.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::Vector2DValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vector.h (module 'core'): bool ns3::Vector2DValue::DeserializeFromString(std::string value, ns3::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)
+    ## vector.h (module 'core'): ns3::Vector2D ns3::Vector2DValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Vector2D', 
+                   [], 
+                   is_const=True)
+    ## vector.h (module 'core'): std::string ns3::Vector2DValue::SerializeToString(ns3::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)
+    ## vector.h (module 'core'): void ns3::Vector2DValue::Set(ns3::Vector2D const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Vector2D const &', 'value')])
+    return
+
+def register_Ns3Vector3DChecker_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector3DChecker::Vector3DChecker() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3DChecker::Vector3DChecker(ns3::Vector3DChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3DChecker const &', 'arg0')])
+    return
+
+def register_Ns3Vector3DValue_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue(ns3::Vector3DValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3DValue const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue(ns3::Vector3D const & value) [constructor]
+    cls.add_constructor([param('ns3::Vector3D const &', 'value')])
+    ## vector.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::Vector3DValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vector.h (module 'core'): bool ns3::Vector3DValue::DeserializeFromString(std::string value, ns3::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)
+    ## vector.h (module 'core'): ns3::Vector3D ns3::Vector3DValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Vector3D', 
+                   [], 
+                   is_const=True)
+    ## vector.h (module 'core'): std::string ns3::Vector3DValue::SerializeToString(ns3::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)
+    ## vector.h (module 'core'): void ns3::Vector3DValue::Set(ns3::Vector3D const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Vector3D const &', 'value')])
+    return
+
 def register_Ns3VhtCapabilities_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities::VhtCapabilities(ns3::VhtCapabilities const & arg0) [copy constructor]
@@ -11850,6 +12300,18 @@
                    [param('ns3::VhtCapabilities const &', 'value')])
     return
 
+def register_Ns3WifiChannel_methods(root_module, cls):
+    ## wifi-channel.h (module 'wifi'): ns3::WifiChannel::WifiChannel() [constructor]
+    cls.add_constructor([])
+    ## wifi-channel.h (module 'wifi'): ns3::WifiChannel::WifiChannel(ns3::WifiChannel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiChannel const &', 'arg0')])
+    ## wifi-channel.h (module 'wifi'): static ns3::TypeId ns3::WifiChannel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3WifiModeChecker_methods(root_module, cls):
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker::WifiModeChecker() [constructor]
     cls.add_constructor([])
@@ -14022,10 +14484,6 @@
     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', 
diff -Naur ns-3.25/src/dsr/model/dsr-routing.cc ns-3.26/src/dsr/model/dsr-routing.cc
--- ns-3.25/src/dsr/model/dsr-routing.cc	2016-10-03 20:57:08.166248267 -0700
+++ ns-3.26/src/dsr/model/dsr-routing.cc	2016-10-03 19:49:01.466389002 -0700
@@ -68,6 +68,7 @@
 #include "ns3/tcp-socket-factory.h"
 #include "ns3/llc-snap-header.h"
 #include "ns3/arp-header.h"
+#include "ns3/ipv6-interface.h"
 
 #include "dsr-rreq-table.h"
 #include "dsr-rcache.h"
@@ -514,98 +515,6 @@
             }
         }
       NS_ASSERT (m_mainAddress != Ipv4Address () && m_broadcast != Ipv4Address ());
-      ConnectCallbacks ();
-    }
-}
-
-void DsrRouting::ConnectCallbacks ()
-{
-  // Connect the callbacks
-  Config::Connect ("NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/PhyRxEnd",
-                   MakeCallback (&DsrRouting::NotifyDataReceipt, this));
-}
-
-void DsrRouting::NotifyDataReceipt (std::string context, Ptr<const Packet> p)
-{
-  Ptr<NetDevice> ndev = GetNetDeviceFromContext (context);
-  NS_ASSERT (ndev);
-  Ptr<Node> n = ndev->GetNode ();
-  Ptr<Ipv4> ipv4 = n->GetObject<Ipv4> ();
-  NS_ASSERT (n);
-
-  Ptr<WifiNetDevice> netDevice = DynamicCast<WifiNetDevice> (ndev);
-  Mac48Address nodeAddr = netDevice->GetMac()->GetAddress();
-  std::ostringstream oss;
-  oss << nodeAddr;
-
-  Ptr<Packet> newP = p->Copy();
-  WifiMacHeader hdr;
-  newP->RemoveHeader(hdr);
-  /// \todo this is a hard-coded check, need to find a better way to work on this
-  if (newP->GetSize () == 4)
-    {
-      // NS_LOG_WARN ("WifiMacTrailer left, skip this packet");
-      return;
-    }
-
-  LlcSnapHeader llc;
-  if(!newP->PeekHeader (llc))
-  {
-    // NS_LOG_WARN ("llc snap header not present");
-    NS_ASSERT (newP->GetSize() < 64);
-    return;
-  }
-  newP->RemoveHeader(llc);
-  /** \internal
-   * Tried to use peekheader here, but for ipv4 header here,
-   * dsr removes the Ipv4Header and then pass the packet and the header
-   * separately to Ipv4L3Protocol. Ipv4L3Protocol then re-adds them
-   * together, which causes the problem.  Check \bugid{1479}
-   */
-  ArpHeader arp;
-  if(newP->PeekHeader (arp))
-  {
-    // NS_LOG_WARN ("arp header present, skip this packet");
-    NS_ASSERT (newP->GetSize() < 64);
-    return;
-  }
-  /// Remove the ipv4 header here
-  Ipv4Header ip;
-  newP->RemoveHeader(ip);
-  /// Remove the dsr routing header here
-  DsrRoutingHeader dsrRouting;
-  newP->RemoveHeader(dsrRouting);
-  /*
-   * Message type 2 means the data packet, we will further process the data
-   * packet for delivery notification, safely ignore control packet
-   * Another check here is our own address, if this is the data destinated for us,
-   * process it further, otherwise, just ignore it
-   */
-  Ipv4Address ourAddress = ipv4->GetAddress (1, 0).GetLocal ();
-  // check if the message type is 2 and if the ipv4 address matches
-  if (dsrRouting.GetMessageType () == 2 && ourAddress == m_mainAddress)
-    {
-      NS_LOG_DEBUG ("data packet receives " << p->GetUid());
-      Ipv4Address sourceIp = GetIPfromID (dsrRouting.GetSourceId());
-      Ipv4Address destinationIp = GetIPfromID ( dsrRouting.GetDestId());
-      /// This is the ip address we just received data packet from
-      Ipv4Address previousHop = GetIPfromMAC (hdr.GetAddr2 ());
-
-      Ptr<Packet> p = Create<Packet> ();
-      // Here the segments left value need to plus one to check the earlier hop maintain buffer entry
-      DsrMaintainBuffEntry newEntry;
-      newEntry.SetPacket (p);
-      newEntry.SetSrc (sourceIp);
-      newEntry.SetDst (destinationIp);
-      /// Remember this is the entry for previous node
-      newEntry.SetOurAdd (previousHop);
-      newEntry.SetNextHop (ourAddress);
-      /// Get the previous node's maintenance buffer and passive ack
-      Ptr<Node> node = GetNodeWithAddress (previousHop);
-      NS_LOG_DEBUG ("The previous node " << previousHop);
-      
-      Ptr<dsr::DsrRouting> dsr = node->GetObject<dsr::DsrRouting> ();
-      dsr->CancelLinkPacketTimer (newEntry);
     }
 }
 
@@ -1135,58 +1044,99 @@
 bool DsrRouting::PromiscReceive (Ptr<NetDevice> device, Ptr<const Packet> packet, uint16_t protocol, const Address &from,
                                  const Address &to, NetDevice::PacketType packetType)
 {
+
+  if (protocol != Ipv4L3Protocol::PROT_NUMBER)
+    {
+      return false;
+    }
+  // Remove the ipv4 header here
+  Ptr<Packet> pktMinusIpHdr = packet->Copy ();
+  Ipv4Header ipv4Header;
+  pktMinusIpHdr->RemoveHeader(ipv4Header);
+
+  if (ipv4Header.GetProtocol () != DsrRouting::PROT_NUMBER)
+    {
+      return false;
+    }
+  // Remove the dsr routing header here
+  Ptr<Packet> pktMinusDsrHdr = pktMinusIpHdr->Copy ();
+  DsrRoutingHeader dsrRouting;
+  pktMinusDsrHdr->RemoveHeader (dsrRouting);
+
+  /*
+   * Message type 2 means the data packet, we will further process the data
+   * packet for delivery notification, safely ignore control packet
+   * Another check here is our own address, if this is the data destinated for us,
+   * process it further, otherwise, just ignore it
+   */
+  Ipv4Address ourAddress = m_ipv4->GetAddress (1, 0).GetLocal ();
+  // check if the message type is 2 and if the ipv4 address matches
+  if (dsrRouting.GetMessageType () == 2 && ourAddress == m_mainAddress)
+    {
+      NS_LOG_DEBUG ("data packet receives " << packet->GetUid ());
+      Ipv4Address sourceIp = GetIPfromID (dsrRouting.GetSourceId ());
+      Ipv4Address destinationIp = GetIPfromID ( dsrRouting.GetDestId ());
+      /// This is the ip address we just received data packet from
+      Ipv4Address previousHop = GetIPfromMAC (Mac48Address::ConvertFrom (from));
+
+      Ptr<Packet> p = Create<Packet> ();
+      // Here the segments left value need to plus one to check the earlier hop maintain buffer entry
+      DsrMaintainBuffEntry newEntry;
+      newEntry.SetPacket (p);
+      newEntry.SetSrc (sourceIp);
+      newEntry.SetDst (destinationIp);
+      /// Remember this is the entry for previous node
+      newEntry.SetOurAdd (previousHop);
+      newEntry.SetNextHop (ourAddress);
+      /// Get the previous node's maintenance buffer and passive ack
+      Ptr<Node> node = GetNodeWithAddress (previousHop);
+      NS_LOG_DEBUG ("The previous node " << previousHop);
+
+      Ptr<dsr::DsrRouting> dsr = node->GetObject<dsr::DsrRouting> ();
+      dsr->CancelLinkPacketTimer (newEntry);
+    }
+
   // Receive only IP packets and packets destined for other hosts
-  if (protocol == Ipv4L3Protocol::PROT_NUMBER && packetType == NetDevice::PACKET_OTHERHOST)
+  if (packetType == NetDevice::PACKET_OTHERHOST)
     {
-      Ptr<Packet> p = packet->Copy ();
-      //pull off IP header
-      Ipv4Header ipv4Header;
-      p->RemoveHeader (ipv4Header);
+      //just to minimize debug output
+      NS_LOG_INFO (this << from << to << packetType << *pktMinusIpHdr);
 
-      // Process only data packets with DSR header
-      if (ipv4Header.GetProtocol () == DsrRouting::PROT_NUMBER)
-        {
-          //just to minimize debug output
-          NS_LOG_INFO (this << from << to << packetType << *p);
-          DsrRoutingHeader dsrRoutingHeader;
-          //pull of DSR header to check option type
-          Ptr<Packet> dsrPacket = p->Copy ();
-          dsrPacket->RemoveHeader (dsrRoutingHeader);
-          uint8_t offset = dsrRoutingHeader.GetDsrOptionsOffset ();        // Get the offset for option header, 4 bytes in this case
-          uint8_t nextHeader = dsrRoutingHeader.GetNextHeader ();
-          uint32_t sourceId = dsrRoutingHeader.GetSourceId ();
-          Ipv4Address source = GetIPfromID (sourceId);
+      uint8_t offset = dsrRouting.GetDsrOptionsOffset ();        // Get the offset for option header, 4 bytes in this case
+      uint8_t nextHeader = dsrRouting.GetNextHeader ();
+      uint32_t sourceId = dsrRouting.GetSourceId ();
+      Ipv4Address source = GetIPfromID (sourceId);
+
+      // This packet is used to peek option type
+      pktMinusIpHdr->RemoveAtStart (offset);
+      /*
+       * Peek data to get the option type as well as length and segmentsLeft field
+       */
+      uint32_t size = pktMinusIpHdr->GetSize ();
+      uint8_t *data = new uint8_t[size];
+      pktMinusIpHdr->CopyData (data, size);
+      uint8_t optionType = 0;
+      optionType = *(data);
 
-          // This packet is used to peek option type
-          p->RemoveAtStart (offset);
-          /*
-           * Peek data to get the option type as well as length and segmentsLeft field
-           */
-          uint32_t size = p->GetSize ();
-          uint8_t *data = new uint8_t[size];
-          p->CopyData (data, size);
-          uint8_t optionType = 0;
-          optionType = *(data);
+      Ptr<dsr::DsrOptions> dsrOption;
 
-          Ptr<dsr::DsrOptions> dsrOption;
+      if (optionType == 96)        // This is the source route option
+        {
+          Ipv4Address promiscSource = GetIPfromMAC (Mac48Address::ConvertFrom (from));
+          dsrOption = GetOption (optionType);       // Get the relative DSR option and demux to the process function
+          NS_LOG_DEBUG (Simulator::Now ().GetSeconds () <<
+                        " DSR node " << m_mainAddress <<
+                        " overhearing packet PID: " << pktMinusIpHdr->GetUid () <<
+                        " from " << promiscSource <<
+                        " to " << GetIPfromMAC (Mac48Address::ConvertFrom (to)) <<
+                        " with source IP " << ipv4Header.GetSource () <<
+                        " and destination IP " << ipv4Header.GetDestination () <<
+                        " and packet : " << *pktMinusDsrHdr);
+
+          bool isPromisc = true;                     // Set the boolean value isPromisc as true
+          dsrOption->Process (pktMinusIpHdr, pktMinusDsrHdr, m_mainAddress, source, ipv4Header, nextHeader, isPromisc, promiscSource);
+          return true;
 
-          if (optionType == 96)        // This is the source route option
-            {
-              Ipv4Address promiscSource = GetIPfromMAC (Mac48Address::ConvertFrom (from));
-              dsrOption = GetOption (optionType);       // Get the relative DSR option and demux to the process function
-              NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << 
-                            " DSR node " << m_mainAddress <<
-                            " overhearing packet PID: " << p->GetUid () <<
-                            " from " << promiscSource <<
-                            " to " << GetIPfromMAC (Mac48Address::ConvertFrom (to)) <<
-                            " with source IP " << ipv4Header.GetSource () <<
-                            " and destination IP " << ipv4Header.GetDestination () <<
-                            " and packet : " << *dsrPacket);
-
-              bool isPromisc = true;                     // Set the boolean value isPromisc as true
-              dsrOption->Process (p, dsrPacket, m_mainAddress, source, ipv4Header, nextHeader, isPromisc, promiscSource);
-              return true;
-            }
         }
     }
   return false;
diff -Naur ns-3.25/src/dsr/model/dsr-routing.h ns-3.26/src/dsr/model/dsr-routing.h
--- ns-3.25/src/dsr/model/dsr-routing.h	2016-10-03 20:57:08.167248260 -0700
+++ ns-3.26/src/dsr/model/dsr-routing.h	2016-10-03 19:49:01.467388994 -0700
@@ -166,11 +166,6 @@
   //\}
 
   /**
-    * \brief Connect the callback for the tracing event.
-    * \return void
-    */
-  void ConnectCallbacks ();
-  /**
     * \brief Get the netdevice from the context.
     * \param context context
     * \return the netdevice we are looking for
@@ -583,11 +578,6 @@
 
   void Start ();
   /**
-    * \brief Notify the data receipt.
-    * \return void
-    */
-  void NotifyDataReceipt (std::string context, Ptr<const Packet> p);
-  /**
    * \brief Send the route error message when the link breaks to the next hop.
    */
   void SendRerrWhenBreaksLinkToNextHop (Ipv4Address nextHop, uint8_t protocol);
diff -Naur ns-3.25/src/energy/bindings/modulegen__gcc_ILP32.py ns-3.26/src/energy/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/energy/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.175248197 -0700
+++ ns-3.26/src/energy/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.482388883 -0700
@@ -80,6 +80,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -168,6 +170,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## energy-harvester.h (module 'energy'): ns3::EnergyHarvester [class]
@@ -232,6 +238,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -320,12 +328,12 @@
     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 ( * ) ( 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 ( * ) ( 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&')
@@ -338,6 +346,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
     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&')
@@ -413,6 +424,8 @@
     register_Ns3DeviceEnergyModel_methods(root_module, root_module['ns3::DeviceEnergyModel'])
     register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EnergyHarvester_methods(root_module, root_module['ns3::EnergyHarvester'])
     register_Ns3EnergyHarvesterContainer_methods(root_module, root_module['ns3::EnergyHarvesterContainer'])
@@ -1622,23 +1635,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1753,6 +1766,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -1774,10 +1792,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -1799,6 +1817,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -1814,6 +1836,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -1954,6 +1980,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -2995,6 +3026,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -3939,16 +4034,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -3976,35 +4086,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -4250,6 +4355,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/energy/bindings/modulegen__gcc_LP64.py ns-3.26/src/energy/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/energy/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.179248166 -0700
+++ ns-3.26/src/energy/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.485388860 -0700
@@ -80,6 +80,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -168,6 +170,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## energy-harvester.h (module 'energy'): ns3::EnergyHarvester [class]
@@ -232,6 +238,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -320,12 +328,12 @@
     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 ( * ) ( 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 ( * ) ( 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&')
@@ -338,6 +346,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
     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&')
@@ -413,6 +424,8 @@
     register_Ns3DeviceEnergyModel_methods(root_module, root_module['ns3::DeviceEnergyModel'])
     register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EnergyHarvester_methods(root_module, root_module['ns3::EnergyHarvester'])
     register_Ns3EnergyHarvesterContainer_methods(root_module, root_module['ns3::EnergyHarvesterContainer'])
@@ -1622,23 +1635,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1753,6 +1766,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -1774,10 +1792,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -1799,6 +1817,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -1814,6 +1836,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -1954,6 +1980,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -2995,6 +3026,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -3939,16 +4034,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -3976,35 +4086,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -4250,6 +4355,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/energy/examples/li-ion-energy-source.cc ns-3.26/src/energy/examples/li-ion-energy-source.cc
--- ns-3.25/src/energy/examples/li-ion-energy-source.cc	2016-10-03 20:57:08.180248158 -0700
+++ ns-3.26/src/energy/examples/li-ion-energy-source.cc	2016-10-03 19:49:01.487388845 -0700
@@ -20,6 +20,7 @@
 
 #include "ns3/log.h"
 #include "ns3/simulator.h"
+#include "ns3/command-line.h"
 #include "ns3/simple-device-energy-model.h"
 #include "ns3/li-ion-energy-source.h"
 #include "ns3/energy-source-container.h"
@@ -60,7 +61,10 @@
 int
 main (int argc, char **argv)
 {
-  // uncomment below to see the energy consumption details
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
+    // uncomment below to see the energy consumption details
   // LogComponentEnable ("LiIonEnergySource", LOG_LEVEL_DEBUG);
 
   Ptr<Node> node = CreateObject<Node> ();
diff -Naur ns-3.25/src/energy/examples/rv-battery-model-test.cc ns-3.26/src/energy/examples/rv-battery-model-test.cc
--- ns-3.25/src/energy/examples/rv-battery-model-test.cc	2016-10-03 20:57:08.181248151 -0700
+++ ns-3.26/src/energy/examples/rv-battery-model-test.cc	2016-10-03 19:49:01.488388838 -0700
@@ -29,6 +29,7 @@
 #include "ns3/simulator.h"
 #include "ns3/double.h"
 #include "ns3/config.h"
+#include "ns3/command-line.h"
 #include "ns3/string.h"
 #include "ns3/yans-wifi-helper.h"
 #include <cmath>
@@ -636,6 +637,9 @@
 int
 main (int argc, char **argv)
 {
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
   NS_LOG_DEBUG ("Constant load run.");
 
   BatteryLifetimeTest test;
diff -Naur ns-3.25/src/fd-net-device/bindings/modulegen__gcc_ILP32.py ns-3.26/src/fd-net-device/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/fd-net-device/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.206247956 -0700
+++ ns-3.26/src/fd-net-device/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.505388711 -0700
@@ -104,14 +104,16 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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]
     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')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], import_from_module='ns.core')
     ## system-condition.h (module 'core'): ns3::SystemCondition [class]
     module.add_class('SystemCondition', import_from_module='ns.core')
     ## system-mutex.h (module 'core'): ns3::SystemMutex [class]
@@ -126,6 +128,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -204,6 +208,10 @@
     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'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## emu-fd-net-device-helper.h (module 'fd-net-device'): ns3::EmuFdNetDeviceHelper [class]
@@ -254,6 +262,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -414,6 +424,8 @@
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3DataRateChecker_methods(root_module, root_module['ns3::DataRateChecker'])
     register_Ns3DataRateValue_methods(root_module, root_module['ns3::DataRateValue'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EmuFdNetDeviceHelper_methods(root_module, root_module['ns3::EmuFdNetDeviceHelper'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
@@ -779,6 +791,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2177,10 +2194,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -2479,23 +2496,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2610,6 +2627,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2631,10 +2653,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2656,6 +2678,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2671,6 +2697,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -2873,6 +2903,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3628,6 +3663,70 @@
                    [param('ns3::DataRate const &', 'value')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -4061,16 +4160,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -4098,35 +4212,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -4526,6 +4635,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/fd-net-device/bindings/modulegen__gcc_LP64.py ns-3.26/src/fd-net-device/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/fd-net-device/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.210247924 -0700
+++ ns-3.26/src/fd-net-device/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.508388689 -0700
@@ -104,14 +104,16 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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]
     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')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], import_from_module='ns.core')
     ## system-condition.h (module 'core'): ns3::SystemCondition [class]
     module.add_class('SystemCondition', import_from_module='ns.core')
     ## system-mutex.h (module 'core'): ns3::SystemMutex [class]
@@ -126,6 +128,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -204,6 +208,10 @@
     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'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## emu-fd-net-device-helper.h (module 'fd-net-device'): ns3::EmuFdNetDeviceHelper [class]
@@ -254,6 +262,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -414,6 +424,8 @@
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3DataRateChecker_methods(root_module, root_module['ns3::DataRateChecker'])
     register_Ns3DataRateValue_methods(root_module, root_module['ns3::DataRateValue'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EmuFdNetDeviceHelper_methods(root_module, root_module['ns3::EmuFdNetDeviceHelper'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
@@ -779,6 +791,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2177,10 +2194,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -2479,23 +2496,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2610,6 +2627,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2631,10 +2653,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2656,6 +2678,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2671,6 +2697,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -2873,6 +2903,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3628,6 +3663,70 @@
                    [param('ns3::DataRate const &', 'value')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -4061,16 +4160,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -4098,35 +4212,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -4526,6 +4635,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/fd-net-device/examples/dummy-network.cc ns-3.26/src/fd-net-device/examples/dummy-network.cc
--- ns-3.25/src/fd-net-device/examples/dummy-network.cc	2016-10-03 20:57:08.211247917 -0700
+++ ns-3.26/src/fd-net-device/examples/dummy-network.cc	2016-10-03 19:49:01.510388674 -0700
@@ -35,6 +35,9 @@
 int
 main (int argc, char *argv[])
 {
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
   NodeContainer nodes;
   nodes.Create (2);
 
diff -Naur ns-3.25/src/fd-net-device/examples/fd-tap-ping6.cc ns-3.26/src/fd-net-device/examples/fd-tap-ping6.cc
--- ns-3.25/src/fd-net-device/examples/fd-tap-ping6.cc	2016-10-03 20:57:08.213247901 -0700
+++ ns-3.26/src/fd-net-device/examples/fd-tap-ping6.cc	2016-10-03 19:49:01.512388659 -0700
@@ -60,6 +60,9 @@
 int
 main (int argc, char *argv[])
 {
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
   NS_LOG_INFO ("Ping6 Emulation Example with TAP");
 
   //
diff -Naur ns-3.25/src/fd-net-device/examples/fd-tap-ping.cc ns-3.26/src/fd-net-device/examples/fd-tap-ping.cc
--- ns-3.25/src/fd-net-device/examples/fd-tap-ping.cc	2016-10-03 20:57:08.213247901 -0700
+++ ns-3.26/src/fd-net-device/examples/fd-tap-ping.cc	2016-10-03 19:49:01.512388659 -0700
@@ -64,7 +64,10 @@
 //     # chown root.root build/src/fd-net-device/ns3-dev-tap-device-creator
 //     # sudo chmod 4755 build/src/fd-net-device/ns3-dev-tap-device-creator
 //
-
+//  4)  The example can be executed as follows using waf:
+//  
+//     ./waf --run fd-tap-ping --command-template="%s --tapNetwork=<TAP-network-address> --tapMask=<TAP-network-mask>" 
+//
 
 #include "ns3/abort.h"
 #include "ns3/core-module.h"
diff -Naur ns-3.25/src/fd-net-device/examples/realtime-dummy-network.cc ns-3.26/src/fd-net-device/examples/realtime-dummy-network.cc
--- ns-3.25/src/fd-net-device/examples/realtime-dummy-network.cc	2016-10-03 20:57:08.214247893 -0700
+++ ns-3.26/src/fd-net-device/examples/realtime-dummy-network.cc	2016-10-03 19:49:01.513388652 -0700
@@ -35,6 +35,8 @@
 int
 main (int argc, char *argv[])
 {
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
 
   GlobalValue::Bind ("SimulatorImplementationType", StringValue ("ns3::RealtimeSimulatorImpl"));
   GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
diff -Naur ns-3.25/src/fd-net-device/examples/realtime-fd2fd-onoff.cc ns-3.26/src/fd-net-device/examples/realtime-fd2fd-onoff.cc
--- ns-3.25/src/fd-net-device/examples/realtime-fd2fd-onoff.cc	2016-10-03 20:57:08.214247893 -0700
+++ ns-3.26/src/fd-net-device/examples/realtime-fd2fd-onoff.cc	2016-10-03 19:49:01.513388652 -0700
@@ -56,7 +56,9 @@
 int
 main (int argc, char *argv[])
 {
-
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
   uint16_t sinkPort = 8000;
   uint32_t packetSize = 10000; // bytes
   std::string dataRate("1000Mb/s");
diff -Naur ns-3.25/src/fd-net-device/helper/tap-fd-net-device-helper.cc ns-3.26/src/fd-net-device/helper/tap-fd-net-device-helper.cc
--- ns-3.25/src/fd-net-device/helper/tap-fd-net-device-helper.cc	2016-10-03 20:57:08.219247854 -0700
+++ ns-3.26/src/fd-net-device/helper/tap-fd-net-device-helper.cc	2016-10-03 19:49:01.519388607 -0700
@@ -64,9 +64,9 @@
 {
   m_deviceName = "";
   m_modePi = false;
-  m_tapIp4 = "";
-  m_tapMask4 = "";
-  m_tapIp6 = "";
+  m_tapIp4 = Ipv4Address::GetZero ();
+  m_tapMask4 = Ipv4Mask::GetZero ();
+  m_tapIp6 = Ipv6Address::GetZero ();
   m_tapPrefix6 = 64;
   m_tapMac = Mac48Address::Allocate ();
 }
@@ -227,19 +227,19 @@
       ossMac << "-m" << m_tapMac;
 
       std::ostringstream ossIp4;
-      if (m_tapIp4 != "")
+      if (m_tapIp4 != Ipv4Address::GetZero ())
         {
           ossIp4 << "-i" << m_tapIp4;
         }
 
       std::ostringstream ossIp6;
-      if (m_tapIp6 != "")
+      if (m_tapIp6 != Ipv6Address::GetZero ())
         {
           ossIp6 << "-I" << m_tapIp6;
         }
 
       std::ostringstream ossNetmask4;
-      if (m_tapMask4 != "" )
+      if (m_tapMask4 != Ipv4Mask::GetZero () )
         {
           ossNetmask4 << "-n" << m_tapMask4;
         }
diff -Naur ns-3.25/src/fd-net-device/model/fd-net-device.cc ns-3.26/src/fd-net-device/model/fd-net-device.cc
--- ns-3.25/src/fd-net-device/model/fd-net-device.cc	2016-10-03 20:57:08.221247839 -0700
+++ ns-3.26/src/fd-net-device/model/fd-net-device.cc	2016-10-03 19:49:01.520388599 -0700
@@ -328,7 +328,7 @@
  * to use memmove and avoid the extra mallocs.
  */
 static void
-AddPIHeader (uint8_t *&buf, ssize_t &len)
+AddPIHeader (uint8_t *&buf, size_t &len)
 {
   // Synthesize PI header for our friend the kernel
   uint8_t *buf2 = (uint8_t*)malloc (len + 4);
@@ -577,7 +577,7 @@
   NS_LOG_LOGIC ("calling write");
 
 
-  ssize_t len =  (ssize_t) packet->GetSize ();
+  size_t len =  (size_t) packet->GetSize ();
   uint8_t *buffer = (uint8_t*)malloc (len);
   packet->CopyData (buffer, len);
 
@@ -590,7 +590,7 @@
   ssize_t written = write (m_fd, buffer, len);
   free (buffer);
 
-  if (written == -1 || written != len)
+  if (written == -1 || (size_t) written != len)
     {
       m_macTxDropTrace (packet);
       return false;
diff -Naur ns-3.25/src/flow-monitor/bindings/modulegen__gcc_ILP32.py ns-3.26/src/flow-monitor/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/flow-monitor/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.227247792 -0700
+++ ns-3.26/src/flow-monitor/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.527388547 -0700
@@ -116,6 +116,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -126,6 +128,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -192,10 +196,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -204,6 +208,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -228,6 +234,10 @@
     module.add_class('CallbackImplBase', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     ## callback.h (module 'core'): ns3::CallbackValue [class]
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
@@ -255,7 +265,7 @@
     ## ipv4-flow-probe.h (module 'flow-monitor'): ns3::Ipv4FlowProbe [class]
     module.add_class('Ipv4FlowProbe', parent=root_module['ns3::FlowProbe'])
     ## ipv4-flow-probe.h (module 'flow-monitor'): ns3::Ipv4FlowProbe::DropReason [enumeration]
-    module.add_enum('DropReason', ['DROP_NO_ROUTE', 'DROP_TTL_EXPIRE', 'DROP_BAD_CHECKSUM', 'DROP_QUEUE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_FRAGMENT_TIMEOUT', 'DROP_INVALID_REASON'], outer_class=root_module['ns3::Ipv4FlowProbe'])
+    module.add_enum('DropReason', ['DROP_NO_ROUTE', 'DROP_TTL_EXPIRE', 'DROP_BAD_CHECKSUM', 'DROP_QUEUE', 'DROP_QUEUE_DISC', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_FRAGMENT_TIMEOUT', 'DROP_INVALID_REASON'], outer_class=root_module['ns3::Ipv4FlowProbe'])
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol [class]
     module.add_class('Ipv4L3Protocol', import_from_module='ns.internet', parent=root_module['ns3::Ipv4'])
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::DropReason [enumeration]
@@ -283,7 +293,7 @@
     ## ipv6-flow-probe.h (module 'flow-monitor'): ns3::Ipv6FlowProbe [class]
     module.add_class('Ipv6FlowProbe', parent=root_module['ns3::FlowProbe'])
     ## ipv6-flow-probe.h (module 'flow-monitor'): ns3::Ipv6FlowProbe::DropReason [enumeration]
-    module.add_enum('DropReason', ['DROP_NO_ROUTE', 'DROP_TTL_EXPIRE', 'DROP_BAD_CHECKSUM', 'DROP_QUEUE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL', 'DROP_UNKNOWN_OPTION', 'DROP_MALFORMED_HEADER', 'DROP_FRAGMENT_TIMEOUT', 'DROP_INVALID_REASON'], outer_class=root_module['ns3::Ipv6FlowProbe'])
+    module.add_enum('DropReason', ['DROP_NO_ROUTE', 'DROP_TTL_EXPIRE', 'DROP_BAD_CHECKSUM', 'DROP_QUEUE', 'DROP_QUEUE_DISC', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL', 'DROP_UNKNOWN_OPTION', 'DROP_MALFORMED_HEADER', 'DROP_FRAGMENT_TIMEOUT', 'DROP_INVALID_REASON'], outer_class=root_module['ns3::Ipv6FlowProbe'])
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol [class]
     module.add_class('Ipv6L3Protocol', import_from_module='ns.internet', parent=root_module['ns3::Ipv6'])
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::DropReason [enumeration]
@@ -320,6 +330,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -471,11 +483,11 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -486,6 +498,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3FlowClassifier_methods(root_module, root_module['ns3::FlowClassifier'])
@@ -746,6 +760,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1243,6 +1262,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1256,6 +1280,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
@@ -2459,23 +2487,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2590,6 +2618,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2611,10 +2644,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2636,6 +2669,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2651,6 +2688,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -3098,6 +3139,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3398,6 +3444,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -3423,6 +3474,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -3571,6 +3627,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -3598,11 +3658,6 @@
                    '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', 
@@ -3665,52 +3720,6 @@
                    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')])
@@ -3895,6 +3904,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -4351,6 +4406,70 @@
                    [param('ns3::CallbackBase', 'base')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -6142,16 +6261,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -6179,35 +6313,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -6607,6 +6736,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/flow-monitor/bindings/modulegen__gcc_LP64.py ns-3.26/src/flow-monitor/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/flow-monitor/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.232247753 -0700
+++ ns-3.26/src/flow-monitor/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.531388517 -0700
@@ -116,6 +116,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -126,6 +128,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -192,10 +196,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -204,6 +208,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -228,6 +234,10 @@
     module.add_class('CallbackImplBase', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     ## callback.h (module 'core'): ns3::CallbackValue [class]
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
@@ -255,7 +265,7 @@
     ## ipv4-flow-probe.h (module 'flow-monitor'): ns3::Ipv4FlowProbe [class]
     module.add_class('Ipv4FlowProbe', parent=root_module['ns3::FlowProbe'])
     ## ipv4-flow-probe.h (module 'flow-monitor'): ns3::Ipv4FlowProbe::DropReason [enumeration]
-    module.add_enum('DropReason', ['DROP_NO_ROUTE', 'DROP_TTL_EXPIRE', 'DROP_BAD_CHECKSUM', 'DROP_QUEUE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_FRAGMENT_TIMEOUT', 'DROP_INVALID_REASON'], outer_class=root_module['ns3::Ipv4FlowProbe'])
+    module.add_enum('DropReason', ['DROP_NO_ROUTE', 'DROP_TTL_EXPIRE', 'DROP_BAD_CHECKSUM', 'DROP_QUEUE', 'DROP_QUEUE_DISC', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_FRAGMENT_TIMEOUT', 'DROP_INVALID_REASON'], outer_class=root_module['ns3::Ipv4FlowProbe'])
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol [class]
     module.add_class('Ipv4L3Protocol', import_from_module='ns.internet', parent=root_module['ns3::Ipv4'])
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::DropReason [enumeration]
@@ -283,7 +293,7 @@
     ## ipv6-flow-probe.h (module 'flow-monitor'): ns3::Ipv6FlowProbe [class]
     module.add_class('Ipv6FlowProbe', parent=root_module['ns3::FlowProbe'])
     ## ipv6-flow-probe.h (module 'flow-monitor'): ns3::Ipv6FlowProbe::DropReason [enumeration]
-    module.add_enum('DropReason', ['DROP_NO_ROUTE', 'DROP_TTL_EXPIRE', 'DROP_BAD_CHECKSUM', 'DROP_QUEUE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL', 'DROP_UNKNOWN_OPTION', 'DROP_MALFORMED_HEADER', 'DROP_FRAGMENT_TIMEOUT', 'DROP_INVALID_REASON'], outer_class=root_module['ns3::Ipv6FlowProbe'])
+    module.add_enum('DropReason', ['DROP_NO_ROUTE', 'DROP_TTL_EXPIRE', 'DROP_BAD_CHECKSUM', 'DROP_QUEUE', 'DROP_QUEUE_DISC', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL', 'DROP_UNKNOWN_OPTION', 'DROP_MALFORMED_HEADER', 'DROP_FRAGMENT_TIMEOUT', 'DROP_INVALID_REASON'], outer_class=root_module['ns3::Ipv6FlowProbe'])
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol [class]
     module.add_class('Ipv6L3Protocol', import_from_module='ns.internet', parent=root_module['ns3::Ipv6'])
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::DropReason [enumeration]
@@ -320,6 +330,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -471,11 +483,11 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -486,6 +498,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3FlowClassifier_methods(root_module, root_module['ns3::FlowClassifier'])
@@ -746,6 +760,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1243,6 +1262,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1256,6 +1280,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
@@ -2459,23 +2487,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2590,6 +2618,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2611,10 +2644,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2636,6 +2669,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2651,6 +2688,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -3098,6 +3139,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3398,6 +3444,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -3423,6 +3474,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -3571,6 +3627,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -3598,11 +3658,6 @@
                    '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', 
@@ -3665,52 +3720,6 @@
                    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')])
@@ -3895,6 +3904,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -4351,6 +4406,70 @@
                    [param('ns3::CallbackBase', 'base')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -6142,16 +6261,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -6179,35 +6313,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -6607,6 +6736,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/flow-monitor/doc/flow-monitor.rst ns-3.26/src/flow-monitor/doc/flow-monitor.rst
--- ns-3.25/src/flow-monitor/doc/flow-monitor.rst	2016-10-03 20:57:08.233247745 -0700
+++ ns-3.26/src/flow-monitor/doc/flow-monitor.rst	2016-10-03 19:49:01.532388510 -0700
@@ -163,7 +163,7 @@
 
 The output was generated by a TCP flow from 10.1.3.1 to 10.1.2.2.
 
-It is worth noticing that the index 2 probe is reporting more packets and more bytes than the other probles. 
+It is worth noticing that the index 2 probe is reporting more packets and more bytes than the other probes. 
 That's a perfectly normal behaviour, as packets are fragmented at IP level in that node.
 
 It should also be observed that the receiving node's probe (index 4) doesn't count the fragments, as the 
diff -Naur ns-3.25/src/flow-monitor/examples/flowmon-parse-results.py ns-3.26/src/flow-monitor/examples/flowmon-parse-results.py
--- ns-3.25/src/flow-monitor/examples/flowmon-parse-results.py	2016-10-03 20:57:08.233247745 -0700
+++ ns-3.26/src/flow-monitor/examples/flowmon-parse-results.py	2016-10-03 19:49:01.533388502 -0700
@@ -133,10 +133,22 @@
             proto = {6: 'TCP', 17: 'UDP'} [t.protocol]
             print "FlowID: %i (%s %s/%s --> %s/%i)" % \
                 (flow.flowId, proto, t.sourceAddress, t.sourcePort, t.destinationAddress, t.destinationPort)
-            print "\tTX bitrate: %.2f kbit/s" % (flow.txBitrate*1e-3,)
-            print "\tRX bitrate: %.2f kbit/s" % (flow.rxBitrate*1e-3,)
-            print "\tMean Delay: %.2f ms" % (flow.delayMean*1e3,)
-            print "\tPacket Loss Ratio: %.2f %%" % (flow.packetLossRatio*100)
+            if flow.txBitrate is None:
+                print "\tTX bitrate: None"
+            else:
+                print "\tTX bitrate: %.2f kbit/s" % (flow.txBitrate*1e-3,)
+            if flow.rxBitrate is None:
+                print "\tRX bitrate: None"
+            else:
+                print "\tRX bitrate: %.2f kbit/s" % (flow.rxBitrate*1e-3,)
+            if flow.delayMean is None:
+                print "\tMean Delay: None"
+            else:
+                print "\tMean Delay: %.2f ms" % (flow.delayMean*1e3,)
+            if flow.packetLossRatio is None:
+                print "\tPacket Loss Ratio: None"
+            else:
+                print "\tPacket Loss Ratio: %.2f %%" % (flow.packetLossRatio*100)
 
 
 if __name__ == '__main__':
diff -Naur ns-3.25/src/flow-monitor/model/ipv4-flow-probe.cc ns-3.26/src/flow-monitor/model/ipv4-flow-probe.cc
--- ns-3.25/src/flow-monitor/model/ipv4-flow-probe.cc	2016-10-03 20:57:08.239247698 -0700
+++ ns-3.26/src/flow-monitor/model/ipv4-flow-probe.cc	2016-10-03 19:49:01.539388458 -0700
@@ -104,6 +104,8 @@
    *
    * This check is important for IP over IP encapsulation.
    *
+   * \param src Source address.
+   * \param dst Destination address.
    * \returns True if the addresses are matching.
    */
   bool IsSrcDstValid (Ipv4Address src, Ipv4Address dst) const;
@@ -250,6 +252,10 @@
       NS_FATAL_ERROR ("trace fail");
     }
 
+  std::ostringstream qd;
+  qd << "/NodeList/" << node->GetId () << "/$ns3::TrafficControlLayer/RootQueueDiscList/*/Drop";
+  Config::ConnectWithoutContext (qd.str (), MakeCallback (&Ipv4FlowProbe::QueueDiscDropLogger, Ptr<Ipv4FlowProbe> (this)));
+
   // code copied from point-to-point-helper.cc
   std::ostringstream oss;
   oss << "/NodeList/" << node->GetId () << "/DeviceList/*/TxQueue/Drop";
@@ -461,6 +467,27 @@
   m_flowMonitor->ReportDrop (this, flowId, packetId, size, DROP_QUEUE);
 }
 
+void
+Ipv4FlowProbe::QueueDiscDropLogger (Ptr<const QueueItem> item)
+{
+  Ipv4FlowProbeTag fTag;
+  bool tagFound = item->GetPacket ()->FindFirstMatchingByteTag (fTag);
+
+  if (!tagFound)
+    {
+      return;
+    }
+
+  FlowId flowId = fTag.GetFlowId ();
+  FlowPacketId packetId = fTag.GetPacketId ();
+  uint32_t size = fTag.GetPacketSize ();
+
+  NS_LOG_DEBUG ("Drop ("<<this<<", "<<flowId<<", "<<packetId<<", "<<size<<", " << DROP_QUEUE_DISC
+                        << "); ");
+
+  m_flowMonitor->ReportDrop (this, flowId, packetId, size, DROP_QUEUE_DISC);
+}
+
 } // namespace ns3
 
 
diff -Naur ns-3.25/src/flow-monitor/model/ipv4-flow-probe.h ns-3.26/src/flow-monitor/model/ipv4-flow-probe.h
--- ns-3.25/src/flow-monitor/model/ipv4-flow-probe.h	2016-10-03 20:57:08.240247690 -0700
+++ ns-3.26/src/flow-monitor/model/ipv4-flow-probe.h	2016-10-03 19:49:01.539388458 -0700
@@ -70,6 +70,9 @@
     /// PointToPoint devices, but not with WiFi or WiMax.
     DROP_QUEUE,
 
+    /// Packet dropped by the queue disc
+    DROP_QUEUE_DISC,
+
     DROP_INTERFACE_DOWN,   /**< Interface is down so can not send packet */
     DROP_ROUTE_ERROR,   /**< Route error */
     DROP_FRAGMENT_TIMEOUT, /**< Fragment timeout exceeded */
@@ -108,6 +111,9 @@
   /// Log a packet being dropped by a queue
   /// \param ipPayload IP payload
   void QueueDropLogger (Ptr<const Packet> ipPayload);
+  /// Log a packet being dropped by a queue disc
+  /// \param item queue item
+  void QueueDiscDropLogger (Ptr<const QueueItem> item);
 
   Ptr<Ipv4FlowClassifier> m_classifier; //!< the Ipv4FlowClassifier this probe is associated with
   Ptr<Ipv4L3Protocol> m_ipv4; //!< the Ipv4L3Protocol this probe is bound to
diff -Naur ns-3.25/src/flow-monitor/model/ipv6-flow-probe.cc ns-3.26/src/flow-monitor/model/ipv6-flow-probe.cc
--- ns-3.25/src/flow-monitor/model/ipv6-flow-probe.cc	2016-10-03 20:57:08.241247683 -0700
+++ ns-3.26/src/flow-monitor/model/ipv6-flow-probe.cc	2016-10-03 19:49:01.540388450 -0700
@@ -222,6 +222,10 @@
       NS_FATAL_ERROR ("trace fail");
     }
 
+  std::ostringstream qd;
+  qd << "/NodeList/" << node->GetId () << "/$ns3::TrafficControlLayer/RootQueueDiscList/*/Drop";
+  Config::ConnectWithoutContext (qd.str (), MakeCallback (&Ipv6FlowProbe::QueueDiscDropLogger, Ptr<Ipv6FlowProbe> (this)));
+
   // code copied from point-to-point-helper.cc
   std::ostringstream oss;
   oss << "/NodeList/" << node->GetId () << "/DeviceList/*/TxQueue/Drop";
@@ -407,6 +411,27 @@
   m_flowMonitor->ReportDrop (this, flowId, packetId, size, DROP_QUEUE);
 }
 
+void
+Ipv6FlowProbe::QueueDiscDropLogger (Ptr<const QueueItem> item)
+{
+  Ipv6FlowProbeTag fTag;
+  bool tagFound = item->GetPacket ()->FindFirstMatchingByteTag (fTag);
+
+  if (!tagFound)
+    {
+      return;
+    }
+
+  FlowId flowId = fTag.GetFlowId ();
+  FlowPacketId packetId = fTag.GetPacketId ();
+  uint32_t size = fTag.GetPacketSize ();
+
+  NS_LOG_DEBUG ("Drop ("<<this<<", "<<flowId<<", "<<packetId<<", "<<size<<", " << DROP_QUEUE_DISC
+                        << "); ");
+
+  m_flowMonitor->ReportDrop (this, flowId, packetId, size, DROP_QUEUE_DISC);
+}
+
 } // namespace ns3
 
 
diff -Naur ns-3.25/src/flow-monitor/model/ipv6-flow-probe.h ns-3.26/src/flow-monitor/model/ipv6-flow-probe.h
--- ns-3.25/src/flow-monitor/model/ipv6-flow-probe.h	2016-10-03 20:57:08.241247683 -0700
+++ ns-3.26/src/flow-monitor/model/ipv6-flow-probe.h	2016-10-03 19:49:01.541388443 -0700
@@ -71,6 +71,9 @@
     /// PointToPoint devices, but not with WiFi or WiMax.
     DROP_QUEUE,
 
+    /// Packet dropped by the queue disc
+    DROP_QUEUE_DISC,
+
     DROP_INTERFACE_DOWN,   /**< Interface is down so can not send packet */
     DROP_ROUTE_ERROR,   /**< Route error */
 
@@ -114,6 +117,9 @@
   /// Log a packet being dropped by a queue
   /// \param ipPayload IP payload
   void QueueDropLogger (Ptr<const Packet> ipPayload);
+  /// Log a packet being dropped by a queue disc
+  /// \param item queue item
+  void QueueDiscDropLogger (Ptr<const QueueItem> item);
 
   Ptr<Ipv6FlowClassifier> m_classifier; //!< the Ipv6FlowClassifier this probe is associated with
 };
diff -Naur ns-3.25/src/flow-monitor/wscript ns-3.26/src/flow-monitor/wscript
--- ns-3.25/src/flow-monitor/wscript	2016-10-03 20:57:08.242247675 -0700
+++ ns-3.26/src/flow-monitor/wscript	2016-10-03 19:49:01.542388435 -0700
@@ -10,7 +10,7 @@
        'ipv4-flow-probe.cc',
        'ipv6-flow-classifier.cc',
        'ipv6-flow-probe.cc',
-       'histogram.cc',	
+       'histogram.cc',
         ]]
     obj.source.append("helper/flow-monitor-helper.cc")
 
diff -Naur ns-3.25/src/.gitignore ns-3.26/src/.gitignore
--- ns-3.25/src/.gitignore	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/.gitignore	2016-10-03 19:49:01.609387936 -0700
@@ -0,0 +1,4 @@
+*/doc/build/
+*/doc/source/figures/*.eps
+*/doc/source/figures/*.pdf
+*/doc/*.png
diff -Naur ns-3.25/src/internet/bindings/callbacks_list.py ns-3.26/src/internet/bindings/callbacks_list.py
--- ns-3.25/src/internet/bindings/callbacks_list.py	2016-10-03 20:57:08.255247574 -0700
+++ ns-3.26/src/internet/bindings/callbacks_list.py	2016-10-03 19:49:01.555388338 -0700
@@ -2,6 +2,8 @@
     ['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'],
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::Ptr<ns3::QueueItem>', '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'],
@@ -12,5 +14,4 @@
     ['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.25/src/internet/bindings/modulegen__gcc_ILP32.py ns-3.26/src/internet/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/internet/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.269247464 -0700
+++ ns-3.26/src/internet/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.569388234 -0700
@@ -198,8 +198,8 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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,6 +230,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -260,6 +262,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -444,10 +448,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
     module.add_class('SocketFactory', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
@@ -458,6 +462,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -476,6 +482,8 @@
     module.add_class('TcpOptionUnknown', parent=root_module['ns3::TcpOption'])
     ## tcp-rx-buffer.h (module 'internet'): ns3::TcpRxBuffer [class]
     module.add_class('TcpRxBuffer', parent=root_module['ns3::Object'])
+    ## tcp-scalable.h (module 'internet'): ns3::TcpScalable [class]
+    module.add_class('TcpScalable', parent=root_module['ns3::TcpNewReno'])
     ## tcp-socket.h (module 'internet'): ns3::TcpSocket [class]
     module.add_class('TcpSocket', parent=root_module['ns3::Socket'])
     ## tcp-socket.h (module 'internet'): ns3::TcpSocket::TcpStates_t [enumeration]
@@ -490,12 +498,18 @@
     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-vegas.h (module 'internet'): ns3::TcpVegas [class]
+    module.add_class('TcpVegas', parent=root_module['ns3::TcpNewReno'])
+    ## tcp-veno.h (module 'internet'): ns3::TcpVeno [class]
+    module.add_class('TcpVeno', parent=root_module['ns3::TcpNewReno'])
     ## tcp-westwood.h (module 'internet'): ns3::TcpWestwood [class]
     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]
     module.add_enum('FilterType', ['NONE', 'TUSTIN'], outer_class=root_module['ns3::TcpWestwood'])
+    ## tcp-yeah.h (module 'internet'): ns3::TcpYeah [class]
+    module.add_class('TcpYeah', parent=root_module['ns3::TcpNewReno'])
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
@@ -566,6 +580,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -714,16 +732,12 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -732,10 +746,16 @@
     module.add_class('RipNg', parent=root_module['ns3::Ipv6RoutingProtocol'])
     ## ripng.h (module 'internet'): ns3::RipNg::SplitHorizonType_e [enumeration]
     module.add_enum('SplitHorizonType_e', ['NO_SPLIT_HORIZON', 'SPLIT_HORIZON', 'POISON_REVERSE'], outer_class=root_module['ns3::RipNg'])
+    ## tcp-bic.h (module 'internet'): ns3::TcpBic [class]
+    module.add_class('TcpBic', parent=root_module['ns3::TcpCongestionOps'])
     ## tcp-highspeed.h (module 'internet'): ns3::TcpHighSpeed [class]
     module.add_class('TcpHighSpeed', parent=root_module['ns3::TcpNewReno'])
+    ## tcp-htcp.h (module 'internet'): ns3::TcpHtcp [class]
+    module.add_class('TcpHtcp', parent=root_module['ns3::TcpNewReno'])
     ## tcp-hybla.h (module 'internet'): ns3::TcpHybla [class]
     module.add_class('TcpHybla', parent=root_module['ns3::TcpNewReno'])
+    ## tcp-illinois.h (module 'internet'): ns3::TcpIllinois [class]
+    module.add_class('TcpIllinois', parent=root_module['ns3::TcpNewReno'])
     ## tcp-l4-protocol.h (module 'internet'): ns3::TcpL4Protocol [class]
     module.add_class('TcpL4Protocol', parent=root_module['ns3::IpL4Protocol'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
@@ -756,6 +776,10 @@
     module.add_class('BridgeChannel', import_from_module='ns.bridge', parent=root_module['ns3::Channel'])
     ## bridge-net-device.h (module 'bridge'): ns3::BridgeNetDevice [class]
     module.add_class('BridgeNetDevice', import_from_module='ns.bridge', parent=root_module['ns3::NetDevice'])
+    ## ipv4-packet-filter.h (module 'internet'): ns3::FqCoDelIpv4PacketFilter [class]
+    module.add_class('FqCoDelIpv4PacketFilter', parent=root_module['ns3::Ipv4PacketFilter'])
+    ## ipv6-packet-filter.h (module 'internet'): ns3::FqCoDelIpv6PacketFilter [class]
+    module.add_class('FqCoDelIpv6PacketFilter', parent=root_module['ns3::Ipv6PacketFilter'])
     ## icmpv4-l4-protocol.h (module 'internet'): ns3::Icmpv4L4Protocol [class]
     module.add_class('Icmpv4L4Protocol', parent=root_module['ns3::IpL4Protocol'])
     ## icmpv6-l4-protocol.h (module 'internet'): ns3::Icmpv6L4Protocol [class]
@@ -787,8 +811,10 @@
     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::list< ns3::ArpCache::Entry * >', 'ns3::ArpCache::Entry *', 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::list< ns3::NdiscCache::Entry * >', 'ns3::NdiscCache::Entry *', 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*')
@@ -900,6 +926,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_internal(module):
     root_module = module.get_root()
@@ -1070,12 +1099,12 @@
     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'])
     register_Ns3SocketFactory_methods(root_module, root_module['ns3::SocketFactory'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -1083,12 +1112,16 @@
     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_Ns3TcpScalable_methods(root_module, root_module['ns3::TcpScalable'])
     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_Ns3TcpSocketState_methods(root_module, root_module['ns3::TcpSocketState'])
     register_Ns3TcpTxBuffer_methods(root_module, root_module['ns3::TcpTxBuffer'])
+    register_Ns3TcpVegas_methods(root_module, root_module['ns3::TcpVegas'])
+    register_Ns3TcpVeno_methods(root_module, root_module['ns3::TcpVeno'])
     register_Ns3TcpWestwood_methods(root_module, root_module['ns3::TcpWestwood'])
+    register_Ns3TcpYeah_methods(root_module, root_module['ns3::TcpYeah'])
     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 >'])
@@ -1120,6 +1153,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -1190,14 +1225,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_Ns3TcpBic_methods(root_module, root_module['ns3::TcpBic'])
     register_Ns3TcpHighSpeed_methods(root_module, root_module['ns3::TcpHighSpeed'])
+    register_Ns3TcpHtcp_methods(root_module, root_module['ns3::TcpHtcp'])
     register_Ns3TcpHybla_methods(root_module, root_module['ns3::TcpHybla'])
+    register_Ns3TcpIllinois_methods(root_module, root_module['ns3::TcpIllinois'])
     register_Ns3TcpL4Protocol_methods(root_module, root_module['ns3::TcpL4Protocol'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
@@ -1208,6 +1244,8 @@
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BridgeChannel_methods(root_module, root_module['ns3::BridgeChannel'])
     register_Ns3BridgeNetDevice_methods(root_module, root_module['ns3::BridgeNetDevice'])
+    register_Ns3FqCoDelIpv4PacketFilter_methods(root_module, root_module['ns3::FqCoDelIpv4PacketFilter'])
+    register_Ns3FqCoDelIpv6PacketFilter_methods(root_module, root_module['ns3::FqCoDelIpv6PacketFilter'])
     register_Ns3Icmpv4L4Protocol_methods(root_module, root_module['ns3::Icmpv4L4Protocol'])
     register_Ns3Icmpv6L4Protocol_methods(root_module, root_module['ns3::Icmpv6L4Protocol'])
     register_Ns3Ipv4GlobalRouting_methods(root_module, root_module['ns3::Ipv4GlobalRouting'])
@@ -1673,6 +1711,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2362,6 +2405,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -2375,6 +2423,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3IntToType__0_methods(root_module, cls):
@@ -4356,10 +4408,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -5263,23 +5315,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -5394,6 +5446,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -5415,10 +5472,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -5440,6 +5497,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -5455,6 +5516,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -7728,6 +7793,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -7950,10 +8020,19 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
@@ -7966,10 +8045,10 @@
     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]
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
@@ -7986,6 +8065,11 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3QueueDisc_methods(root_module, cls):
@@ -8119,6 +8203,11 @@
     cls.add_method('SetNetDevice', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetParentDropCallback(ns3::Callback<void, 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('SetParentDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetQuota(uint32_t const quota) [member function]
     cls.add_method('SetQuota', 
                    'void', 
@@ -8134,10 +8223,10 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::CheckConfig() [member function]
     cls.add_method('CheckConfig', 
@@ -8917,6 +9006,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -8942,6 +9036,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -9090,6 +9189,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -9117,11 +9220,6 @@
                    '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', 
@@ -9184,52 +9282,6 @@
                    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_Ns3SocketFactory_methods(root_module, cls):
     ## socket-factory.h (module 'network'): ns3::SocketFactory::SocketFactory(ns3::SocketFactory const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SocketFactory const &', 'arg0')])
@@ -9431,6 +9483,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -9486,6 +9584,11 @@
     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'): void ns3::TcpCongestionOps::CongestionStateSet(ns3::Ptr<ns3::TcpSocketState> tcb, ns3::TcpSocketState::TcpCongState_t const newState) [member function]
+    cls.add_method('CongestionStateSet', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('ns3::TcpSocketState::TcpCongState_t const', 'newState')], 
+                   is_virtual=True)
     ## tcp-congestion-ops.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpCongestionOps::Fork() [member function]
     cls.add_method('Fork', 
                    'ns3::Ptr< ns3::TcpCongestionOps >', 
@@ -9876,6 +9979,38 @@
                    is_const=True)
     return
 
+def register_Ns3TcpScalable_methods(root_module, cls):
+    ## tcp-scalable.h (module 'internet'): ns3::TcpScalable::TcpScalable() [constructor]
+    cls.add_constructor([])
+    ## tcp-scalable.h (module 'internet'): ns3::TcpScalable::TcpScalable(ns3::TcpScalable const & sock) [copy constructor]
+    cls.add_constructor([param('ns3::TcpScalable const &', 'sock')])
+    ## tcp-scalable.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpScalable::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_virtual=True)
+    ## tcp-scalable.h (module 'internet'): std::string ns3::TcpScalable::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## tcp-scalable.h (module 'internet'): uint32_t ns3::TcpScalable::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-scalable.h (module 'internet'): static ns3::TypeId ns3::TcpScalable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-scalable.h (module 'internet'): void ns3::TcpScalable::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_Ns3TcpSocket_methods(root_module, cls):
     ## tcp-socket.h (module 'internet'): ns3::TcpSocket::TcpSocket(ns3::TcpSocket const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::TcpSocket const &', 'arg0')])
@@ -10180,6 +10315,14 @@
     cls.add_method('UpdateCwnd', 
                    'void', 
                    [param('uint32_t', 'oldValue'), param('uint32_t', 'newValue')])
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::UpdateHighTxMark(ns3::SequenceNumber32 oldValue, ns3::SequenceNumber32 newValue) [member function]
+    cls.add_method('UpdateHighTxMark', 
+                   'void', 
+                   [param('ns3::SequenceNumber32', 'oldValue'), param('ns3::SequenceNumber32', 'newValue')])
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::UpdateNextTxSequence(ns3::SequenceNumber32 oldValue, ns3::SequenceNumber32 newValue) [member function]
+    cls.add_method('UpdateNextTxSequence', 
+                   'void', 
+                   [param('ns3::SequenceNumber32', 'oldValue'), param('ns3::SequenceNumber32', 'newValue')])
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::UpdateSsThresh(uint32_t oldValue, uint32_t newValue) [member function]
     cls.add_method('UpdateSsThresh', 
                    'void', 
@@ -10188,6 +10331,10 @@
     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_highTxMarkTrace [variable]
+    cls.add_instance_attribute('m_highTxMarkTrace', 'ns3::TracedCallback< ns3::SequenceNumber< unsigned int, int >, ns3::SequenceNumber< unsigned int, 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_nextTxSequenceTrace [variable]
+    cls.add_instance_attribute('m_nextTxSequenceTrace', 'ns3::TracedCallback< ns3::SequenceNumber< unsigned int, int >, ns3::SequenceNumber< unsigned int, 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_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]
@@ -10205,10 +10352,10 @@
                    'void', 
                    [param('ns3::TcpHeader &', 'tcpHeader')], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): uint16_t ns3::TcpSocketBase::AdvertisedWindowSize() const [member function]
+    ## tcp-socket-base.h (module 'internet'): uint16_t ns3::TcpSocketBase::AdvertisedWindowSize(bool scale=true) const [member function]
     cls.add_method('AdvertisedWindowSize', 
                    'uint16_t', 
-                   [], 
+                   [param('bool', 'scale', default_value='true')], 
                    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', 
@@ -10290,11 +10437,21 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::DupAck() [member function]
+    cls.add_method('DupAck', 
+                   'void', 
+                   [], 
+                   visibility='protected')
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::EstimateRtt(ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('EstimateRtt', 
                    'void', 
                    [param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::FastRetransmit() [member function]
+    cls.add_method('FastRetransmit', 
+                   'void', 
+                   [], 
+                   visibility='protected')
     ## tcp-socket-base.h (module 'internet'): ns3::Ptr<ns3::TcpSocketBase> ns3::TcpSocketBase::Fork() [member function]
     cls.add_method('Fork', 
                    'ns3::Ptr< ns3::TcpSocketBase >', 
@@ -10390,6 +10547,11 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::LimitedTransmit() [member function]
+    cls.add_method('LimitedTransmit', 
+                   'void', 
+                   [], 
+                   visibility='protected')
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::NewAck(ns3::SequenceNumber32 const & seq, bool resetRTO) [member function]
     cls.add_method('NewAck', 
                    'void', 
@@ -10629,6 +10791,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketState::GetSsThreshInSegments() const [member function]
+    cls.add_method('GetSsThreshInSegments', 
+                   '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', 
@@ -10640,10 +10807,16 @@
     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_highTxMark [variable]
+    cls.add_instance_attribute('m_highTxMark', 'ns3::TracedValue< ns3::SequenceNumber< unsigned int, int > >', 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_lastAckedSeq [variable]
+    cls.add_instance_attribute('m_lastAckedSeq', 'ns3::SequenceNumber32', is_const=False)
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::m_nextTxSequence [variable]
+    cls.add_instance_attribute('m_nextTxSequence', 'ns3::TracedValue< ns3::SequenceNumber< unsigned int, int > >', 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]
@@ -10712,6 +10885,90 @@
                    is_const=True)
     return
 
+def register_Ns3TcpVegas_methods(root_module, cls):
+    ## tcp-vegas.h (module 'internet'): ns3::TcpVegas::TcpVegas() [constructor]
+    cls.add_constructor([])
+    ## tcp-vegas.h (module 'internet'): ns3::TcpVegas::TcpVegas(ns3::TcpVegas const & sock) [copy constructor]
+    cls.add_constructor([param('ns3::TcpVegas const &', 'sock')])
+    ## tcp-vegas.h (module 'internet'): void ns3::TcpVegas::CongestionStateSet(ns3::Ptr<ns3::TcpSocketState> tcb, ns3::TcpSocketState::TcpCongState_t const newState) [member function]
+    cls.add_method('CongestionStateSet', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('ns3::TcpSocketState::TcpCongState_t const', 'newState')], 
+                   is_virtual=True)
+    ## tcp-vegas.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpVegas::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_virtual=True)
+    ## tcp-vegas.h (module 'internet'): std::string ns3::TcpVegas::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## tcp-vegas.h (module 'internet'): uint32_t ns3::TcpVegas::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-vegas.h (module 'internet'): static ns3::TypeId ns3::TcpVegas::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-vegas.h (module 'internet'): void ns3::TcpVegas::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-vegas.h (module 'internet'): void ns3::TcpVegas::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_Ns3TcpVeno_methods(root_module, cls):
+    ## tcp-veno.h (module 'internet'): ns3::TcpVeno::TcpVeno() [constructor]
+    cls.add_constructor([])
+    ## tcp-veno.h (module 'internet'): ns3::TcpVeno::TcpVeno(ns3::TcpVeno const & sock) [copy constructor]
+    cls.add_constructor([param('ns3::TcpVeno const &', 'sock')])
+    ## tcp-veno.h (module 'internet'): void ns3::TcpVeno::CongestionStateSet(ns3::Ptr<ns3::TcpSocketState> tcb, ns3::TcpSocketState::TcpCongState_t const newState) [member function]
+    cls.add_method('CongestionStateSet', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('ns3::TcpSocketState::TcpCongState_t const', 'newState')], 
+                   is_virtual=True)
+    ## tcp-veno.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpVeno::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_virtual=True)
+    ## tcp-veno.h (module 'internet'): std::string ns3::TcpVeno::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## tcp-veno.h (module 'internet'): uint32_t ns3::TcpVeno::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-veno.h (module 'internet'): static ns3::TypeId ns3::TcpVeno::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-veno.h (module 'internet'): void ns3::TcpVeno::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-veno.h (module 'internet'): void ns3::TcpVeno::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_Ns3TcpWestwood_methods(root_module, cls):
     ## tcp-westwood.h (module 'internet'): ns3::TcpWestwood::TcpWestwood() [constructor]
     cls.add_constructor([])
@@ -10739,6 +10996,48 @@
                    is_virtual=True)
     return
 
+def register_Ns3TcpYeah_methods(root_module, cls):
+    ## tcp-yeah.h (module 'internet'): ns3::TcpYeah::TcpYeah() [constructor]
+    cls.add_constructor([])
+    ## tcp-yeah.h (module 'internet'): ns3::TcpYeah::TcpYeah(ns3::TcpYeah const & sock) [copy constructor]
+    cls.add_constructor([param('ns3::TcpYeah const &', 'sock')])
+    ## tcp-yeah.h (module 'internet'): void ns3::TcpYeah::CongestionStateSet(ns3::Ptr<ns3::TcpSocketState> tcb, ns3::TcpSocketState::TcpCongState_t const newState) [member function]
+    cls.add_method('CongestionStateSet', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('ns3::TcpSocketState::TcpCongState_t const', 'newState')], 
+                   is_virtual=True)
+    ## tcp-yeah.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpYeah::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_virtual=True)
+    ## tcp-yeah.h (module 'internet'): std::string ns3::TcpYeah::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## tcp-yeah.h (module 'internet'): uint32_t ns3::TcpYeah::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-yeah.h (module 'internet'): static ns3::TypeId ns3::TcpYeah::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-yeah.h (module 'internet'): void ns3::TcpYeah::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-yeah.h (module 'internet'): void ns3::TcpYeah::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_Ns3Time_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
@@ -11011,11 +11310,11 @@
                    '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]
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::TrafficControlLayer::GetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('GetRootQueueDiscOnDevice', 
                    'ns3::Ptr< ns3::QueueDisc >', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## traffic-control-layer.h (module 'traffic-control'): static ns3::TypeId ns3::TrafficControlLayer::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -11511,6 +11810,10 @@
     cls.add_method('Lookup', 
                    'ns3::ArpCache::Entry *', 
                    [param('ns3::Ipv4Address', 'destination')])
+    ## arp-cache.h (module 'internet'): std::list<ns3::ArpCache::Entry*,std::allocator<ns3::ArpCache::Entry*> > ns3::ArpCache::LookupInverse(ns3::Address destination) [member function]
+    cls.add_method('LookupInverse', 
+                   'std::list< ns3::ArpCache::Entry * >', 
+                   [param('ns3::Address', 'destination')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::PrintArpCache(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintArpCache', 
                    'void', 
@@ -11631,6 +11934,10 @@
     cls.add_method('SetMacAddresss', 
                    'void', 
                    [param('ns3::Address', 'macAddress')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::UpdateSeen() [member function]
+    cls.add_method('UpdateSeen', 
+                   'void', 
+                   [])
     ## 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', 
@@ -12134,6 +12441,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -15385,6 +15756,10 @@
     cls.add_method('Lookup', 
                    'ns3::NdiscCache::Entry *', 
                    [param('ns3::Ipv6Address', 'dst')])
+    ## ndisc-cache.h (module 'internet'): std::list<ns3::NdiscCache::Entry*,std::allocator<ns3::NdiscCache::Entry*> > ns3::NdiscCache::LookupInverse(ns3::Address dst) [member function]
+    cls.add_method('LookupInverse', 
+                   'std::list< ns3::NdiscCache::Entry * >', 
+                   [param('ns3::Address', 'dst')])
     ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::PrintNdiscCache(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintNdiscCache', 
                    'void', 
@@ -15548,8 +15923,8 @@
     cls.add_method('StopNudTimer', 
                    'void', 
                    [])
-    ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::UpdateLastReachabilityconfirmation() [member function]
-    cls.add_method('UpdateLastReachabilityconfirmation', 
+    ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::UpdateReachableTimer() [member function]
+    cls.add_method('UpdateReachableTimer', 
                    'void', 
                    [])
     return
@@ -15691,16 +16066,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -15728,35 +16118,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -16230,40 +16615,6 @@
                    is_virtual=True)
     return
 
-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')])
@@ -16305,6 +16656,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
@@ -16498,6 +16854,43 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3TcpBic_methods(root_module, cls):
+    ## tcp-bic.h (module 'internet'): ns3::TcpBic::TcpBic() [constructor]
+    cls.add_constructor([])
+    ## tcp-bic.h (module 'internet'): ns3::TcpBic::TcpBic(ns3::TcpBic const & sock) [copy constructor]
+    cls.add_constructor([param('ns3::TcpBic const &', 'sock')])
+    ## tcp-bic.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpBic::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_virtual=True)
+    ## tcp-bic.h (module 'internet'): std::string ns3::TcpBic::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## tcp-bic.h (module 'internet'): uint32_t ns3::TcpBic::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-bic.h (module 'internet'): static ns3::TypeId ns3::TcpBic::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-bic.h (module 'internet'): void ns3::TcpBic::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-bic.h (module 'internet'): uint32_t ns3::TcpBic::Update(ns3::Ptr<ns3::TcpSocketState> tcb) [member function]
+    cls.add_method('Update', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb')], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3TcpHighSpeed_methods(root_module, cls):
     ## tcp-highspeed.h (module 'internet'): ns3::TcpHighSpeed::TcpHighSpeed() [constructor]
     cls.add_constructor([])
@@ -16540,6 +16933,43 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3TcpHtcp_methods(root_module, cls):
+    ## tcp-htcp.h (module 'internet'): ns3::TcpHtcp::TcpHtcp() [constructor]
+    cls.add_constructor([])
+    ## tcp-htcp.h (module 'internet'): ns3::TcpHtcp::TcpHtcp(ns3::TcpHtcp const & sock) [copy constructor]
+    cls.add_constructor([param('ns3::TcpHtcp const &', 'sock')])
+    ## tcp-htcp.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpHtcp::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_virtual=True)
+    ## tcp-htcp.h (module 'internet'): std::string ns3::TcpHtcp::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## tcp-htcp.h (module 'internet'): uint32_t ns3::TcpHtcp::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-htcp.h (module 'internet'): static ns3::TypeId ns3::TcpHtcp::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-htcp.h (module 'internet'): void ns3::TcpHtcp::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-htcp.h (module 'internet'): void ns3::TcpHtcp::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_Ns3TcpHybla_methods(root_module, cls):
     ## tcp-hybla.h (module 'internet'): ns3::TcpHybla::TcpHybla() [constructor]
     cls.add_constructor([])
@@ -16577,6 +17007,48 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3TcpIllinois_methods(root_module, cls):
+    ## tcp-illinois.h (module 'internet'): ns3::TcpIllinois::TcpIllinois() [constructor]
+    cls.add_constructor([])
+    ## tcp-illinois.h (module 'internet'): ns3::TcpIllinois::TcpIllinois(ns3::TcpIllinois const & sock) [copy constructor]
+    cls.add_constructor([param('ns3::TcpIllinois const &', 'sock')])
+    ## tcp-illinois.h (module 'internet'): void ns3::TcpIllinois::CongestionStateSet(ns3::Ptr<ns3::TcpSocketState> tcb, ns3::TcpSocketState::TcpCongState_t const newState) [member function]
+    cls.add_method('CongestionStateSet', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('ns3::TcpSocketState::TcpCongState_t const', 'newState')], 
+                   is_virtual=True)
+    ## tcp-illinois.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpIllinois::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_virtual=True)
+    ## tcp-illinois.h (module 'internet'): std::string ns3::TcpIllinois::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## tcp-illinois.h (module 'internet'): uint32_t ns3::TcpIllinois::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-illinois.h (module 'internet'): static ns3::TypeId ns3::TcpIllinois::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-illinois.h (module 'internet'): void ns3::TcpIllinois::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-illinois.h (module 'internet'): void ns3::TcpIllinois::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_Ns3TcpL4Protocol_methods(root_module, cls):
     ## tcp-l4-protocol.h (module 'internet'): ns3::TcpL4Protocol::PROT_NUMBER [variable]
     cls.add_static_attribute('PROT_NUMBER', 'uint8_t const', is_const=True)
@@ -17210,6 +17682,40 @@
                    visibility='protected')
     return
 
+def register_Ns3FqCoDelIpv4PacketFilter_methods(root_module, cls):
+    ## ipv4-packet-filter.h (module 'internet'): ns3::FqCoDelIpv4PacketFilter::FqCoDelIpv4PacketFilter(ns3::FqCoDelIpv4PacketFilter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::FqCoDelIpv4PacketFilter const &', 'arg0')])
+    ## ipv4-packet-filter.h (module 'internet'): ns3::FqCoDelIpv4PacketFilter::FqCoDelIpv4PacketFilter() [constructor]
+    cls.add_constructor([])
+    ## ipv4-packet-filter.h (module 'internet'): static ns3::TypeId ns3::FqCoDelIpv4PacketFilter::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv4-packet-filter.h (module 'internet'): int32_t ns3::FqCoDelIpv4PacketFilter::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_Ns3FqCoDelIpv6PacketFilter_methods(root_module, cls):
+    ## ipv6-packet-filter.h (module 'internet'): ns3::FqCoDelIpv6PacketFilter::FqCoDelIpv6PacketFilter(ns3::FqCoDelIpv6PacketFilter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::FqCoDelIpv6PacketFilter const &', 'arg0')])
+    ## ipv6-packet-filter.h (module 'internet'): ns3::FqCoDelIpv6PacketFilter::FqCoDelIpv6PacketFilter() [constructor]
+    cls.add_constructor([])
+    ## ipv6-packet-filter.h (module 'internet'): static ns3::TypeId ns3::FqCoDelIpv6PacketFilter::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6-packet-filter.h (module 'internet'): int32_t ns3::FqCoDelIpv6PacketFilter::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_Ns3Icmpv4L4Protocol_methods(root_module, cls):
     ## icmpv4-l4-protocol.h (module 'internet'): ns3::Icmpv4L4Protocol::Icmpv4L4Protocol(ns3::Icmpv4L4Protocol const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Icmpv4L4Protocol const &', 'arg0')])
@@ -18025,6 +18531,11 @@
                    'void', 
                    [param('std::ostream &', 'os')], 
                    is_const=True, is_virtual=True)
+    ## ipv4-queue-disc-item.h (module 'internet'): bool ns3::Ipv4QueueDiscItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   is_const=True, is_virtual=True)
     return
 
 def register_Ns3Ipv6QueueDiscItem_methods(root_module, cls):
@@ -18050,6 +18561,11 @@
                    'void', 
                    [param('std::ostream &', 'os')], 
                    is_const=True, is_virtual=True)
+    ## ipv6-queue-disc-item.h (module 'internet'): bool ns3::Ipv6QueueDiscItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   is_const=True, is_virtual=True)
     return
 
 def register_Ns3HashImplementation_methods(root_module, cls):
diff -Naur ns-3.25/src/internet/bindings/modulegen__gcc_LP64.py ns-3.26/src/internet/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/internet/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.281247371 -0700
+++ ns-3.26/src/internet/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.581388145 -0700
@@ -198,8 +198,8 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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,6 +230,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -260,6 +262,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -444,10 +448,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
     module.add_class('SocketFactory', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
@@ -458,6 +462,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -476,6 +482,8 @@
     module.add_class('TcpOptionUnknown', parent=root_module['ns3::TcpOption'])
     ## tcp-rx-buffer.h (module 'internet'): ns3::TcpRxBuffer [class]
     module.add_class('TcpRxBuffer', parent=root_module['ns3::Object'])
+    ## tcp-scalable.h (module 'internet'): ns3::TcpScalable [class]
+    module.add_class('TcpScalable', parent=root_module['ns3::TcpNewReno'])
     ## tcp-socket.h (module 'internet'): ns3::TcpSocket [class]
     module.add_class('TcpSocket', parent=root_module['ns3::Socket'])
     ## tcp-socket.h (module 'internet'): ns3::TcpSocket::TcpStates_t [enumeration]
@@ -490,12 +498,18 @@
     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-vegas.h (module 'internet'): ns3::TcpVegas [class]
+    module.add_class('TcpVegas', parent=root_module['ns3::TcpNewReno'])
+    ## tcp-veno.h (module 'internet'): ns3::TcpVeno [class]
+    module.add_class('TcpVeno', parent=root_module['ns3::TcpNewReno'])
     ## tcp-westwood.h (module 'internet'): ns3::TcpWestwood [class]
     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]
     module.add_enum('FilterType', ['NONE', 'TUSTIN'], outer_class=root_module['ns3::TcpWestwood'])
+    ## tcp-yeah.h (module 'internet'): ns3::TcpYeah [class]
+    module.add_class('TcpYeah', parent=root_module['ns3::TcpNewReno'])
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
@@ -566,6 +580,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -714,16 +732,12 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -732,10 +746,16 @@
     module.add_class('RipNg', parent=root_module['ns3::Ipv6RoutingProtocol'])
     ## ripng.h (module 'internet'): ns3::RipNg::SplitHorizonType_e [enumeration]
     module.add_enum('SplitHorizonType_e', ['NO_SPLIT_HORIZON', 'SPLIT_HORIZON', 'POISON_REVERSE'], outer_class=root_module['ns3::RipNg'])
+    ## tcp-bic.h (module 'internet'): ns3::TcpBic [class]
+    module.add_class('TcpBic', parent=root_module['ns3::TcpCongestionOps'])
     ## tcp-highspeed.h (module 'internet'): ns3::TcpHighSpeed [class]
     module.add_class('TcpHighSpeed', parent=root_module['ns3::TcpNewReno'])
+    ## tcp-htcp.h (module 'internet'): ns3::TcpHtcp [class]
+    module.add_class('TcpHtcp', parent=root_module['ns3::TcpNewReno'])
     ## tcp-hybla.h (module 'internet'): ns3::TcpHybla [class]
     module.add_class('TcpHybla', parent=root_module['ns3::TcpNewReno'])
+    ## tcp-illinois.h (module 'internet'): ns3::TcpIllinois [class]
+    module.add_class('TcpIllinois', parent=root_module['ns3::TcpNewReno'])
     ## tcp-l4-protocol.h (module 'internet'): ns3::TcpL4Protocol [class]
     module.add_class('TcpL4Protocol', parent=root_module['ns3::IpL4Protocol'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
@@ -756,6 +776,10 @@
     module.add_class('BridgeChannel', import_from_module='ns.bridge', parent=root_module['ns3::Channel'])
     ## bridge-net-device.h (module 'bridge'): ns3::BridgeNetDevice [class]
     module.add_class('BridgeNetDevice', import_from_module='ns.bridge', parent=root_module['ns3::NetDevice'])
+    ## ipv4-packet-filter.h (module 'internet'): ns3::FqCoDelIpv4PacketFilter [class]
+    module.add_class('FqCoDelIpv4PacketFilter', parent=root_module['ns3::Ipv4PacketFilter'])
+    ## ipv6-packet-filter.h (module 'internet'): ns3::FqCoDelIpv6PacketFilter [class]
+    module.add_class('FqCoDelIpv6PacketFilter', parent=root_module['ns3::Ipv6PacketFilter'])
     ## icmpv4-l4-protocol.h (module 'internet'): ns3::Icmpv4L4Protocol [class]
     module.add_class('Icmpv4L4Protocol', parent=root_module['ns3::IpL4Protocol'])
     ## icmpv6-l4-protocol.h (module 'internet'): ns3::Icmpv6L4Protocol [class]
@@ -787,8 +811,10 @@
     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::list< ns3::ArpCache::Entry * >', 'ns3::ArpCache::Entry *', 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::list< ns3::NdiscCache::Entry * >', 'ns3::NdiscCache::Entry *', 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*')
@@ -900,6 +926,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_internal(module):
     root_module = module.get_root()
@@ -1070,12 +1099,12 @@
     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'])
     register_Ns3SocketFactory_methods(root_module, root_module['ns3::SocketFactory'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -1083,12 +1112,16 @@
     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_Ns3TcpScalable_methods(root_module, root_module['ns3::TcpScalable'])
     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_Ns3TcpSocketState_methods(root_module, root_module['ns3::TcpSocketState'])
     register_Ns3TcpTxBuffer_methods(root_module, root_module['ns3::TcpTxBuffer'])
+    register_Ns3TcpVegas_methods(root_module, root_module['ns3::TcpVegas'])
+    register_Ns3TcpVeno_methods(root_module, root_module['ns3::TcpVeno'])
     register_Ns3TcpWestwood_methods(root_module, root_module['ns3::TcpWestwood'])
+    register_Ns3TcpYeah_methods(root_module, root_module['ns3::TcpYeah'])
     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 >'])
@@ -1120,6 +1153,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -1190,14 +1225,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_Ns3TcpBic_methods(root_module, root_module['ns3::TcpBic'])
     register_Ns3TcpHighSpeed_methods(root_module, root_module['ns3::TcpHighSpeed'])
+    register_Ns3TcpHtcp_methods(root_module, root_module['ns3::TcpHtcp'])
     register_Ns3TcpHybla_methods(root_module, root_module['ns3::TcpHybla'])
+    register_Ns3TcpIllinois_methods(root_module, root_module['ns3::TcpIllinois'])
     register_Ns3TcpL4Protocol_methods(root_module, root_module['ns3::TcpL4Protocol'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
@@ -1208,6 +1244,8 @@
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BridgeChannel_methods(root_module, root_module['ns3::BridgeChannel'])
     register_Ns3BridgeNetDevice_methods(root_module, root_module['ns3::BridgeNetDevice'])
+    register_Ns3FqCoDelIpv4PacketFilter_methods(root_module, root_module['ns3::FqCoDelIpv4PacketFilter'])
+    register_Ns3FqCoDelIpv6PacketFilter_methods(root_module, root_module['ns3::FqCoDelIpv6PacketFilter'])
     register_Ns3Icmpv4L4Protocol_methods(root_module, root_module['ns3::Icmpv4L4Protocol'])
     register_Ns3Icmpv6L4Protocol_methods(root_module, root_module['ns3::Icmpv6L4Protocol'])
     register_Ns3Ipv4GlobalRouting_methods(root_module, root_module['ns3::Ipv4GlobalRouting'])
@@ -1673,6 +1711,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2362,6 +2405,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -2375,6 +2423,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3IntToType__0_methods(root_module, cls):
@@ -4356,10 +4408,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -5263,23 +5315,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -5394,6 +5446,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -5415,10 +5472,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -5440,6 +5497,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -5455,6 +5516,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -7728,6 +7793,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -7950,10 +8020,19 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
@@ -7966,10 +8045,10 @@
     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]
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
@@ -7986,6 +8065,11 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3QueueDisc_methods(root_module, cls):
@@ -8119,6 +8203,11 @@
     cls.add_method('SetNetDevice', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetParentDropCallback(ns3::Callback<void, 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('SetParentDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetQuota(uint32_t const quota) [member function]
     cls.add_method('SetQuota', 
                    'void', 
@@ -8134,10 +8223,10 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::CheckConfig() [member function]
     cls.add_method('CheckConfig', 
@@ -8917,6 +9006,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -8942,6 +9036,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -9090,6 +9189,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -9117,11 +9220,6 @@
                    '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', 
@@ -9184,52 +9282,6 @@
                    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_Ns3SocketFactory_methods(root_module, cls):
     ## socket-factory.h (module 'network'): ns3::SocketFactory::SocketFactory(ns3::SocketFactory const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SocketFactory const &', 'arg0')])
@@ -9431,6 +9483,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -9486,6 +9584,11 @@
     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'): void ns3::TcpCongestionOps::CongestionStateSet(ns3::Ptr<ns3::TcpSocketState> tcb, ns3::TcpSocketState::TcpCongState_t const newState) [member function]
+    cls.add_method('CongestionStateSet', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('ns3::TcpSocketState::TcpCongState_t const', 'newState')], 
+                   is_virtual=True)
     ## tcp-congestion-ops.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpCongestionOps::Fork() [member function]
     cls.add_method('Fork', 
                    'ns3::Ptr< ns3::TcpCongestionOps >', 
@@ -9876,6 +9979,38 @@
                    is_const=True)
     return
 
+def register_Ns3TcpScalable_methods(root_module, cls):
+    ## tcp-scalable.h (module 'internet'): ns3::TcpScalable::TcpScalable() [constructor]
+    cls.add_constructor([])
+    ## tcp-scalable.h (module 'internet'): ns3::TcpScalable::TcpScalable(ns3::TcpScalable const & sock) [copy constructor]
+    cls.add_constructor([param('ns3::TcpScalable const &', 'sock')])
+    ## tcp-scalable.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpScalable::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_virtual=True)
+    ## tcp-scalable.h (module 'internet'): std::string ns3::TcpScalable::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## tcp-scalable.h (module 'internet'): uint32_t ns3::TcpScalable::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-scalable.h (module 'internet'): static ns3::TypeId ns3::TcpScalable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-scalable.h (module 'internet'): void ns3::TcpScalable::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_Ns3TcpSocket_methods(root_module, cls):
     ## tcp-socket.h (module 'internet'): ns3::TcpSocket::TcpSocket(ns3::TcpSocket const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::TcpSocket const &', 'arg0')])
@@ -10180,6 +10315,14 @@
     cls.add_method('UpdateCwnd', 
                    'void', 
                    [param('uint32_t', 'oldValue'), param('uint32_t', 'newValue')])
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::UpdateHighTxMark(ns3::SequenceNumber32 oldValue, ns3::SequenceNumber32 newValue) [member function]
+    cls.add_method('UpdateHighTxMark', 
+                   'void', 
+                   [param('ns3::SequenceNumber32', 'oldValue'), param('ns3::SequenceNumber32', 'newValue')])
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::UpdateNextTxSequence(ns3::SequenceNumber32 oldValue, ns3::SequenceNumber32 newValue) [member function]
+    cls.add_method('UpdateNextTxSequence', 
+                   'void', 
+                   [param('ns3::SequenceNumber32', 'oldValue'), param('ns3::SequenceNumber32', 'newValue')])
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::UpdateSsThresh(uint32_t oldValue, uint32_t newValue) [member function]
     cls.add_method('UpdateSsThresh', 
                    'void', 
@@ -10188,6 +10331,10 @@
     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_highTxMarkTrace [variable]
+    cls.add_instance_attribute('m_highTxMarkTrace', 'ns3::TracedCallback< ns3::SequenceNumber< unsigned int, int >, ns3::SequenceNumber< unsigned int, 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_nextTxSequenceTrace [variable]
+    cls.add_instance_attribute('m_nextTxSequenceTrace', 'ns3::TracedCallback< ns3::SequenceNumber< unsigned int, int >, ns3::SequenceNumber< unsigned int, 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_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]
@@ -10205,10 +10352,10 @@
                    'void', 
                    [param('ns3::TcpHeader &', 'tcpHeader')], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): uint16_t ns3::TcpSocketBase::AdvertisedWindowSize() const [member function]
+    ## tcp-socket-base.h (module 'internet'): uint16_t ns3::TcpSocketBase::AdvertisedWindowSize(bool scale=true) const [member function]
     cls.add_method('AdvertisedWindowSize', 
                    'uint16_t', 
-                   [], 
+                   [param('bool', 'scale', default_value='true')], 
                    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', 
@@ -10290,11 +10437,21 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::DupAck() [member function]
+    cls.add_method('DupAck', 
+                   'void', 
+                   [], 
+                   visibility='protected')
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::EstimateRtt(ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('EstimateRtt', 
                    'void', 
                    [param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::FastRetransmit() [member function]
+    cls.add_method('FastRetransmit', 
+                   'void', 
+                   [], 
+                   visibility='protected')
     ## tcp-socket-base.h (module 'internet'): ns3::Ptr<ns3::TcpSocketBase> ns3::TcpSocketBase::Fork() [member function]
     cls.add_method('Fork', 
                    'ns3::Ptr< ns3::TcpSocketBase >', 
@@ -10390,6 +10547,11 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::LimitedTransmit() [member function]
+    cls.add_method('LimitedTransmit', 
+                   'void', 
+                   [], 
+                   visibility='protected')
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::NewAck(ns3::SequenceNumber32 const & seq, bool resetRTO) [member function]
     cls.add_method('NewAck', 
                    'void', 
@@ -10629,6 +10791,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketState::GetSsThreshInSegments() const [member function]
+    cls.add_method('GetSsThreshInSegments', 
+                   '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', 
@@ -10640,10 +10807,16 @@
     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_highTxMark [variable]
+    cls.add_instance_attribute('m_highTxMark', 'ns3::TracedValue< ns3::SequenceNumber< unsigned int, int > >', 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_lastAckedSeq [variable]
+    cls.add_instance_attribute('m_lastAckedSeq', 'ns3::SequenceNumber32', is_const=False)
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::m_nextTxSequence [variable]
+    cls.add_instance_attribute('m_nextTxSequence', 'ns3::TracedValue< ns3::SequenceNumber< unsigned int, int > >', 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]
@@ -10712,6 +10885,90 @@
                    is_const=True)
     return
 
+def register_Ns3TcpVegas_methods(root_module, cls):
+    ## tcp-vegas.h (module 'internet'): ns3::TcpVegas::TcpVegas() [constructor]
+    cls.add_constructor([])
+    ## tcp-vegas.h (module 'internet'): ns3::TcpVegas::TcpVegas(ns3::TcpVegas const & sock) [copy constructor]
+    cls.add_constructor([param('ns3::TcpVegas const &', 'sock')])
+    ## tcp-vegas.h (module 'internet'): void ns3::TcpVegas::CongestionStateSet(ns3::Ptr<ns3::TcpSocketState> tcb, ns3::TcpSocketState::TcpCongState_t const newState) [member function]
+    cls.add_method('CongestionStateSet', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('ns3::TcpSocketState::TcpCongState_t const', 'newState')], 
+                   is_virtual=True)
+    ## tcp-vegas.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpVegas::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_virtual=True)
+    ## tcp-vegas.h (module 'internet'): std::string ns3::TcpVegas::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## tcp-vegas.h (module 'internet'): uint32_t ns3::TcpVegas::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-vegas.h (module 'internet'): static ns3::TypeId ns3::TcpVegas::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-vegas.h (module 'internet'): void ns3::TcpVegas::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-vegas.h (module 'internet'): void ns3::TcpVegas::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_Ns3TcpVeno_methods(root_module, cls):
+    ## tcp-veno.h (module 'internet'): ns3::TcpVeno::TcpVeno() [constructor]
+    cls.add_constructor([])
+    ## tcp-veno.h (module 'internet'): ns3::TcpVeno::TcpVeno(ns3::TcpVeno const & sock) [copy constructor]
+    cls.add_constructor([param('ns3::TcpVeno const &', 'sock')])
+    ## tcp-veno.h (module 'internet'): void ns3::TcpVeno::CongestionStateSet(ns3::Ptr<ns3::TcpSocketState> tcb, ns3::TcpSocketState::TcpCongState_t const newState) [member function]
+    cls.add_method('CongestionStateSet', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('ns3::TcpSocketState::TcpCongState_t const', 'newState')], 
+                   is_virtual=True)
+    ## tcp-veno.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpVeno::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_virtual=True)
+    ## tcp-veno.h (module 'internet'): std::string ns3::TcpVeno::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## tcp-veno.h (module 'internet'): uint32_t ns3::TcpVeno::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-veno.h (module 'internet'): static ns3::TypeId ns3::TcpVeno::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-veno.h (module 'internet'): void ns3::TcpVeno::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-veno.h (module 'internet'): void ns3::TcpVeno::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_Ns3TcpWestwood_methods(root_module, cls):
     ## tcp-westwood.h (module 'internet'): ns3::TcpWestwood::TcpWestwood() [constructor]
     cls.add_constructor([])
@@ -10739,6 +10996,48 @@
                    is_virtual=True)
     return
 
+def register_Ns3TcpYeah_methods(root_module, cls):
+    ## tcp-yeah.h (module 'internet'): ns3::TcpYeah::TcpYeah() [constructor]
+    cls.add_constructor([])
+    ## tcp-yeah.h (module 'internet'): ns3::TcpYeah::TcpYeah(ns3::TcpYeah const & sock) [copy constructor]
+    cls.add_constructor([param('ns3::TcpYeah const &', 'sock')])
+    ## tcp-yeah.h (module 'internet'): void ns3::TcpYeah::CongestionStateSet(ns3::Ptr<ns3::TcpSocketState> tcb, ns3::TcpSocketState::TcpCongState_t const newState) [member function]
+    cls.add_method('CongestionStateSet', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('ns3::TcpSocketState::TcpCongState_t const', 'newState')], 
+                   is_virtual=True)
+    ## tcp-yeah.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpYeah::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_virtual=True)
+    ## tcp-yeah.h (module 'internet'): std::string ns3::TcpYeah::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## tcp-yeah.h (module 'internet'): uint32_t ns3::TcpYeah::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-yeah.h (module 'internet'): static ns3::TypeId ns3::TcpYeah::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-yeah.h (module 'internet'): void ns3::TcpYeah::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-yeah.h (module 'internet'): void ns3::TcpYeah::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_Ns3Time_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
@@ -11011,11 +11310,11 @@
                    '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]
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::TrafficControlLayer::GetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('GetRootQueueDiscOnDevice', 
                    'ns3::Ptr< ns3::QueueDisc >', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## traffic-control-layer.h (module 'traffic-control'): static ns3::TypeId ns3::TrafficControlLayer::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -11511,6 +11810,10 @@
     cls.add_method('Lookup', 
                    'ns3::ArpCache::Entry *', 
                    [param('ns3::Ipv4Address', 'destination')])
+    ## arp-cache.h (module 'internet'): std::list<ns3::ArpCache::Entry*,std::allocator<ns3::ArpCache::Entry*> > ns3::ArpCache::LookupInverse(ns3::Address destination) [member function]
+    cls.add_method('LookupInverse', 
+                   'std::list< ns3::ArpCache::Entry * >', 
+                   [param('ns3::Address', 'destination')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::PrintArpCache(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintArpCache', 
                    'void', 
@@ -11631,6 +11934,10 @@
     cls.add_method('SetMacAddresss', 
                    'void', 
                    [param('ns3::Address', 'macAddress')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::UpdateSeen() [member function]
+    cls.add_method('UpdateSeen', 
+                   'void', 
+                   [])
     ## 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', 
@@ -12134,6 +12441,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -15385,6 +15756,10 @@
     cls.add_method('Lookup', 
                    'ns3::NdiscCache::Entry *', 
                    [param('ns3::Ipv6Address', 'dst')])
+    ## ndisc-cache.h (module 'internet'): std::list<ns3::NdiscCache::Entry*,std::allocator<ns3::NdiscCache::Entry*> > ns3::NdiscCache::LookupInverse(ns3::Address dst) [member function]
+    cls.add_method('LookupInverse', 
+                   'std::list< ns3::NdiscCache::Entry * >', 
+                   [param('ns3::Address', 'dst')])
     ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::PrintNdiscCache(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintNdiscCache', 
                    'void', 
@@ -15548,8 +15923,8 @@
     cls.add_method('StopNudTimer', 
                    'void', 
                    [])
-    ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::UpdateLastReachabilityconfirmation() [member function]
-    cls.add_method('UpdateLastReachabilityconfirmation', 
+    ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::UpdateReachableTimer() [member function]
+    cls.add_method('UpdateReachableTimer', 
                    'void', 
                    [])
     return
@@ -15691,16 +16066,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -15728,35 +16118,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -16230,40 +16615,6 @@
                    is_virtual=True)
     return
 
-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')])
@@ -16305,6 +16656,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
@@ -16498,6 +16854,43 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3TcpBic_methods(root_module, cls):
+    ## tcp-bic.h (module 'internet'): ns3::TcpBic::TcpBic() [constructor]
+    cls.add_constructor([])
+    ## tcp-bic.h (module 'internet'): ns3::TcpBic::TcpBic(ns3::TcpBic const & sock) [copy constructor]
+    cls.add_constructor([param('ns3::TcpBic const &', 'sock')])
+    ## tcp-bic.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpBic::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_virtual=True)
+    ## tcp-bic.h (module 'internet'): std::string ns3::TcpBic::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## tcp-bic.h (module 'internet'): uint32_t ns3::TcpBic::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-bic.h (module 'internet'): static ns3::TypeId ns3::TcpBic::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-bic.h (module 'internet'): void ns3::TcpBic::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-bic.h (module 'internet'): uint32_t ns3::TcpBic::Update(ns3::Ptr<ns3::TcpSocketState> tcb) [member function]
+    cls.add_method('Update', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb')], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3TcpHighSpeed_methods(root_module, cls):
     ## tcp-highspeed.h (module 'internet'): ns3::TcpHighSpeed::TcpHighSpeed() [constructor]
     cls.add_constructor([])
@@ -16540,6 +16933,43 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3TcpHtcp_methods(root_module, cls):
+    ## tcp-htcp.h (module 'internet'): ns3::TcpHtcp::TcpHtcp() [constructor]
+    cls.add_constructor([])
+    ## tcp-htcp.h (module 'internet'): ns3::TcpHtcp::TcpHtcp(ns3::TcpHtcp const & sock) [copy constructor]
+    cls.add_constructor([param('ns3::TcpHtcp const &', 'sock')])
+    ## tcp-htcp.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpHtcp::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_virtual=True)
+    ## tcp-htcp.h (module 'internet'): std::string ns3::TcpHtcp::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## tcp-htcp.h (module 'internet'): uint32_t ns3::TcpHtcp::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-htcp.h (module 'internet'): static ns3::TypeId ns3::TcpHtcp::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-htcp.h (module 'internet'): void ns3::TcpHtcp::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-htcp.h (module 'internet'): void ns3::TcpHtcp::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_Ns3TcpHybla_methods(root_module, cls):
     ## tcp-hybla.h (module 'internet'): ns3::TcpHybla::TcpHybla() [constructor]
     cls.add_constructor([])
@@ -16577,6 +17007,48 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3TcpIllinois_methods(root_module, cls):
+    ## tcp-illinois.h (module 'internet'): ns3::TcpIllinois::TcpIllinois() [constructor]
+    cls.add_constructor([])
+    ## tcp-illinois.h (module 'internet'): ns3::TcpIllinois::TcpIllinois(ns3::TcpIllinois const & sock) [copy constructor]
+    cls.add_constructor([param('ns3::TcpIllinois const &', 'sock')])
+    ## tcp-illinois.h (module 'internet'): void ns3::TcpIllinois::CongestionStateSet(ns3::Ptr<ns3::TcpSocketState> tcb, ns3::TcpSocketState::TcpCongState_t const newState) [member function]
+    cls.add_method('CongestionStateSet', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('ns3::TcpSocketState::TcpCongState_t const', 'newState')], 
+                   is_virtual=True)
+    ## tcp-illinois.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpIllinois::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_virtual=True)
+    ## tcp-illinois.h (module 'internet'): std::string ns3::TcpIllinois::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## tcp-illinois.h (module 'internet'): uint32_t ns3::TcpIllinois::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-illinois.h (module 'internet'): static ns3::TypeId ns3::TcpIllinois::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-illinois.h (module 'internet'): void ns3::TcpIllinois::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-illinois.h (module 'internet'): void ns3::TcpIllinois::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_Ns3TcpL4Protocol_methods(root_module, cls):
     ## tcp-l4-protocol.h (module 'internet'): ns3::TcpL4Protocol::PROT_NUMBER [variable]
     cls.add_static_attribute('PROT_NUMBER', 'uint8_t const', is_const=True)
@@ -17210,6 +17682,40 @@
                    visibility='protected')
     return
 
+def register_Ns3FqCoDelIpv4PacketFilter_methods(root_module, cls):
+    ## ipv4-packet-filter.h (module 'internet'): ns3::FqCoDelIpv4PacketFilter::FqCoDelIpv4PacketFilter(ns3::FqCoDelIpv4PacketFilter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::FqCoDelIpv4PacketFilter const &', 'arg0')])
+    ## ipv4-packet-filter.h (module 'internet'): ns3::FqCoDelIpv4PacketFilter::FqCoDelIpv4PacketFilter() [constructor]
+    cls.add_constructor([])
+    ## ipv4-packet-filter.h (module 'internet'): static ns3::TypeId ns3::FqCoDelIpv4PacketFilter::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv4-packet-filter.h (module 'internet'): int32_t ns3::FqCoDelIpv4PacketFilter::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_Ns3FqCoDelIpv6PacketFilter_methods(root_module, cls):
+    ## ipv6-packet-filter.h (module 'internet'): ns3::FqCoDelIpv6PacketFilter::FqCoDelIpv6PacketFilter(ns3::FqCoDelIpv6PacketFilter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::FqCoDelIpv6PacketFilter const &', 'arg0')])
+    ## ipv6-packet-filter.h (module 'internet'): ns3::FqCoDelIpv6PacketFilter::FqCoDelIpv6PacketFilter() [constructor]
+    cls.add_constructor([])
+    ## ipv6-packet-filter.h (module 'internet'): static ns3::TypeId ns3::FqCoDelIpv6PacketFilter::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6-packet-filter.h (module 'internet'): int32_t ns3::FqCoDelIpv6PacketFilter::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_Ns3Icmpv4L4Protocol_methods(root_module, cls):
     ## icmpv4-l4-protocol.h (module 'internet'): ns3::Icmpv4L4Protocol::Icmpv4L4Protocol(ns3::Icmpv4L4Protocol const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Icmpv4L4Protocol const &', 'arg0')])
@@ -18025,6 +18531,11 @@
                    'void', 
                    [param('std::ostream &', 'os')], 
                    is_const=True, is_virtual=True)
+    ## ipv4-queue-disc-item.h (module 'internet'): bool ns3::Ipv4QueueDiscItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   is_const=True, is_virtual=True)
     return
 
 def register_Ns3Ipv6QueueDiscItem_methods(root_module, cls):
@@ -18050,6 +18561,11 @@
                    'void', 
                    [param('std::ostream &', 'os')], 
                    is_const=True, is_virtual=True)
+    ## ipv6-queue-disc-item.h (module 'internet'): bool ns3::Ipv6QueueDiscItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   is_const=True, is_virtual=True)
     return
 
 def register_Ns3HashImplementation_methods(root_module, cls):
diff -Naur ns-3.25/src/internet/doc/figures/tcp-state-machine.png ns-3.26/src/internet/doc/figures/tcp-state-machine.png
--- ns-3.25/src/internet/doc/figures/tcp-state-machine.png	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/doc/figures/tcp-state-machine.png	2016-10-03 19:49:01.582388137 -0700
@@ -0,0 +1,159 @@
+PNG
+
+   IHDR       z    IDATxhY{{\HׅNyS:~,a\pjD&+.7Q.d
+J"<K"(CYh!Pq4MW돒NfΜ>6(    !k;        ƀ    6m; C>Nu/^ H)ih#V/ - h	Cf^  4o.h3NiyE.h3NiA@h	0^yE/G<jC⒘_'},-Sʣ'T|L$l<`4uvzO@Kzmj+,i;_$$)_ȫTIE>^M>O%"y[[v&4E Eh	["M$Ic9f)$)dy**g!l2[,vtDY@Z -t؅;*lzl/,JrI ''tfSZ7@h	;-RAuar|_=*<Vm[7&&v	oBH6/ya׵ZDAEQϒAB(Ǽ{9|YXv8%;.MłT`YiYB裃ēW,(ҩأ[ #y+Wy;D[圐S7$Ewۻ4Mi]$IZY~68R}ѝ0/Lܙhoow,H v8
+
+	a,I;!!Vr7-Ld\!K]68< "]=:AНkjrJQݠnoo^&%ťmI@ ZgБ9'A6BD*<7B+uϼ Ƀ$@Mf~/BCh;kuǱM5[lAéR`¼p:vL:}
+H%d]X._Ƀ{ĿDv0ɘ~>Hx`vZ$+{[埨+UHm\u0]t*|/\Z)؏c	Iέ H%dmoo_wz~kP­῾>EQ8~G-TV-oۻF}u1uTXڄׂ:"Fķ`ڷ@-v2&IaDQdzIYguf9K$D$9g!nmT*mo*+"_Nu$ɜdg#ٗY7FNz}@K3>ǱLNͥﷰZ/>RX.pV/iJ[F}*InQ<?
+Ȳl]J<#v8v;E{͋U5o~1E߂$x"gSE0/..iB?tqH\<F}V MsֵS5f?u;i׈+2ʾƱ!W ZgA24AQa`0n&Iė]+hǱZ=NeY)lЁ[Ux]tb!r^_uZ,,Q_TڢD0DRC$ h
+k^k;Ey!0uGvIϒߢp2H4/@ Z§3*,_w3	I c{T6? &
+h	:mjLuVx#$'# o0ww_t'. i-ߙR!#dG`z8?s8kA@Z -tw&W.*[;]/)M}ImgYi{Yv}996i-I7+,rB.,VZUE|+
+QQl?KvQ"~!gml_1>f?cM-4j@( dvNY=qID2fB^\SS2onK7Oz?p
+˅ȃHmm[	- z43>R_bM:O`Gj.erXZNJSrAo780GzxƇtxyeQO|gBAH<ID\O)*a^_+rf`KɁV h>ҲTL-_O?]5eIJuj]ETeq^L%QFvʦ~8iq_vZtH@nEtiBe@_d_gs/1ٸNxp	0L%d_gqnc9f|ILEEB޾[`#F<W=ÐpO %-Otg_e/T?'$1H ny!r/V]t@H,BHЊ\.BwB¼`?mW	 zϒ{ݝO.iZqA(L+7!\Bͮlmc?m:ViYOb tItT\z/:mEtU*N]QFXS){!d?m߶i`0l.+G74kvJE\;<ʾߦ+ɾ;|TĨDDc tHNyzlO%ozZ&N~6{T*uw6Kj.gbǶz`TB1=753'B9!>BOęFm^H|gEQJϺF\%S/Sj{!vU%-R/S/akuzĜd>,ݒ&,ɜd\SX./|$I]tBJ<M`UT0Uz+cMQGW}u?~P'Y'nOZgIA5"ʼ;`a]~ͿoB˲34"+(i%[cxzb,G?t'$%S锭?ҁ0uBwBGmmq:mmLN|!_*R/Sk\R-g!,-L͖ϕK2=%4wZe%+,AX
+n&?GiEQ}_?EQ̿+BS MbQQ1	O~֎2Hy-NqB  ¼0tq_BMܞ~4lW5ɡvEI&B+,QX߲Yc_r>qKׇm*X[D7sAX@m2SSLx"^s%7:`C!EQ561׈+8l*#ԛ9E-|l͇gwظy,Qxoԧn)+F\xxw&=1}=	9L6W[ 3V6ߢt9LU1KY2<9x;bsM+"]?s!w%?ka~v|P=bXyjRA^UXA(,B'qk!RNK}Aqa *J{!2tq0u8jUybXv/v~qF\,W - ]y-:8
+L2uHed9:e	+BK<h6~qa7Bz.͜d,-x{^>b:"#!TDIT}	UzBӆ|>	5|׈+pM}Q0t0- IOMNQe_f0RS?wJI^..u,qoL>ILO#ǉdgxu8/"/)쪇#2eR_Rb*U4㘙2#ĿD%ך/ڨ}<Hǽ׼	- Ş㦼W;CۆADczzrfՋT:E}AF\_Y$+ciH!3<-~5?ykU'2=X#IRN5:(Ԇ5x^A~nI
+G[	BՄBZBoW+!^C{g?ï9W O[(ܛb߳YR]BwCrU&8kE[Qߨ3Qgz`*urBNm?8zF= 3=,޹=x;6saG g)*UotS]ޢrMI]a*[@VA@odYLmd,
+KM4yyYJeebQÄ*' KKoL)gLC+i[h~v"F6{i
+zx@Z tMa9fwCL}#p3q3i-ijrvf;m^k.>4m%[h3sx5Th_8 - ]fRA/0H@nemml?UߦSb&yc t	ڇ`#F<W=al.BНtQ_Zal.B/PTt&e6>PCUm_D	=-$.4m8[zgJFV@x_bG,'䜃Ϊ\#pK+kJH<M|u_Y	k}a;9_PviON3IS!\W9'<B\_-CpA`iYR7/Fu?*]^$_ `0'øi?KR/3#d?k=9W%cOVZU],!dYFsjL}ohBi2 -)k<<e4f-v|3qa^6ۚ3QXz_REFrF TÍ'璸vئJs$I[Q-E(a/˲d2)R,RgUsՓrc?%6^[F,(
+yTyuǉN
+P(J]>9Bâ(<$I:;|0'I6\iAk="Rs	ù+s+3Ս8~u	{騺J؏֔Rj2/3}69[l`<[TB:F\G{!UJ)չXX\`3Ue'<sd3{ާWD9O&
+oGF%7#:}ɽ$8t2ViYJH;kJؿ_S>_SR.aV
+kCaĭuF~.a\j"c|QȼZL/ҲOĽ׼aVeU{{{e;aD0LM8.؟TOSK$7 B <Fѝ(18\㉸2;XHfɹ$XYjϫ(
+>*KدKTC B^UEQ1Qm^oaUPy),V
+"֎?KR^H>{_Py^:ĳDR6YYw;Q@ZSy[xnsaϲb>"#g쾫q!"yDr|=gց"IFOHD\^t}مR ˌJ}A_k>d+$o7gk$šrI^k6Z('䘓.-Gk'b&y	oM-w.p!X]zCIL6J>OCܗ8(M!N}=tqϣp}RX{?hv^zyWK35%+JBkJO?fz\s5nXeY}-b}t}WƢRzϭ0/eY6e?jr.oD1*4`C'x+KEF/	ZvE%~ Kǋ"7R.+ϜdfRL|jr	¬)a?N	
+	c}>vs) .}pp6-Pr|'61~]/7&8>80gQ>S}F\ Uz_m!5bzxeqK~1EQ/ `+-m.#!uXv'V<m'нڧX mEO]$iʁO{[=@Ak2/3؝ GZ`@gRs)dn<%[?4≸kc< - ]žkҔ~n;eK@ؗ
+ngﺯi-Y«Ȯ%^`03LuP?Mp8 "p3N.b%S
+xa]^$oO98r`XYN)%H@P_P[FDgDR_P!ASp<PYy0Ś$)z<֩$'8Q؁1ks*7eǧKZd	FDF8@R	Q=^
+o|TWd9ga#=tqhaqAQewOZĿįl_9;E	PY"8oRLaz8t - `-[4Dj}!/1 74_3/3b8<7(
+ygx׈="N}$Oj(3<ɺAZ Z@hHeU଺T"I`ſD+cea(A(5
+_;v-<( ??Yw7H X141=L>GZumDA2f3CWYV]g;%?MDFk3i4Ӂ nw\hZ`**R.rz~7_)7)0lzcuŜdYMU.sցO
+ -6ȿ˻qeCIWwy5Jېqn:X{ӿM[{XBE:Bg4.%I2|ݿLbꠦ~
+#H X4Eh4Q\M}moNh4B?I<7q:l0tvFuRsIntLC?{8	MeW8ITCz֪=!"?@ n=,,*LCН4HC	[H X-4{ݫUeoNY &PS6Mej2u\ -
+Ԕz<1'i) - `-[hOS+
+j*=Iy3
+K"r*ۉ&L߄qFcX$IrRk
+v70u_FpHO !I2t7^f4"@Z sգ~4u-36ӔvVW@Z ~ڮ~6u-yZSsw-ƣ  ?.goBp\gm9k50uzيBhԆ4UaҚt@Z Czmot=pim954.!A^[yBSe.rqh~Ӡ[ *^㬴h>YO!Zml    IDATW\-RYOX[(F{M<OR!};[%Z^^oLܙhqeݵ5-|n@{zJډvއnr> 뾬suGh@KܹiAv~`0g:h	8.0OkcT(-qi+^) ZMu;;##oH%n[4	)[yRS$I:Ygrn%i-6 t&A-![侶s@Z -t ݢy8Ja9fW}VS@ -$ȅ^wdu/	H%n[4{ꥶ[{ٻ| -,"<i0yӄ#KO-!urt$<W*MX5U!D$)+-H%4KhooG퉧((0/Nٔ s/焜=gߦWwS-% ({OYiAZ -YETBɨ;,pΜns498_e/eg۽:ssB[TZ[yV3) -\ݢvk50RiHS0W}?~^⍥Q,Mbϱ4<v} H%4WhymCU'XCnEwU3Ԟ+rnBbbƚOݯ5}ɭ^m@KM)t/T*&š쫚ifnQs:1SCkإ5I[vo!aNQn<YI- n
+v Ǻn@K5h0L|!_}Vh	> @[ݑ_47.[Y
+AZ -agO<){y!x'X˽B?3<1uCq1rm h	-ҲT
+/r8ݢYxPnٳ3@h~Gyz{Q}YnX#f͝nx6hnP{SS6E^݇<Hr8a^u_@Ksc1K_ZDd?kϼu/vH%ܹ1pZGkq!3v] Z̝uXgt'-.Zd%@Z -΍:(Jiэr?Sz6H%ܹ1pZI1ZrܢŃ`?נz{݋h	0wnܟ29iA6n@Ksc/Vc;e˾\ZMc4讽
+4M^wd;h .rmJ$?}1uh~JK")yd[c[uA aNhAZ DF28hq^זjJ! - ]B @v'i1ӆE(6.>ѝ|$&ێEC]tPcI2u,g_e.*}窧$կ$0ҲF $zzZ2s),Z2tfkK55H@Hl4e)g(JGG7[j! - Phh4
+gԅJ{݋: zK9-,-_ZaJ<Ih%-.5iqQ4j%N<b%=gFq^bˀ 0/[ѲT|Wc
+P	 jδH --9$Ѻ?^Vs=/(>eӝ3ķ
+Xk>9=/-vE J?ݭk(mF dfUɤ~i}ʫϵv	l eK[qi>d.u'dY=FwPZrZ4_ ۠֠=׽ - =}
+Dkss#t'9G~5 - =KZz->50_2R\Ҝn\hp-H@Z Tō!I~ʞ}ƨX^l4
+s4 wITnE4iC+L4h"k H@d_gŷ}wNg;id3`
+l	Y_1>xx[߮?wty t@ExȜdv3tLwKZaNl2keH@Ȳ<Ԣ$Imn$I:	){5`y1"EQD;@Z F\{M{5f<.,Oܜ^4Gc,,w{: 46T%]&~0SfnF\mhހ%j 4
+?Ë<t480t]zĠ(^ ɾr\b5򶊸$>txaq;FuF`- QX*p\AD;!DuPs	oA:8m,oc-5Uc g-JG 4,n	K}<{,G-+^0$V ihRk$El6mVM C^#@Zl<ӄ#~\qiPa^?0oLY&&ݗĿD`ew  Rye	y'CZ8c3UK{{^Ӣw8}(d]jJ`H<M`0i'ZO!iYZ.U.Io`ߦHIvVc4uOM [7ㆹ⻢(R(
+ϪE/B騢(SS!ɿ˫MwE'Lrx{^!I :ezPeJݘgXn[X\P >ol?UcyqK*pOM1;7J5k=~!{+"熹Cqq69S[|W^݆_c+:ccﷻkS_bX5:!ow+@oET L*J%'l?[ϖJ=`C!EQJK\6GQYX\`z߄ay1'~`q,}ڮ(Jp
+x0{,4<Qp<.$2(
+xU%5Bm)91>֔\@Zg~O+8V£9i⍕al=8tsۯO\:ggTTN-g,/F\Lb߳!
+n*6:>8T5ZߨaJVvUS>*}Bjx;~XF\E	
+XZ	*Z[L=ܾ"@ZgrB('&J׌xN]U%4¯ENa\Lg^f޳x]#)U$lZ6-|?|>E#ϳ³c⻢摒=.xOS*D--lfۍEnS}h2uS-ޗ2(&C-bNJt|,'0=LHZL3BUkqH	9U^b>t/z
+T0QR1NGT*Q_ulX*Tjp9<^cL`%{8;kL6c9n	
+mP|_*|h"(K*?G3BYqljr
+TFZTu>t?<W={݋j@Z|BEjR櫣q^W`Nq_Kc"8^;<QrZDalu0^5'JRVavdF\ﵷ-T
+q'_%wҖXe*5lb?rBN&8rE(IݖrAd-8
+"BHK܏R?8h*k~}>[PHު	ۯqLL(}ɹ$B ;#׼{3~i*G 7]c?m~_a`0T?r(lDFu741=LP~Eqx7ZAB~'254BhMo ?i}ch
+u/#yB+{ݡM bNۘ&p#F'&S=r^V~,kąP_PQǿ#y!t7^u1:?ml d9g~1V^eRX.^ߦqܷ\**{XYZ~32a_k#y!t/ĝ[{,H=W9EPLld3A!u[]#IRa<XLieM?jTt:H'^	%I{!%jkDP(P\Yk)d^fBSS@U6`Gm^``<PeR>:KqU]10P{h.+lhֺmuܪz꺇RTm뷨Xp<XW5'eS%jy.Ɯ׍zʗa^>&'Ӷا ^RMe/uaߊ0g;eOtVh#\W\C4%-Bkމq%D[5,'璑yE_<"{X{ GwI~wнhh:E\3/)sЩ"::]X!Zcj.ŜǼJ[,RӏsorKnY;IB"-K uF8	+ܽ5i>ѝKE\}BCh#!sg#19lyi'd_gOkeh),M-w}ٵF9<e=ev;@Y%~UZxyeI&H@d[w&&,e!sYſĉ	u	8@]ʽ%fK|!y>.o:XʅslrȾF&#{!~^)//O}_ǃ5-:tqHt$-Kύg.5
+
+D 6B¼]ଽfקhb<߂T0pzzvLg=GC7x7U(J~19
++3SYuE+ *W{~̪#Ua '8AUR3tU@85*X'[',)3NaiOJZJL63=Ln(Nm2M*]2yz!j->u	XU[$y)WITIv~ɐFXrZ* y$Sձ\*t/d9na-=}2;iݿ?k#
+˅R>ͤȃz٪d2!A/ؕF<ovY{ܷ\Z?kGK"ZADFH;iôk!|ĉ}>~)r</+HA`RJ]GQdk%.ٗ2VgXh}'MevEoE~q9:5F6Tq|1F~VsaWqǂA#y980Gs.!si7БEJR2ȃAaui?(wCN""j4[iץS>s98i;m2V5/?g_gYiyEV`Q[4oʿ>
+p8w2>;7<=SW%?gB(8^Wp*E+^m_ulʅ>NlK}!jukn|,,.ҩSرg<W=_D<gT6YEcvDn%q 4y	9l8$ZR>=0^knqévv҆S\pnK7wSWQf
+!DQkV	Lh2u΍F,ՊoF:(,׼3)o)(p~1YR$ύÈ<H2'bj,'BWNP _}꠰=8R^,(n9nffd$k)gap2+tFŖɾΦRg	58B;Zw3^[$vHR_~Nw4Mӝ{ݻ;6c\ʮM@&7;%&qt`gg	56w|2^HEa0Xm l*«c31YjU@#!AOVku`Eȃ$y'.SS$b^\X,Nܞ@ll4y!~ϙ[f9fEcvnp^_M?6]OjaCس\rǃLceU{98ˬAo-%h-n?mUF\]XUFp_ZE~6<i;essF=<,od\6砓Ci%H}s$Iʼ$%w׌wW4BaN- ~ޫ s|usOu\e'Ϩ:GUկ=ͪ\1U56jl^ SleM:(Q]*~aO1~Rn8Ec2ٌ[@J"sF=qj>cFWQ7o18&rWwc;IW܌r\*KT IS1>j[]O .T&s*/Q*WQk&xLM%jlRTh2480>`[V&vC, k"Mq!,'WwƥݗX]gx\tmʍ؆:ȯ .+*k;mK(*aSf]QWYkz$ɜd,', L1%Ars$|i"p+@5aܑE
+^fhZϏ"_پrwsMܞU_k;i<]ʾʮ^#"<H{F}]vk3E ^Ī7V88lCU7[Tmd!*O"|UǺEWx통0k;W;cssc *[-gtd3>: ^_%x'T!s\?59UԎ]bBW8"~vu{WMOxq<xyrE<:BWYnX3WDeMJ_A8XGZȲ}M%c|r  zvBƟEqE0=y`n<xy+B3PTa/<#^f+WEVf5bSwWZLÄAc?!&&ly%"|?cf(?62xv*΂F    IDATXs#aP*j0[[6NC!X$IuMv_r{ͻ9)7Iw=>-X]]8@)4:(u 'Ex4 ڈx0uxsUojaϲ}͜d:vW&?~l6~ZOX--2kG-Ħ֛R-;<)/ӑn,GmZY&.e^f<9e)݆Lt#'6[uJs_#viYUzxR5ⲟgZ_K#3Ɵ7rl@Godxc;GF5RW>Z[BBKq(!+NGNŲ!\$&Ŀè;:U]sÜ{WYkZ-Tll9EWnEjt2*B<7	;L\ndz*(,sIlm[l~1IcIp7:BQG(>AZ5kP 1[O(B>:ǟ6(pw""F\#g\ !ȃy3"m^c]bk1Q'B\qzq{p<slpƊvN:k4|?\6YK~&BHnG7}%%#F*kԞ\^f*4xA  l@ۦl15$NMG~~+c×2#U)HF$OĽWg	-~~5ef9ɨT>foJ^yKFDpIkJ(GNܞ_Ni7Ug7l?j-  hAbϲ#_	_/Xo=?Z]P!U`чQߨOMES3vo5݂sBN$h0SU; B|̪Be Dm)&~}'нcae'(&g+/(Ϩ^e!9LґX@Sli
+Γo09$w'5EĔ`+~OODQN	Υ_Ii:kB~ёbM]nE`0	 va^>ji]3%ek  .'.bEAdPv
+!k~UTMѕY`5"~%IzJ&y;PղE	&]r1_̫զ<wm-,JҺ[My+WuҐawk,QwJhr,x/EqÓϓo\lFVX/EQrk2AjY̛~ne"#YZ Kb~1za*߇<wm~/'|KEo . - ku
+hPO4[P(Q\ٛ(;iۨ	"-KE}(NܞuvY:-'ɑVji D}aSI~1/.֢%e9f2ݩ٧}!2#.Xo\P(Ɍ`~rbC>) +YquhᕀK1}w(
+bYbXmm~ u7t@igԓ}+b5OE\3ĳD1_t|pI@C.wcRsйg\#-wIy,d@n>}r2x~PZ2LF !ymͯeYξFFror%.r/^!ȩ^;dݜxD
+EDDt}ٵGeT~60ϾYBY}rFx+$&DQzñq7}]]?dYN%##Jv|YG|n{k?c-
+ . G~t%%GA̛LYr 
+`)<[{Kwk^Xo!1Sd΋YT^3˕!pVe	*{)=Ge%wMoRT$'82V|eX*VMZ[gnI%wU'eupߦ~y`0WO7&l8s2sFB(x'Xz_R%'3ED!O[ѽ\aZx(J0!oqR=		2=LXw!fo&~v۝ϼ \XxeST7C儜an}|b=AE=1=A.2ǃ{.25;7*+*?HT{{g5+0"w9,V7I[pJ|x̨̼gKBB@}iQ|Wk<)Q7BkD!T**ψ+]WbA\@~tQA4:(h J.+j
+WNW/ѭ3[K}	k{6zlbCi+Rx*>qu{zƩɩ$J[. ~Oa^^[۱ vPekez)kݚ=kոw]=08M1`b⧉si>dƕ%B32ͱǱCWis.l7Cr.01WW_";q顋C0WY!?靴_@ȀFkqUvL&C3/&g
+Qa\#gKVKUZG<ڙ;XWF8$Sz_[ԭV{vYϱc裷/w}LB\9//
+ǺB7cNl	 -ZA}voԧ(J~1YxNa_`;b6C&a7lx[m-u
+K2"Uve
+yᆹ"^vFe*DQbQQvˍEH<<qw
+.؝Kfz*jҢRP>>-*5Koԇ7T/\fxPՐ~՛z^4`Ңp$T*#U.0ݜcYl(+F1vez,W%ǸPV`'-^wy׈qX]#.6t"Jlꀎr<ǯfY0XIU!ڊ,Tn -zQO:0SS8Hǌ[svh$l?KeWO+}u\[(R|WdN2Xo^TsrU!sQXk5yZ/)]#-)-E	6 PIdN8c?=9; htM^/һjiY?@L'=-OAz ADUȲl;eK<Ir݉ - }@sY7d_gC
+ @ - a1*Nc  t}UZMiT߮ H@O8uuKqI$0C 'Ot'"2v@/h4bȲ^*v!ur̲ 	 '.p¼Iȃ}n @/ t]xri!G\`Q i	Klq  tAbaqhS  i[.&Ӻύ;  k?5r8[> DDZ׾(Z.kkK..TȜI#("2	xf3jT!r
+@l9 4XpBǐ	 A5Xvp̞k)8K HEQ6E @<B}.DFZ P	--5oD˪6Y!҂В>2IRCɯenkDBKC%1uԍ(#Z"--biВlcHY"--IgGgrP"--(<nH?-ԳB9DZZI(,lxBCUgsoV,#*ikvwCUULQdΎK(J6UUz)@'Iw(N׬ŴZsMd@ZhéJ 
+Eh1]Fvs۹͏DTZ CKK4s)5ː ^m2T@  V 8X{De, v@%A<Eb n:ӂ@9@4 [,p ҂В͎}Ѿ>@#<xB&4⳽߮n+`ol6l4c"8:a"+g)RAm_eSoT+=,g9vm"[|>"BI\Hh9߂Hb] 4BA!P]nAh5 4[-@t]  ҂nD DZ-vVHBC .݂jiAhD[Z֓)`06&<v`0,3f2SQ p~_TD{xt*dՙVU!SkMtm Q)t`n5g0Q :-?t;* `~C2".hï=PZ,o+C݂rH<Nuwbp<8`>cd66kRO<7  }-᥼@ǘmݢ X (KEShKMVx"n  GI3착ǈ̋ w^l 
+ JQ c!p+$-+cclHnڒn J	ޘ_KoqU	&JBYWGIT	 I!vUǂ߆r%Y -K#WF/ uC76s9 ȭOks]o  	NѼ65l_AKDxin6rlTMjnX  Tr ޾K?bƸKNXri&5ܳ
+&;]tpu?VEy v@zEQ_b8s_[4KJ& r/"IhfXUUәtp2m<l ؃D@ԾF Ae$ݤiJ;2dgq_qqQ:J,I$	s'sTx,-4?ʗSw|yTn(҃-BJB^kVzi~g/ `?c?  .:-Q.{+<E_\SROR	& @燝[Aw L]<#D-lc؜|a]Tr:O
+I>F~|MXzot
+[ӶϏ=֞HьLEaBz,=vB?~#yT?Fa5@hZIZim,>u%("gq ^.@hGDEzMY 8x~WU%ィX,υ4p_qhBs?L MdBȮeM׽7Mwo-[ܗݦL/%iIN߂c]3Fh9ZIZllRjt*(kٶsP/{--Lߟey9reoڗFzƇ2/."D؋c?mbf1r/Bw" E2>r/M _tezn/~As?E~@j2k@$-l !.\I	 >ٚwG(	Em=-.#`'-Jj_/v?5@>/T9NEOc^(>hm  .~z[9 En=zE8k,sȽ\^G.x*6@yd}|ɀZXx"nlɛ  ~{8Rf/{M<Lo;8d4-(o  2/2لvEQ%.s
+j؃m}_KZwW%Y}_K(.7O-~GJ !6)$"@Qra/kRHn'OBbjIZ~/-r >1Z?JmTb -0A!ES@`0H˒eIZr8@T@&4ōreUₘ x6}d16N[|bDe]7o-5pG-?|nǃЊne^2JJ!"-[ZSr}-@rև\BA!s}!DZ;ׇ\BA!s}!DZ;ׇ\BA!s}!d!$I}"M]&gꆚ]Ϛ?nJiYQÃ@hnA8xzM]&zoFT^a=MJi+	ցmd؆bQ\ ye)+gQ%,9AAQՓH"--.:f	# $kf_أT$->{BȳG T@"-,|gYyUnPBBPU`0j&QQB%DZZYE[CZLxG75N .DZZx"޸TNnA8iAh1r9
+Y(*Jt"--J`׾3DiAh1Iq!u8	iAh13q']FUOLNA "DZZjNswc9Yg@B)qHBUFۡ}ᆞEUB@[Z	aV`4i(*p+m lBP;1FZtj!(B%BnAU6tb"  
+ȗ_]q	;pK5[C d1@t
+OtBwOiP֕;sH  [*YLK(!>MFa
+ hkDFJU!	r_fb^ATZB[;A₨n&x{^,>Н_Ҳ*R_uɭopSNw y	9{Of^l[^.Y>4?&[9[A9{?2Mtt[8Y'1DT aupP'r_qgz`0 @)0u~LE3HTp
+ dDO+O=MD / =:SQYPN[[coCg2/k EqNNA$ t'-ϮaW{u52ҊR,kYEQzI`c$_ˑ{wŝ0
+( @$ݟ[m7YDſ9~3z?33#GRbءn?c/] ۺ˞| ڶ~j>ōrxyj>13Q?k4p3b1[>|RGӚp8hHZI{g{'z 6ڨd.cp2m ^R)6
+ E:s9<o"SOS/\h̃Q$n;h b{n?X    IDATЏ񇢨ݰs;0ʯ*Du?ln_s/q΁>jnZ/45Dp2h?Sz<W=}#TU#QajTE[Bˡ;ia6hOMf+:|z˭ݛ  qJʮets٤T(" YYWb$-'' @Kb/6$!wԳxt Z GBQol˫iQ7G "b{̀wܻ- 4@<*?23ظ8W(#n+7wqku/f ;i rV4=(".@~-GqHQTp2(.eYp<l`u'Z,%/Qb6#_2g4_m/e}яVQ5:U{Tx?`K@=4뷟'[-m u}hHϧfND~NEߺ Git,gQ;Ǭiv_ˮh<-Nt޶5Ҳ12- \_  0 ؿBz%yǽWo6(D~ 	\b)Fq[]  k6R[HCr9 hmu[]F.,f}|a2!@Kz,= @ edM  |4Qwő@Qb(<Wkfhdsգ};0vgg}~e]	N?p3*qqA
+BxZOZ- .:t;dmXHϧK)iYN٤?Vsð	i&kYQ<0=n!g3%. L%lBg= #sld,y}xo3qqyvʆLRZ?Mfho~2n7`ϭB?zivmQa?(n%fڻߢtLp2fH܋XY]ER(>l-r/Rt=+
+k؅ lBF`?pT~HEqQ;COߞ{]*Ag܁cQQuov-m^0v1>p+9Jt0m+n Nj1 ='z]f7:F9IEwhvrU-oF94v]%9GfEaV%Nx"/_V	NWüSD[h׮L.qRFx$k3/2D(OQwu}bN3΋2nt:S{`04zqEZL-YJ3M(4GZ]tb6%f4]~A:7;N FMӁuo?cRs.#tjvjUUNtHު~uCI?O7it?`aʫT5%`N2=֞ݍ9MUc1ߐMTe~K=Mq+}zw3f=~KYOZʽHq~LϧzK?+*M3xǽeBƻ+EF^kok{DYWWRi*(id?o16	KYycJsP	Ǔz._ ;`?cϿ`hf]Vsi1nQqal62 ^!JTUͮf3fEᩐy\~kbLKB슪Ҳ$rZL8ezM&xLsi!-KO<  -KddҲ$<x0=dPE~-ӴB\X,KM&JkXÓD1|Ls9]˦ŴJN&ATl6LD< XxHR!_@ pM(*%~nU7ΎΣzgh: .HIEw!x'r	W^J&" (J-2}di<MAZ6JPdY# Zhy/EQNQmTKO TƕiQrT#uY|zJ&v~R7Un\.l.+2TN<(g*fd4APGN<ݜKL	80lGr*6*g ROS|AZPH~hJr^mJ}"*_yRphw K4z7Z5Nb6C+sggSci8:PIUeBZI	`knqacl.ц-
+VrEiQz!1\jfIZ"A5(z^l6kKT}z}v䉪[$H@N-CY5TT[9̋`ȭn_s_qIPz #:,8̃:,mtsxy/Y@gG'2_c%!-j-|>M̍r IvYٱN6S4G U RLddqAdSR@17 H
+I9[y2SQװkxf9F.hcÕTZʒݏ'Uok}o7G`0$n<Qi<E91*; 8Yg9BbؓnQJ$Wۭ2B >&0U:(nR]`0$1}Dщ'kčV)S'ʆ4vNߟAo$':;?($>~T,o>9e9E*x@]QܬoNX%I.>pJ1ڊ ;*$3&%@[/~ؓnQJ$Wۭho(0P:*8{Jv:mv>|Eayi뷉۵yk>T8`/@ e]q^t&%Q pw$kإj/  5j#A{zW*J;Ģ]{qF!,YwGTmQ7TzIR^)!T{QhO٩UJm09>MI!9ry(Mf,O(-K0SLcrnצGPx0H?O܎53(ҖRY lgl(.]4$&Y;`Hȭgt^k/94iwͧЯ<cSƫ}-[P@9;1/)nueV$I~-儅}|ҟR6 \):kuɅӹtyǽ4>o>z"H !Cõ2V-Q\=SLڱ_b\҃|ѩYP@|V*-EQ|ETq΁TĜfSPc31+ XjYSl!@M ~
+ckAQuʯeQ$m؃Xi e)0ֆ9S~~ڟ@ 4]kݣo'D|E^?n#Ggqߢ~]ZPe疉&%8v*~Oi{fW@GI_x"*-',X0fX .5Oko/ko!~1MnUUNEE@:VWGvc37okYhӸkj;r1R<^RH@燝kџK:M-jZqrĮ^kLDlt2lfYqA \v~c=aG[`߂@hEJsl.[o]ʌK M`0`M ]KOa4ԼXa62}-18:=W={ r빉&RsxB$-az-je~Mp21@c9` E>9(i;sIϧ߂@8]tc ΋LrRm΍Xn\î AiÿXNEqy}!31."7ơȫ4haiyt؎\cBU׊@ 4aRH,И>&2wn~rë(	||/Nn/x@ZdeK"2fbL?_ˇNQޢ9(HBMi9ѩkH܆qg8*
+P#LQ3oQ{Lj*AzpE웬Z絛T#?}grv!Cj>:ɾ*ys_s̖O-̦nF ԇ9<KYs@8pP4aJH,ɒSb37XzA [2i*R;Ms[rR+8C^%TYȯeԔBUFuǴVsillS6*'`#-TU%\,]'4lsNS	`+ISJ9g߄[ҲT}ncdO
+E{Es	\x@Zioo647n)kR웬5-ՁT}<Z"Ef / o -;XڭPph4׶"4W
+%Aq;B8ά\\4:53vYj&"n
+aAw(A)& w܋)˸Oq쏪Dm}\e]AŐ ȮeEqw2mQm&n9@Pzx"
+xǽaB9t*-Om4bT",eGK5|7gXm]lUCeNspneVUÏD!6r)'@ 0TBiZE`hS=|7<pq 
+"[Or8>\YY/Jo݋vCB/P@<GeDzC)o  5ة[d  6%{EQ6@Qѩ[/fc;A︷Jp8B/<F|[zoAQ?r/"<$I8g2ʧJ4͏ѩ(VY F.,f}|a	moo˭1-mAZp:"?Ez%B}Nߟp,f>4.G| j%TK[
+!>69~?6+'18|oSA0+ECF'D{j(9ҁ
+Q_:!6p3WȽ埥ѩVS)
+LQ%. 5De\.d
+& WS`OǠhCFT|RuѩЉBU3MBZ7=ڸQ27o;hv)#c<ZyI&p-0 (ġ:Agv-΍`EQ߹kYw^( P^$B)XNXSi$0",>G.Xz`b31=;PYP-0֓L#-Kv=4ō:tMXG&i_ctc 0dAJX`p%JqK)s9Ǡc|巪~O	OȽ{ke9aq_q]42
+D^$ɄtU~u]- #sR31HTHR^d@Sz{|xq@84t*-tRHIs%iieIx",sRwTG@l&ᙨge,uDx}NɯHv0PZ;ř>cBR=6_(ԄZ,fNH 4:犼% 8i~Gmbq4dv-  4 qrW[ZoO1qAN!Eq?KkyUQܞmDp9ލg"<adh5-:lJG?2~y/&	뿬@Wb"4iYIgg'.IK}ōwiوL#AE32{@ҢBP?~v-% ؃A`2 E&  <JDxq/An~Ù癪QRʆOm6t.kU?K,7Z1>sG?8\	KV r/3=ZZW(pRu?D@m{|V
+%4FI;ٝQZ-JS>|M4jmxh84wk
+n-7I.fbRH@NPCl&ֈx!p T?H+ $-eײiwW,Wa~/a4qcpXL
+IA5lH"+2jL@`Ks ,s9xKNE-]ZU/-Q P(p_se#TnYJdJAEkfwp*-\~4c%:
+y;A̯c|`2!YH>J"aZ;~R"sv 4`O%O[:LQ2? =%.]QLρCuPfwp(V*eX6 ՜߮l}ō| ]8t^𶐚OD>P1]Fnck%/GoKMH˒1\yx  
+pj?,EU0' eAҩ.7Ys u0W.Ȥ!/PKUx/xerR,Bd6]6Ɔ
+e7z/M޳^JwNE+!CQ% @U0 \mōrgE  %Zv^t/e<4lVMg=迎Uߊ"..2'=x^4Q(8L&y)-VL"<q>P(dײLÍr+oJ(1zXbn~(Vadd'A9(lbn~&`mX,.IKEȯ>{aAy16kjM#j}[F2rWD7E^)	b)އ߱Cl~5O*PT\RHj= s`=iI!ԙm/IK0^{ (IONA8 PUG0쌉~N`fŊ;rpjߔL\
+?6nxV^T
+(K="?E̟rܲ
+ע--- 	oVOTUU6i BCqoÓd{/2d"w#H'"-tAaZ^Z@5
+u/I\î8IA{| tȠj{{{P i	qzM~+(J;r/xǽX{@Jvs
+|W}Ҳd}!ZF9]Rukǆ&DT4SL?$ӈ[Eut^ضIJGI@
+g洘}?)$'BiJZ6*-zVi+f҇eI΁[EɯnA80%&("TP;;/ ژ	(J
+ s9ӇLl[͙>2ZOv'    IDATZѲ)==իM7r{i	tg^tQa&u+tƏ&QҲt,ۨ-pdM({{s9t(-]Fl?  w[Y(*sފp_sdQGA)c@{rNZ  I -lQ*5+3r.qN։s	m^Ko=	yhף۽<wQ$!	Lo?XN& {4%z(~b3SZ_PՇEYWV|I}@QTV  %,A 8.8*mG=JA݌EQ?O[?V0bd4yz~޻*~
+zOY=z?#["h"~)3DM0ʆRl*K\e Z8D'O2mi#	lؤLpf	:]	7ˏE]	UU浦w+|яF9]SeeW [9(=5;oRHל~)hzYmq1	f]?d>#?Eyw0SQw429L45oUal2`=a=	,~&bx*-vx͚a/D<џXpwo:Fnr}iAA:0@(NkN^.yџE)JJyjB!a`QPx7]XàiZx"8;
+6 szChAv-n0,έ怂愍n;׃\BBtRa?6Wrw DEp2t[>p#p؝ br}[>-%Qq'Q%f\pYׇ\B+Bt(Գ*<R ۴._r}-.rGiJQ2EA\:Ygt*Z#WFBfޒx0xB-<CvH:/:WU*ZȭFWYV,ZF'ٵh0 vChAv-6b;=Ѭvz-+I og~||ػ+<>;ίqDu,( ~ -O/h]~TT!-KלujL4EvЄ{6ƆdȽHGo+BNܞz{Rرu@|&)N^viY^Vm ~C k`0h:#ڧ(,[F%gI|Ng҄KsTȣ`0Dh6-ڶmEmX>twGTmQ7THyY܋ ]$==]e)1.q(aoN\WzɑUFgW'wjѻQcQ~) o(Wo]5@"bXz2dUU5bXx[@Ga}7p3ٵ,VUTאt `:j/.=ӇBX̯Q;XB@ <1₨--<AEs,3<,MOD4#'&~ẼךHU+
+s9v-Mug=7?nmO]U@**D9;7ʡ-hVhr	Ove5_bvZUUb_6r[X5]FT1;f!T\~%,vyjkO=MM0b/r7Q(A`2~ Ay<񨪚[M0(r<qALi 3  n<ϿM L  sxEF𳃬^5vׄ>FxZQ)`o ~\îaQYW q|tJSщX'ti݂j|Xgɠ4-(x/	 ďE99 1n svTmU+GIvmrH`2/KedU
+|~?2WVt6p+0}jc31砳,]\S]FI<L`۔c36Tnw\DגuD\Awi1͏;ߢݴqw|[YfbcAgqFYWB?3qA:+w<KbHw*ѩ̢~rKJ p_s	;a]t #ۈ,ɖ-?L(Jv5XܥHDdBSjv̃ȏw=akХfS%L&SVy<7z.O3֚bUh|"h%e{,=١=  @ `2n"1}A-u$~Ch=桻hT#{LK8~fc30C,,;"
+(uSy0r*- .:n 6M\s9Y	HID͋ % N џU߷#<\î/ûr>͊$&Oqo^
+e] J7}z]mrOWg%N 8.81j%Cp ~CӢ(N ]F~Z%]iO~-rJ/Naلk܋h#E΁-Lnl}	l62}-1xF=₈d>8ϥf$-a l(+̀~lJU! `LRHZeUUud2c~=z23COE3}Lel3Q[ٵ, *[ 731r/g">7ʡr~<^oxjݗ|
+ l;4"k#-x3J\. H?O<pU6T#i's~~:oq}6]%u&fp1I c<ROKrS[*w[,&&c41ȍ&.3%i) Cx7uC=Hk#"ecbL%.:-{	4cO\2v{T-tRǘӌ6b}xˈߢr	hm9ͤӹ\eߖWMᎧ8	އmvX#Gya50?M*]U|-"ŋ"2khE"4|7\yM8ZX,
+ 2}\vT~-_y޲[-uKMai$fE1_W|| ;7?WvHP?I]Zy߱3;J?O=i<;r~A @Zimcߢd}|bEXh_?zZX,
+ԟd]\c_êOŲdۼM%icڝ2VqL;Ź>5A#Oki.+vH+uv=VZ|+I!
+Zv40ϒ0v~ǦHu2<4BfO;";Am[v$-/3"eN3WwE^)kl(#y}3{+vN+G7Y Hϧ;=TvLT| .G-(KjE	:jmIJ݂ѳ("QahY
+=a;ׁ\}װ446mNڈܳ2i&P()fb&qAwD!vChAgp*q0r6s	UFIɫ!z?OneQUq'>Gm yA[)jx"	MiW.AQW燝/{!hP՜*dfG,XKJ"kʞRM|iuev`95n2U;Aԇ\BBrA{X]`H	 l6UU\v-bclAMg@B|}! vѤ!<Qr=fS;r]9._r}[YjEI)YdYuCLJXT3A!ׇВ`ό窧}5IGKT]$-ky \],wx6OYzۥwz47!|7\+T]]ʐSk524֑oŲ~h+D8-o7AL]w"Z>r^tFVOҲN
+aC/NjQˇr	qXѩ(e--K(dDyiYwRzy*-_%ԢAt~l6\ۢ?GeY$*vk.Sa(Jտ!4e0X8r'^{/'}"8᤺:qh||>GY3%^* whQ=Rg%i	yq ~@tƀ5ԳX.iBZ3=K͡\jJ}<Ҳt!t;&#G2/2(EuRQc`cl>z[[~-@q`09pg"W*4ҲD%Ӈ& 8k? @Pڞ*Ǎ\-6{3_B wqoDDh(J%GPUBߺ9/-V X̝Q5$sA{4[G1nxh8/
+ǜfk2dy(Rx}l)޺B[P%igٕ-UX,JJ	edg{q8JKmEYE\͟d@;?-[(rj[NXvƆnWhYゃǂZދtMQTfP|&ߦV-A8~ 6A{U{~p\^~+mdI @]`Xw bE7h*-HLTAlٲBĎFY6@֓VT6Ie\^m6YG&EQ5ƢT4##|fXyU.6[-ѩhv,ڂ@vZ=AZ>V:E#\\Fj揌V^-O-#rn؂س쮻`p (b"[|^d=xΫҤ T7U-
+|=}(-mVd[uSi0,>ع
+uq깰4"fEE>~1Ҳ-n-U$:,iQGZQLCwЇ߱g̋ 2}LyF]x,uw?H<Lօ[FGI~lϹ{5CgPs[LLRZz>- rld4psM5؃?sgoD~U._W;Tg3sm[j6cl603qHiok_SQ'7U_D҂!Sa&Ga5%K\No̭ I!©v}ߢ>*7IxF~;a1; yǂ je+i# ȝz
+hV *	pOem]Tōr
+|jދoe1DllqŁ3uLԏk?$Ǚ\UoLS%|)9X<W=+/˗hA|E_PX%(,ϥ  6{^DSH+e!6|?>OߟfK#BีZE1 ?gdh{?ƣy޲A%)$-"ҟPSeOoٵ,P6Jo{?]?͜NKÖ
+oڻ8:EF=aVެ0')i[UO-(1b8~T$$K+p:Fa[>y U:$*3cӫ%p蘻͉لFPo5]␇;E1TOPd86p	-Ed@E\dkySx<֓Cr]-jdPlar$5^E9`PJpXDKEhiv?A	c31 @cZ}5|7dPW~ŮfBh]?K^]5p}yIZ~M}iQ}"$5ac]"z~kKԾBc10V5Jul(#G8iYi:6p5ǉ儥lM ;7(Ocg5w@^؊RäS#GyuSeXϏ(64KL
+I\QGĜfp$RRH,z_tVT?ƣl˒tPNBz:'"U"%HzQ6&*GI~ͅ7ǚ#5&VBr<PrZbYv_æoVԓ6MgQ]=thj 5޼%iw	ţa;mt#U%Gs_iq듖0ak{h;ɮeqZ5h2 FXvŋlMc"2CV\ ]ϝŭ2y4?ƣxYk~Wku=W=:~E1}:tZzAn1K4t;DCٸJF~ @n5g뷡t+J0rn P(+eٙdYF0SS[FpLA~W@eUN没E(VPmTTegFvUUQ2x+= h.I!9ry$k,ϾFEPѩ$K5אKUժ;hEQt\5&J]	
+ֶZT,P	k>\~
+hǔclE:-a1ڰ}nNс8i~ػmkٲa ~I+bqE^bw+oV*[?WVM!Nvr|rW  $|ٽ  a:XTGoJ&W( ,>_܋a .\ ǥi,>0б*{ {NQ;5lN L&'F/֨6j
+Sz|bk	MaP- wa9a)I!i6].cS`Pm}az[YZe ۆ*VQ7U$BZkFlyOG}KnV'4a-,3Rg\M8;<W=+ .hims p&Y{=>X5[-fjX6[ڇjF 2;\v`Y_6 r%O@Fz o|C	 }!`x`,=rlQWf{g-݄]V4~%(e&d9~BZA7XkeMuֶy=IOO6Zjd[t/x2-iЃZ_#}.qhss  oIDAT	Y۩F阷BѤViոd'Ǔ 2AHgRQaj}>j:Vrjnl\?Z]ZR4iF斢ͣUiAvvv.f92=3MSEQB(5O#[t	5t'#	 O:6p[ 7ぃA R's/q5ƯݼmBH!gKN$ljcN\?
+;OUq!$|NGӘ_C& $9t|V݂!4z}8ۛ*%!%[Y$K-Rb#5B>^Isæ#FI{OKV䍤]dرVRZ°Ю!TX-W|^4!|&,ʎVr^Jz# #|6l֜2T	`5-Zg~%10gZkXz{z۶(o4#5 [J2jďVr6]g32SAu8찒,J.s//'Nm6؋)JNyٌ?<";dˠfjKZt
+g|a0:2Zo _yew5}HTt0椧50<=[U@%&23;{b(.l(p<]BPX(\h.۲]̆φߏ*O[ZSbj$	ieN#u󶎨@;.,_$Kq8!Tip'|*>ըgA[
+ͫiu/7c-q/ǉ2 cKφY[j$5SBx s/Ղ9lb>z.=bbuՖ4";j1=x|ǽ-=B(}7[][ SvE	Âx_T*Ev1k[r%?Gocym	
+썜x}P,M(+Fֆ5Nǧ~=FZ$՛=!ܗAeee"9Atvv")Ѳ,~x̴RT.qiᦀ`3ɉ䲾٭<S<>uu*4x^@PfRW&oMBNoaÝg4BNu^JN[c@XmIwf%kLY=1ɑ$ӛWF/6B's,AjvFc2XBU;IP^鑄P` `\n~ߢt0I
+#빕؝B`LLQ3|b8a{2	㕑pDXj/Z|)˲ڹ
+oQ?Xp-$O8ɝY([.`
+w~)ɒ]2}'zBq[ciR=Li2W!wW~,S=vh0w]/  ^;W-4z^o\[㵑QTek`67'$zx|Ca4z^naCS)#w\5	L2a} 蛦<S*r=Z_ۯ/O,.a[uApjmIѯ{L5ޅn.+/-eWY5äW}n8wA z`EuCtj"%5=޿y
+SNu)C~@QԖ!=N)qsBj}hKmă>s/c'~ϱ,C*jϵ-ҿiD{齌{[(OB(@v˲Q]ס`"M^kP7a@ͮ_E4,DYV{oQ?=PU羹's° ʎŘ.EĆb,7BG(6+yvŮB3a x5+}7--o ~(󊶤Ut7ݢZ=S's\t0jYfL<:Pj"ST_G,"gPaގxDۼ6יpo(
+~LN$CC1 ÉgtXrEXA$&{Kٶס>~Y_F)G{ I26t7Jy#g#p~sva	7]{Y?5N
+t2oQu^O/^8̖tlgA7oސ$ik)1r&bڒΫlJ~,I߼y횷N~VJG@Շa@${
+wic9iFR_iz.ʳ-BS;}ʱltQ=Ԯ짎֖6]B-qJH$pQQrmILMC<=䥘SFz([d V?_&bs[*jڠC|(K~=?ʿ·φ]UhCQ!4g?eحf,BA@g}eH($I(egI4|!onX莎Tsgeі4md
+Owz8ֆw<dGoQ|>f6rz'#@7~|	!bC1X*fb`k|Cc
+YlzUTfGtn}GӴ[s.+jOpf$Y20y0ԴTOW+:v14oKTEh6kkx-_-||!߂ _/o{똿a=ʳR`$#_Eesʹ@DD{Keoۊ/|eY_i9^zYZJe?ѳъZcNmI& Z"W3Ae^<7-͙SwkE-`cT-x204B(W~R߯#8ioDNG22cOiK-˲P&-
+D(~o~RAϲ2!u^_nZ#wr<+OyE AP^ƻiPo.ڒ|Vo#\'
+Ӛh;=:DB@}/MwGs1WZ`If],H.pPr~oQWQz(
+:5FE2qu3Zi`49@=&n$>x_ܜ?n׼uuAnvU=|L-ܝt'Bw_ol(:+<g?UAd!9ٙ<%]7m@),r~oQ?{η)sv]r<)=dZϥj"3Sg*/s/!"YAث<S^^g*&Zح]uFϫ6iYr+Dk)ԇ<+#p7=ni ._<>ukV-0G"7mn26T[`ڎn|icni?pu׉´!._<>uu*`v[T[`l;N6,4s+Wjmaݢ>y<5{)&w|f+4MghyJC`0``vKٙ ZQ    IENDB`
\ No newline at end of file
diff -Naur ns-3.25/src/internet/doc/internet.h ns-3.26/src/internet/doc/internet.h
--- ns-3.25/src/internet/doc/internet.h	2016-10-03 20:57:08.282247363 -0700
+++ ns-3.26/src/internet/doc/internet.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,27 +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 INTERNET_H
-#define INTERNET_H
-
-/**
- * \defgroup internet Internet
- *
- * This section documents the API of the ns-3 internet module. For a generic functional description, please refer to the ns-3 manual.
- */
-
-#endif /* INTERNET_H */
diff -Naur ns-3.25/src/internet/doc/ipv4.rst ns-3.26/src/internet/doc/ipv4.rst
--- ns-3.25/src/internet/doc/ipv4.rst	2016-10-03 20:57:08.283247355 -0700
+++ ns-3.26/src/internet/doc/ipv4.rst	2016-10-03 19:49:01.584388122 -0700
@@ -1,6 +1,117 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
-IPv4 
+.. heading hierarchy:
+   ------------- Chapter
+   ************* Section (#.#)
+   ============= Subsection (#.#.#)
+   ############# Paragraph (no number)
+
+
+IPv4
 ----
 
-*Placeholder chapter*
+Tracing in the IPv4 Stack
+*************************
+
+The internet stack provides a number of trace sources in its various
+protocol implementations.  These trace sources can be hooked using your own
+custom trace code, or you can use our helper functions in some cases to
+arrange for tracing to be enabled.
+
+Tracing in ARP
+==============
+
+ARP provides two trace hooks, one in the cache, and one in the layer three
+protocol.  The trace accessor in the cache is given the name "Drop."  When
+a packet is transmitted over an interface that requires ARP, it is first
+queued for transmission in the ARP cache until the required MAC address is
+resolved.  There are a number of retries that may be done trying to get the
+address, and if the maximum retry count is exceeded the packet in question
+is dropped by ARP.  The single trace hook in the ARP cache is called,
+
+- If an outbound packet is placed in the ARP cache pending address resolution
+  and no resolution can be made within the maximum retry count, the outbound
+  packet is dropped and this trace is fired;
+
+A second trace hook lives in the ARP L3 protocol (also named "Drop") and may
+be called for a  number of reasons.
+
+- If an ARP reply is received for an entry that is not waiting for a reply,
+  the ARP reply packet is dropped and this trace is fired;
+- If an ARP reply is received for a non-existant entry, the ARP reply packet
+  is dropped and this trace is fired;
+- If an ARP cache entry is in the DEAD state (has timed out) and an ARP reply
+  packet is received, the reply packet is dropped and this trace is fired.
+- Each ARP cache entry has a queue of pending packets.  If the size of the
+  queue is exceeded, the outbound packet is dropped and this trace is fired.
+
+Tracing in IPv4
+===============
+
+The IPv4 layer three protocol provides three trace hooks.  These are the
+"Tx" (ns3::Ipv4L3Protocol::m_txTrace), "Rx" (ns3::Ipv4L3Protocol::m_rxTrace)
+and "Drop" (ns3::Ipv4L3Protocol::m_dropTrace) trace sources.
+
+The "Tx" trace is fired in a number of situations, all of which indicate that
+a given packet is about to be sent down to a given ns3::Ipv4Interface.
+
+- In the case of a packet destined for the broadcast address, the
+  Ipv4InterfaceList is iterated and for every interface that is up and can
+  fragment the packet or has a large enough MTU to transmit the packet,
+  the trace is hit.  See ns3::Ipv4L3Protocol::Send.
+
+- In the case of a packet that needs routing, the "Tx" trace may be fired
+  just before a packet is sent to the interface appropriate to the default
+  gateway.  See ns3::Ipv4L3Protocol::SendRealOut.
+
+- Also in the case of a packet that needs routing, the "Tx" trace may be
+  fired just before a packet is sent to the outgoing interface appropriate
+  to the discovered route.  See ns3::Ipv4L3Protocol::SendRealOut.
+
+The "Rx" trace is fired when a packet is passed from the device up to the
+ns3::Ipv4L3Protocol::Receive function.
+
+- In the receive function, the Ipv4InterfaceList is iterated, and if the
+  Ipv4Interface corresponding to the receiving device is fount to be in the
+  UP state, the trace is fired.
+
+The "Drop" trace is fired in any case where the packet is dropped (in both
+the transmit and receive paths).
+
+- In the ns3::Ipv4Interface::Receive function, the packet is dropped and the
+  drop trace is hit if the interface corresponding to the receiving device
+  is in the DOWN state.
+
+- Also in the ns3::Ipv4Interface::Receive function, the packet is dropped and
+  the drop trace is hit if the checksum is found to be bad.
+
+- In ns3::Ipv4L3Protocol::Send, an outgoing packet bound for the broadcast
+  address is dropped and the "Drop" trace is fired if the "don't fragment"
+  bit is set and fragmentation is available and required.
+
+- Also in ns3::Ipv4L3Protocol::Send, an outgoing packet destined for the
+  broadcast address is dropped and the "Drop" trace is hit if fragmentation
+  is not available and is required (MTU < packet size).
+
+- In the case of a broadcast address, an outgoing packet is cloned for each
+  outgoing interface.  If any of the interfaces is in the DOWN state, the
+  "Drop" trace event fires with a reference to the copied packet.
+
+- In the case of a packet requiring a route, an outgoing packet is dropped
+  and the "Drop" trace event fires if no route to the remote host is found.
+
+- In ns3::Ipv4L3Protocol::SendRealOut, an outgoing packet being routed
+  is dropped and the "Drop" trace is fired if the "don't fragment" bit is
+  set and fragmentation is available and required.
+
+- Also in ns3::Ipv4L3Protocol::SendRealOut, an outgoing packet being routed
+  is dropped and the "Drop" trace is hit if fragmentation is not available
+  and is required (MTU < packet size).
+
+- An outgoing packet being routed is dropped and the "Drop" trace event fires
+  if the required Ipv4Interface is in the DOWN state.
+
+- If a packet is being forwarded, and the TTL is exceeded (see
+  ns3::Ipv4L3Protocol::DoForward), the packet is dropped and the "Drop" trace
+  event is fired.
diff -Naur ns-3.25/src/internet/doc/tcp.rst ns-3.26/src/internet/doc/tcp.rst
--- ns-3.25/src/internet/doc/tcp.rst	2016-10-03 20:57:08.285247340 -0700
+++ ns-3.26/src/internet/doc/tcp.rst	2016-10-03 19:49:01.587388100 -0700
@@ -119,8 +119,8 @@
 socket type must be done by twiddling the attribute associated with the
 underlying TcpL4Protocol object.  The easiest way to get at this would be 
 through the attribute configuration system.  In the below example,
-the Node container "n0n1" is accessed
-to get the zeroth element, and a socket is created on this node::
+the Node container "n0n1" is accessed to get the zeroth element, and a socket is
+created on this node::
 
   // Create and bind the socket...
   TypeId tid = TypeId::LookupByName ("ns3::TcpNewReno");
@@ -144,8 +144,530 @@
 
 Once a TCP socket is created, one will want to follow conventional socket logic
 and either connect() and send() (for a TCP client) or bind(), listen(), and
-accept() (for a TCP server). See :ref:`Sockets-APIs` for a review of
-how sockets are used in |ns3|.
+accept() (for a TCP server).
+Please note that applications usually create the sockets they use automatically,
+and so is not straightforward to connect direcly to them using pointers. Please
+refer to the source code of your preferred application to discover how and when
+it creates the socket.
+
+TCP Socket interaction and interface with Application layer
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+In the following there is an analysis on the public interface of the TCP socket,
+and how it can be used to interact with the socket itself. An analysis of the
+callback fired by the socket is also carried out. Please note that, for
+the sake of clarity, we will use the terminology "Sender" and "Receiver" to clearly
+divide the functionality of the socket. However, in TCP these two roles can be
+applied at the same time (i.e. a socket could be a sender and a receiver at the
+same time): our distinction does not lose generality, since the following
+definition can be applied to both sockets in case of full-duplex mode.
+
+----------
+
+**TCP state machine (for commodity use)**
+
+.. _fig-tcp-state-machine:
+
+.. figure:: figures/tcp-state-machine.*
+   :align: center
+
+   TCP State machine
+
+In ns-3 we are fully compliant with the state machine depicted in 
+Figure :ref:`fig-tcp-state-machine`.
+
+----------
+
+**Public interface for receivers (e.g. servers receiving data)**
+
+*Bind()*
+  Bind the socket to an address, or to a general endpoint. A general endpoint
+  is an endpoint with an ephemeral port allocation (that is, a random port
+  allocation) on the 0.0.0.0 IP address. For instance, in current applications,
+  data senders usually binds automatically after a *Connect()* over a random
+  port. Consequently, the connection will start from this random port towards
+  the well-defined port of the receiver. The IP 0.0.0.0 is then translated by
+  lower layers into the real IP of the device.
+
+*Bind6()*
+  Same as *Bind()*, but for IPv6.
+
+*BindToNetDevice()*
+  Bind the socket to the specified NetDevice, creating a general endpoint.
+
+*Listen()*
+  Listen on the endpoint for an incoming connection. Please note that this
+  function can be called only in the TCP CLOSED state, and transit in the
+  LISTEN state. When an incoming request for connection is detected (i.e. the
+  other peer invoked *Connect()*) the application will be signaled with the
+  callback *NotifyConnectionRequest* (set in *SetAcceptCallback()* beforehand).
+  If the connection is accepted (the default behavior, when the associated
+  callback is a null one) the Socket will fork itself, i.e. a new socket is
+  created to handle the incoming data/connection, in the state SYN_RCVD. Please
+  note that this newly created socket is not connected anymore to the callbacks
+  on the "father" socket (e.g. DataSent, Recv); the pointer of the newly
+  created socket is provided in the Callback *NotifyNewConnectionCreated* (set
+  beforehand in *SetAcceptCallback*), and should be used to connect new
+  callbacks to interesting events (e.g. Recv callback). After receiving the ACK
+  of the SYN-ACK, the socket will set the congestion control, move into
+  ESTABLISHED state, and then notify the application with
+  *NotifyNewConnectionCreated*.
+
+*ShutdownSend()*
+  Signal a termination of send, or in other words revents data from being added
+  to the buffer. After this call, if buffer is already empty, the socket
+  will send a FIN, otherwise FIN will go when buffer empties. Please note
+  that this is useful only for modeling "Sink" applications. If you have
+  data to transmit, please refer to the *Send()* / *Close()* combination of
+  API.
+
+*GetRxAvailable()*
+  Get the amount of data that could be returned by the Socket in one or multiple
+  call to Recv or RecvFrom. Please use the Attribute system to configure the
+  maximum available space on the receiver buffer (property "RcvBufSize").
+
+*Recv()*
+  Grab data from the TCP socket. Please remember that TCP is a stream socket,
+  and it is allowed to concatenate multiple packets into bigger ones. If no data
+  is present (i.e. *GetRxAvailable* returns 0) an empty packet is returned.
+  Set the callback *RecvCallback* through *SetRecvCallback()* in order to have
+  the application automatically notified when some data is ready to be read.
+  It's important to connect that callback to the newly created socket in case
+  of forks.
+
+*RecvFrom()*
+  Same as Recv, but with the source address as parameter.
+
+-------------------
+
+**Public interface for senders (e.g. clients uploading data)**
+
+*Connect()*
+  Set the remote endpoint, and try to connect to it. The local endpoint should
+  be set before this call, or otherwise an ephemeral one will be created. The
+  TCP then will be in the SYN_SENT state. If a SYN-ACK is received, the TCP will
+  setup the congestion control, and then call the callback
+  *ConnectionSucceeded*.
+
+*GetTxAvailable()*
+  Return the amount of data that can be stored in the TCP Tx buffer. Set this
+  property through the Attribute system ("SndBufSize").
+
+*Send()*
+  Send the data into the TCP Tx buffer. From there, the TCP rules will decide
+  if, and when, this data will be transmitted. Please note that, if the tx
+  buffer has enough data to fill the congestion (or the receiver) window, dynamically
+  varying the rate at which data is injected in the TCP buffer does not have any
+  noticeable effect on the amount of data transmitted on the wire, that will
+  continue to be decided by the TCP rules.
+
+*SendTo()*
+  Same as *Send()*.
+
+*Close()*
+  Terminate the local side of the connection, by sending a FIN (after all data
+  in the tx buffer has been transmitted). This does not prevent the socket in
+  receiving data, and employing retransmit mechanism if losses are detected. If
+  the application calls *Close()* with unread data in its rx buffer, the socket
+  will send a reset. If the socket is in the state SYN_SENT, CLOSING, LISTEN or
+  LAST_ACK, after that call the application will be notified with
+  *NotifyNormalClose()*. In all the other cases, the notification is delayed
+  (see *NotifyNormalClose()*).
+
+-----------------------------------------
+
+**Public callbacks**
+
+These callbacks are called by the TCP socket to notify the application of
+interesting events. We will refer to these with the protected name used in
+socket.h, but we will provide the API function to set the pointers to these
+callback as well.
+
+*NotifyConnectionSucceeded*: *SetConnectCallback*, 1st argument
+  Called in the SYN_SENT state, before moving to ESTABLISHED. In other words, we
+  have sent the SYN, and we received the SYN-ACK: the socket prepare the
+  sequence numbers, send the ACK for the SYN-ACK, try to send out more data (in
+  another segment) and then invoke this callback. After this callback, it
+  invokes the NotifySend callback.
+
+*NotifyConnectionFailed*: *SetConnectCallback*, 2nd argument
+  Called after the SYN retransmission count goes to 0. SYN packet is lost
+  multiple time, and the socket give up.
+
+*NotifyNormalClose*: *SetCloseCallbacks*, 1st argument
+  A normal close is invoked. A rare case is when we receive an RST segment (or a
+  segment with bad flags) in normal states. All other cases are:
+  - The application tries to *Connect()* over an already connected socket
+  - Received an ACK for the FIN sent, with or without the FIN bit set (we are in LAST_ACK)
+  - The socket reaches the maximum amount of retries in retransmitting the SYN (*)
+  - We receive a timeout in the LAST_ACK state
+  - After 2*Maximum Segment Lifetime seconds passed since the socket entered the TIME_WAIT state.
+
+*NotifyErrorClose*: *SetCloseCallbacks*, 2nd argument
+  Invoked when we send an RST segment (for whatever reason) or we reached the
+  maximum amount of data retries.
+
+*NotifyConnectionRequest*: *SetAcceptCallback*, 1st argument
+  Invoked in the LISTEN state, when we receive a SYN. The return value indicates
+  if the socket should accept the connection (return true) or should ignore it
+  (return false).
+
+*NotifyNewConnectionCreated*: *SetAcceptCallback*, 2nd argument
+  Invoked when from SYN_RCVD the socket passes to ESTABLISHED, and after setting
+  up the congestion control, the sequence numbers, and processed the incoming
+  ACK. If there is some space in the buffer, *NotifySend* is called shortly
+  after this callback. The Socket pointer, passed with this callback, is the
+  newly created socket, after a Fork().
+
+*NotifyDataSent*: *SetDataSentCallback*
+  The Socket notifies the application that some bytes has been transmitted on
+  the IP level. These bytes could still be lost in the node (traffic control
+  layer) or in the network.
+
+*NotifySend*: *SetSendCallback*
+  Invoked if there is some space in the tx buffer when entering the ESTABLISHED
+  state (e.g. after the ACK for SYN-ACK is received), after the connection
+  succeeds (e.g. after the SYN-ACK is received) and after each new ack (i.e.
+  that advances SND.UNA).
+
+*NotifyDataRecv*: *SetRecvCallback*
+  Called when in the receiver buffere there are in-order bytes, and when in
+  FIN_WAIT_1 or FIN_WAIT_2 the socket receive a in-sequence FIN (that can carry
+  data).
+
+
+Congestion Control Algorithms
++++++++++++++++++++++++++++++
+Here follows a list of supported TCP congestion control algorithms. For an
+academic peer-reviewed paper on these congestion control algorithms, see
+http://dl.acm.org/citation.cfm?id=2756518 .
+
+New Reno
+^^^^^^^^
+New Reno algorithm introduces partial ACKs inside the well-established Reno
+algorithm. This and other modifications are described in RFC 6582. We have two
+possible congestion window increment strategy: slow start and congestion
+avoidance. Taken from RFC 5681:
+
+  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 Equation :eq:`newrenocongavoid`,
+  where N is the number of previously unacknowledged bytes acknowledged
+  in the incoming ACK.
+
+.. math:: cwnd += min (N, SMSS)
+   :label: newrenocongavoid
+
+During congestion avoidance, cwnd is incremented by roughly 1 full-sized
+segment per round-trip time (RTT), and for each congestion event, the slow
+start threshold is halved.
+
+High Speed
+^^^^^^^^^^
+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.
+
+Mathematically:
+
+.. math::  cWnd = cWnd + \frac{a(cWnd)}{cWnd}
+
+The function a() is calculated using a fixed RTT the value 100 ms (the
+lookup table for this function is taken from RFC 3649). For each congestion
+event, the slow start threshold is decreased by a value that depends on the
+size of the slow start threshold itself. Then, the congestion window is set
+to such value.
+
+.. math::   cWnd = (1-b(cWnd)) \cdot cWnd
+
+The lookup table for the function b() is taken from the same RFC.
+More informations at: http://dl.acm.org/citation.cfm?id=2756518
+
+Hybla
+^^^^^
+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 informations at: http://dl.acm.org/citation.cfm?id=2756518
+
+Westwood
+^^^^^^^^
+Westwood and Westwood+ employ the AIAD (Additive Increase/Adaptive Decrease)·
+congestion control paradigm. When a congestion episode happens,·
+instead of halving the cwnd, these protocols try to estimate the network's
+bandwidth and use the estimated value to adjust the cwnd.·
+While Westwood performs the bandwidth sampling every ACK reception,·
+Westwood+ samples the bandwidth every RTT.
+
+More informations at: http://dl.acm.org/citation.cfm?id=381704 and
+http://dl.acm.org/citation.cfm?id=2512757
+
+Vegas
+^^^^^
+TCP Vegas is a pure delay-based congestion control algorithm implementing a
+proactive scheme that tries to prevent packet drops by maintaining a small
+backlog at the bottleneck queue. Vegas continuously samples the RTT and computes
+the actual throughput a connection achieves using Equation (1) and compares it
+with the expected throughput calculated in Equation (2). The difference between
+these 2 sending rates in Equation (3) reflects the amount of extra packets being
+queued at the bottleneck.
+
+.. math::
+
+   actual &= \frac{cWnd}{RTT}        \\
+   expected &= \frac{cWnd}{BaseRTT}  \\
+   diff &= expected - actual
+
+To avoid congestion, Vegas linearly increases/decreases its congestion window
+to ensure the diff value fall between the two predefined thresholds, alpha and
+beta. diff and another threshold, gamma, are used to determine when Vegas
+should change from its slow-start mode to linear increase/decrease mode.
+Following the implementation of Vegas in Linux, we use 2, 4, and 1 as the
+default values of alpha, beta, and gamma, respectively, but they can be
+modified through the Attribute system.
+
+More informations at: http://dx.doi.org/10.1109/49.464716
+
+Scalable
+^^^^^^^^
+Scalable improves TCP performance to better utilize the available bandwidth of
+a highspeed wide area network by altering NewReno congestion window adjustment
+algorithm.  When congestion has not been detected, for each ACK received in an
+RTT, Scalable increases its cwnd per:
+
+.. math::  cwnd = cwnd + 0.01
+
+Following Linux implementation of Scalable, we use 50 instead of 100 to account
+for delayed ACK.
+
+On the first detection of congestion in a given RTT, cwnd is reduced based on
+the following equation:
+
+.. math::  cwnd = cwnd - ceil(0.125 \cdot cwnd)
+
+More informations at: http://dl.acm.org/citation.cfm?id=956989
+
+Veno
+^^^^
+
+TCP Veno enhances Reno algorithm for more effectively dealing with random
+packet loss in wireless access networks by employing Vegas's method in
+estimating the backlog at the bottleneck queue to distinguish between
+congestive and non-congestive states.
+
+The backlog (the number of packets accumulated at the bottleneck queue) is
+calculated using Equation (1):
+
+.. math::
+   N &= Actual \cdot (RTT - BaseRTT) \\
+     &= Diff \cdot BaseRTT
+
+where:
+
+.. math::
+   Diff &= Expected - Actual \\
+        &= \frac{cWnd}{BaseRTT} - \frac{cWnd}{RTT}
+
+Veno makes decision on cwnd modification based on the calculated N and its
+predefined threshold beta.
+
+Specifically, it refines the additive increase algorithm of Reno so that the
+connection can stay longer in the stable state by incrementing cwnd by
+1/cwnd for every other new ACK received after the available bandwidth has
+been fully utilized, i.e. when N exceeds beta.  Otherwise, Veno increases
+its cwnd by 1/cwnd upon every new ACK receipt as in Reno.
+
+In the multiplicative decrease algorithm, when Veno is in the non-congestive
+state, i.e. when N is less than beta, Veno decrements its cwnd by only 1/5
+because the loss encountered is more likely a corruption-based loss than a
+congestion-based.  Only when N is greater than beta, Veno halves its sending
+rate as in Reno.
+
+More informations at: http://dx.doi.org/10.1109/JSAC.2002.807336
+
+Bic
+^^^
+
+In TCP Bic the congestion control problem is viewed as a search
+problem. Taking as a starting point the current window value
+and as a target point the last maximum window value
+(i.e. the cWnd value just before the loss event) a binary search
+technique can be used to update the cWnd value at the midpoint between
+the two, directly or using an additive increase strategy if the distance from
+the current window is too large.
+
+This way, assuming a no-loss period, the congestion window logarithmically
+approaches the maximum value of cWnd until the difference between it and cWnd
+falls below a preset threshold. After reaching such a value (or the maximum
+window is unknown, i.e. the binary search does not start at all) the algorithm
+switches to probing the new maximum window with a 'slow start' strategy.
+
+If a loss occur in either these phases, the current window (before the loss)
+can be treated as the new maximum, and the reduced (with a multiplicative
+decrease factor Beta) window size can be used as the new minimum.
+
+More informations at: http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=1354672
+
+YeAH
+^^^^
+
+YeAH-TCP (Yet Another HighSpeed TCP) is a heuristic designed to balance various
+requirements of a state-of-the-art congestion control algorithm:
+
+
+1. fully exploit the link capacity of high BDP networks while inducing a small number of congestion events
+2. compete friendly with Reno flows
+3. achieve intra and RTT fairness
+4. robust to random losses
+5. achieve high performance regardless of buffer size
+
+YeAH operates between 2 modes: Fast and Slow mode.  In the Fast mode when the queue
+occupancy is small and the network congestion level is low, YeAH increments
+its congestion window according to the aggressive STCP rule.  When the number of packets
+in the queue grows beyond a threshold and the network congestion level is high, YeAH enters
+its Slow mode, acting as Reno with a decongestion algorithm.  YeAH employs Vegas' mechanism
+for calculating the backlog as in Equation :eq:`q_yeah`.  The estimation of the network congestion
+level is shown in Equation :eq:`l_yeah`.
+
+.. math::  Q = (RTT - BaseRTT) \cdot \frac{cWnd}{RTT}
+   :label: q_yeah
+
+.. math::  L = \frac{RTT - BaseRTT}{BaseRTT}
+   :label: l_yeah
+
+To ensure TCP friendliness, YeAH also implements an algorithm to detect the presence of legacy
+Reno flows.  Upon the receipt of 3 duplicate ACKs, YeAH decreases its slow start threshold
+according to Equation (3) if it's not competing with Reno flows.  Otherwise,  the ssthresh is
+halved as in Reno:
+
+.. math::  ssthresh = min(max(\frac{cWnd}{8}, Q), \frac{cWnd}{2})
+
+More information: http://www.csc.lsu.edu/~sjpark/cs7601/4-YeAH_TCP.pdf
+
+Illinois
+^^^^^^^^
+
+TCP Illinois is a hybrid congestion control algorithm designed for
+high-speed networks.  Illinois implements a Concave-AIMD (or C-AIMD)
+algorithm that uses packet loss as the primary congestion signal to
+determine the direction of window update and queueing delay as the
+secondary congestion signal to determine the amount of change.
+
+The additive increase and multiplicative decrease factors (denoted as
+alpha and beta, respectively) are functions of the current average queueing
+delay da as shown in Equations (1) and (2).  To improve the protocol
+robustness against sudden fluctuations in its delay sampling,
+Illinois allows the increment of alpha to alphaMax
+only if da stays below d1 for a some (theta) amount of time.
+
+.. math::
+   alpha &=
+   \begin{cases}
+      \quad alphaMax              & \quad \text{if } da <= d1 \\
+      \quad k1 / (k2 + da)        & \quad \text{otherwise} \\
+   \end{cases} \\
+   \\
+   beta &=
+   \begin{cases}
+      \quad betaMin               & \quad \text{if } da <= d2 \\
+      \quad k3 + k4 \, da         & \quad \text{if } d2 < da < d3 \\
+      \quad betaMax               & \quad \text{otherwise}
+   \end{cases}
+			     
+where the calculations of k1, k2, k3, and k4 are shown in the following:
+
+.. math::
+
+   k1 &= \frac{(dm - d1) \cdot alphaMin \cdot alphaMax}{alphaMax - alphaMin} \\
+   \\
+   k2 &= \frac{(dm - d1) \cdot alphaMin}{alphaMax - alphaMin} - d1 \\
+   \\
+   k3 &= \frac{alphaMin \cdot d3 - alphaMax \cdot d2}{d3 - d2} \\
+   \\
+   k4 &= \frac{alphaMax - alphaMin}{d3 - d2}
+
+Other parameters include da (the current average queueing delay), and
+Ta (the average RTT, calculated as sumRtt / cntRtt in the implementation) and
+Tmin (baseRtt in the implementation) which is the minimum RTT ever seen.
+dm is the maximum (average) queueing delay, and Tmax (maxRtt in the
+implementation) is the maximum RTT ever seen.
+
+.. math::
+
+   da &= Ta - Tmin
+
+   dm &= Tmax - Tmin
+
+   d_i &= eta_i \cdot dm
+
+Illinois only executes its adaptation of alpha and beta when cwnd exceeds a threshold
+called winThresh. Otherwise, it sets alpha and beta to the base values of 1 and 0.5,
+respectively.
+
+Following the implementation of Illinois in the Linux kernel, we use the following
+default parameter settings:
+
+* alphaMin = 0.3      (0.1 in the Illinois paper)
+* alphaMax = 10.0
+* betaMin = 0.125
+* betaMax = 0.5
+* winThresh = 15      (10 in the Illinois paper)
+* theta = 5
+* eta1 = 0.01
+* eta2 = 0.1
+* eta3 = 0.8
+
+More information: http://www.doi.org/10.1145/1190095.1190166
+
+H-TCP
+^^^^^
+
+H-TCP has been designed for high BDP (Bandwidth-Delay Product) paths. It is 
+a dual mode protocol. In normal conditions, it works like traditional TCP 
+with the same rate of increment and decrement for the congestion window. 
+However, in high BDP networks, when it finds no congestion on the path 
+after ``deltal`` seconds, it increases the window size based on the alpha 
+function in the following:
+
+.. math::
+
+        alpha(delta)=1+10(delta-deltal)+0.5(delta-deltal)^2 
+
+where ``deltal`` is a threshold in seconds for switching between the modes and 
+``delta`` is the elapsed time from the last congestion. During congestion, 
+it reduces the window size by multiplying by beta function provided 
+in the reference paper.  The calculated throughput between the last two 
+consecutive congestion events is considered for beta calculation. 
+
+The transport ``TcpHtcp`` can be selected in the program 
+``examples/tcp/tcp-variants/comparison`` to perform an experiment with H-TCP,
+although it is useful to increase the bandwidth in this example (e.g.
+to 20 Mb/s) to create a higher BDP link, such as
+
+::
+
+  ./waf --run "tcp-variants-comparison --transport_prot=TcpHtcp --bandwidth=20Mbps --duration=10"
+
+More information (paper):  http://www.hamilton.ie/net/htcp3.pdf
+
+More information (Internet Draft):  https://tools.ietf.org/html/draft-leith-tcp-htcp-06
 
 Validation
 ++++++++++
@@ -164,7 +686,14 @@
 * **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-htcp-test:** Unit tests on the H-TCP congestion control
 * **tcp-hybla-test:** Unit tests on the Hybla congestion control
+* **tcp-vegas-test:** Unit tests on the Vegas congestion control
+* **tcp-veno-test:** Unit tests on the Veno congestion control
+* **tcp-scalable-test:** Unit tests on the Scalable congestion control
+* **tcp-bic-test:** Unit tests on the BIC congestion control
+* **tcp-yeah-test:** Unit tests on the YeAH congestion control
+* **tcp-illinois-test:** Unit tests on the Illinois 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
diff -Naur ns-3.25/src/internet/examples/main-simple.cc ns-3.26/src/internet/examples/main-simple.cc
--- ns-3.25/src/internet/examples/main-simple.cc	2016-10-03 20:57:08.286247332 -0700
+++ ns-3.26/src/internet/examples/main-simple.cc	2016-10-03 19:49:01.588388093 -0700
@@ -87,6 +87,9 @@
 
 int main (int argc, char *argv[])
 {
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
   RunSimulation ();
 
   return 0;
diff -Naur ns-3.25/src/internet/helper/internet-stack-helper.cc ns-3.26/src/internet/helper/internet-stack-helper.cc
--- ns-3.25/src/internet/helper/internet-stack-helper.cc	2016-10-03 20:57:08.287247324 -0700
+++ ns-3.26/src/internet/helper/internet-stack-helper.cc	2016-10-03 19:49:01.589388085 -0700
@@ -19,135 +19,6 @@
  * Author: Faker Moatamri <faker.moatamri@sophia.inria.fr>
  */
 
-/**
- * \ingroup internet
- * \defgroup internetStackModel Internet Stack Model
- *
- * \section internetStackTracingModel Tracing in the Internet Stack
- *
- * The internet stack provides a number of trace sources in its various
- * protocol implementations.  These trace sources can be hooked using your own 
- * custom trace code, or you can use our helper functions in some cases to 
- * arrange for tracing to be enabled.
- *
- * \subsection internetStackArpTracingModel Tracing in ARP
- *
- * ARP provides two trace hooks, one in the cache, and one in the layer three
- * protocol.  The trace accessor in the cache is given the name "Drop."  When
- * a packet is transmitted over an interface that requires ARP, it is first
- * queued for transmission in the ARP cache until the required MAC address is
- * resolved.  There are a number of retries that may be done trying to get the 
- * address, and if the maximum retry count is exceeded the packet in question 
- * is dropped by ARP.  The single trace hook in the ARP cache is called,
- *
- * - If an outbound packet is placed in the ARP cache pending address resolution
- *   and no resolution can be made within the maximum retry count, the outbound 
- *   packet is dropped and this trace is fired;
- *
- * A second trace hook lives in the ARP L3 protocol (also named "Drop") and may 
- * be called for a  number of reasons.
- *
- * - If an ARP reply is received for an entry that is not waiting for a reply,
- *   the ARP reply packet is dropped and this trace is fired;
- * - If an ARP reply is received for a non-existant entry, the ARP reply packet 
- *   is dropped and this trace is fired;
- * - If an ARP cache entry is in the DEAD state (has timed out) and an ARP reply
- *   packet is received, the reply packet is dropped and this trace is fired.
- * - Each ARP cache entry has a queue of pending packets.  If the size of the
- *   queue is exceeded, the outbound packet is dropped and this trace is fired.
- *
- * \subsection internetStackIpv4TracingModel Tracing in IPv4
- *
- * The IPv4 layer three protocol provides three trace hooks.  These are the 
- * "Tx" (ns3::Ipv4L3Protocol::m_txTrace), "Rx" (ns3::Ipv4L3Protocol::m_rxTrace) 
- * and "Drop" (ns3::Ipv4L3Protocol::m_dropTrace) trace sources.
- *
- * The "Tx" trace is fired in a number of situations, all of which indicate that
- * a given packet is about to be sent down to a given ns3::Ipv4Interface.
- *
- * - In the case of a packet destined for the broadcast address, the 
- *   Ipv4InterfaceList is iterated and for every interface that is up and can
- *   fragment the packet or has a large enough MTU to transmit the packet,
- *   the trace is hit.  See ns3::Ipv4L3Protocol::Send.
- *
- * - In the case of a packet that needs routing, the "Tx" trace may be fired
- *   just before a packet is sent to the interface appropriate to the default 
- *   gateway.  See ns3::Ipv4L3Protocol::SendRealOut.
- *
- * - Also in the case of a packet that needs routing, the "Tx" trace may be 
- *   fired just before a packet is sent to the outgoing interface appropriate
- *   to the discovered route.  See ns3::Ipv4L3Protocol::SendRealOut.
- *
- * The "Rx" trace is fired when a packet is passed from the device up to the
- * ns3::Ipv4L3Protocol::Receive function.
- *
- * - In the receive function, the Ipv4InterfaceList is iterated, and if the
- *   Ipv4Interface corresponding to the receiving device is fount to be in the
- *   UP state, the trace is fired.
- *
- * The "Drop" trace is fired in any case where the packet is dropped (in both
- * the transmit and receive paths).
- *
- * - In the ns3::Ipv4Interface::Receive function, the packet is dropped and the
- *   drop trace is hit if the interface corresponding to the receiving device
- *   is in the DOWN state.
- *
- * - Also in the ns3::Ipv4Interface::Receive function, the packet is dropped and
- *   the drop trace is hit if the checksum is found to be bad.
- *
- * - In ns3::Ipv4L3Protocol::Send, an outgoing packet bound for the broadcast
- *   address is dropped and the "Drop" trace is fired if the "don't fragement"
- *   bit is set and fragmentation is available and required.
- *
- * - Also in ns3::Ipv4L3Protocol::Send, an outgoing packet destined for the 
- *   broadcast address is dropped and the "Drop" trace is hit if fragmentation
- *   is not available and is required (MTU < packet size).
- *
- * - In the case of a broadcast address, an outgoing packet is cloned for each
- *   outgoing interface.  If any of the interfaces is in the DOWN state, the 
- *   "Drop" trace event fires with a reference to the copied packet.
- *
- * - In the case of a packet requiring a route, an outgoing packet is dropped
- *   and the "Drop" trace event fires if no route to the remote host is found.
- *
- * - In ns3::Ipv4L3Protocol::SendRealOut, an outgoing packet being routed
- *   is dropped and the "Drop" trace is fired if the "don't fragement" bit is 
- *   set and fragmentation is available and required.
- *
- * - Also in ns3::Ipv4L3Protocol::SendRealOut, an outgoing packet being routed
- *   is dropped and the "Drop" trace is hit if fragmentation is not available 
- *   and is required (MTU < packet size).
- *
- * - An outgoing packet being routed is dropped and the "Drop" trace event fires
- *   if the required Ipv4Interface is in the DOWN state.
- *
- * - If a packet is being forwarded, and the TTL is exceeded (see
- *   ns3::Ipv4L3Protocol::DoForward), the packet is dropped and the "Drop" trace 
- *   event is fired.
- *
- * \subsection internetStackNs3TCPTracingModel Tracing in ns-3 TCP
- *
- * There is currently one trace source in the ns-3 TCP implementation named
- * "CongestionWindow" (see ns3::TcpSocketImpl::m_cWnd).  This is set in a number
- * of places (see file tcp-socket-impl.cc) whenever the value of the congestion
- * window is changed.
- *
- * \subsection internetStackNscTCPTracingModel Tracing in NSC TCP
- *
- * There is currently one trace source in the Network Simulation Cradle TCP 
- * implementation named "CongestionWindow" (see ns3::NscTcpSocketImpl::m_cWnd).
- * This is set in a number of places (see file nsc-tcp-socket-impl.cc) when 
- * the value of the cogestion window is initially set.  Note that this is not
- * instrumented from the underlying TCP implementaion.
- *
- * \subsection internetStackNs3UdpTracingModel Tracing in ns-3 UDP
- *
- * There is currently one trace source in the ns-3 UDP implementation named
- * "Drop" (see ns3::UdpSocketImpl::m_dropTrace).  This is set when a packet
- * is received in ns3::UdpSocketImpl::ForwardUp and the receive buffer cannot
- * accomodate the encapsulated data.
- */
-
 #include "ns3/assert.h"
 #include "ns3/log.h"
 #include "ns3/object.h"
diff -Naur ns-3.25/src/internet/helper/internet-stack-helper.h ns-3.26/src/internet/helper/internet-stack-helper.h
--- ns-3.25/src/internet/helper/internet-stack-helper.h	2016-10-03 20:57:08.288247316 -0700
+++ ns-3.26/src/internet/helper/internet-stack-helper.h	2016-10-03 19:49:01.589388085 -0700
@@ -37,6 +37,24 @@
 class Ipv6RoutingHelper;
 
 /**
+ * \defgroup internet Internet
+ *
+ * This section documents the API of the ns-3 internet module. For a generic functional description, please refer to the ns-3 manual.
+ */
+
+/**
+ * \ingroup internet
+ * \defgroup ipv4Helpers IPv4 Helper classes
+ */
+
+/**
+ * \ingroup internet
+ * \defgroup ipv6Helpers IPv6 Helper classes
+ */
+
+/**
+ * \ingroup internet
+ *
  * \brief aggregate IP/TCP/UDP functionality to existing Nodes.
  *
  * This helper enables pcap and ascii tracing of events in the internet stack
@@ -56,10 +74,14 @@
  *  - ns3::ArpL3Protocol
  *  - ns3::Ipv4L3Protocol
  *  - ns3::Icmpv4L4Protocol
+ *  - ns3::Ipv6L3Protocol
+ *  - ns3::Icmpv6L4Protocol
  *  - ns3::UdpL4Protocol
+ *  - ns3::TrafficControlLayer
  *  - a TCP based on the TCP factory provided
  *  - a PacketSocketFactory
- *  - Ipv4 routing (a list routing object and a static routing object)
+ *  - Ipv4 routing (a list routing object, a global routing object, and a static routing object)
+ *  - Ipv6 routing (a static routing object)
  */
 class InternetStackHelper : public PcapHelperForIpv4, public PcapHelperForIpv6, 
                             public AsciiTraceHelperForIpv4, public AsciiTraceHelperForIpv6
diff -Naur ns-3.25/src/internet/helper/internet-trace-helper.h ns-3.26/src/internet/helper/internet-trace-helper.h
--- ns-3.25/src/internet/helper/internet-trace-helper.h	2016-10-03 20:57:08.288247316 -0700
+++ ns-3.26/src/internet/helper/internet-trace-helper.h	2016-10-03 19:49:01.590388078 -0700
@@ -29,6 +29,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup ipv4Helpers
+ *
  * @brief Base class providing common user-level pcap operations for helpers
  * representing IPv4 protocols .
  */
@@ -120,6 +122,8 @@
 };
 
 /**
+ * \ingroup ipv4Helpers
+ *
  * @brief Base class providing common user-level ascii trace operations for 
  * helpers representing IPv4 protocols .
  */
@@ -385,6 +389,8 @@
 };
 
 /**
+ * \ingroup ipv6Helpers
+ *
  * @brief Base class providing common user-level pcap operations for helpers
  * representing IPv6 protocols .
  */
@@ -475,6 +481,8 @@
 };
 
 /**
+ * \ingroup ipv6Helpers
+ *
  * @brief Base class providing common user-level ascii trace operations for
  * helpers representing IPv6 protocols .
  */
diff -Naur ns-3.25/src/internet/helper/ipv4-address-helper.h ns-3.26/src/internet/helper/ipv4-address-helper.h
--- ns-3.25/src/internet/helper/ipv4-address-helper.h	2016-10-03 20:57:08.289247308 -0700
+++ ns-3.26/src/internet/helper/ipv4-address-helper.h	2016-10-03 19:49:01.591388070 -0700
@@ -26,6 +26,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup ipv4Helpers
+ *
  * @brief A helper class to make life easier while doing simple IPv4 address
  * assignment in scripts.
  *
diff -Naur ns-3.25/src/internet/helper/ipv4-global-routing-helper.h ns-3.26/src/internet/helper/ipv4-global-routing-helper.h
--- ns-3.25/src/internet/helper/ipv4-global-routing-helper.h	2016-10-03 20:57:08.290247301 -0700
+++ ns-3.26/src/internet/helper/ipv4-global-routing-helper.h	2016-10-03 19:49:01.592388063 -0700
@@ -26,6 +26,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup ipv4Helpers
+ *
  * \brief Helper class that adds ns3::Ipv4GlobalRouting objects
  */
 class Ipv4GlobalRoutingHelper  : public Ipv4RoutingHelper
diff -Naur ns-3.25/src/internet/helper/ipv4-interface-container.h ns-3.26/src/internet/helper/ipv4-interface-container.h
--- ns-3.25/src/internet/helper/ipv4-interface-container.h	2016-10-03 20:57:08.291247293 -0700
+++ ns-3.26/src/internet/helper/ipv4-interface-container.h	2016-10-03 19:49:01.593388055 -0700
@@ -29,6 +29,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup ipv4
+ *
  * \brief holds a vector of std::pair of Ptr<Ipv4> and interface index.
  *
  * Typically ns-3 Ipv4Interfaces are installed on devices using an Ipv4 address
diff -Naur ns-3.25/src/internet/helper/ipv4-list-routing-helper.h ns-3.26/src/internet/helper/ipv4-list-routing-helper.h
--- ns-3.25/src/internet/helper/ipv4-list-routing-helper.h	2016-10-03 20:57:08.291247293 -0700
+++ ns-3.26/src/internet/helper/ipv4-list-routing-helper.h	2016-10-03 19:49:01.593388055 -0700
@@ -27,6 +27,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup ipv4Helpers
+ *
  * \brief Helper class that adds ns3::Ipv4ListRouting objects
  *
  * This class is expected to be used in conjunction with 
diff -Naur ns-3.25/src/internet/helper/ipv4-routing-helper.h ns-3.26/src/internet/helper/ipv4-routing-helper.h
--- ns-3.25/src/internet/helper/ipv4-routing-helper.h	2016-10-03 20:57:08.292247285 -0700
+++ ns-3.26/src/internet/helper/ipv4-routing-helper.h	2016-10-03 19:49:01.594388048 -0700
@@ -32,6 +32,8 @@
 class Node;
 
 /**
+ * \ingroup ipv4Helpers
+ *
  * \brief a factory to create ns3::Ipv4RoutingProtocol objects
  *
  * For each new routing protocol created as a subclass of 
diff -Naur ns-3.25/src/internet/helper/ipv4-static-routing-helper.h ns-3.26/src/internet/helper/ipv4-static-routing-helper.h
--- ns-3.25/src/internet/helper/ipv4-static-routing-helper.h	2016-10-03 20:57:08.293247277 -0700
+++ ns-3.26/src/internet/helper/ipv4-static-routing-helper.h	2016-10-03 19:49:01.595388040 -0700
@@ -32,6 +32,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup ipv4Helpers
+ *
  * \brief Helper class that adds ns3::Ipv4StaticRouting objects
  *
  * This class is expected to be used in conjunction with 
diff -Naur ns-3.25/src/internet/helper/ipv6-address-helper.h ns-3.26/src/internet/helper/ipv6-address-helper.h
--- ns-3.25/src/internet/helper/ipv6-address-helper.h	2016-10-03 20:57:08.294247269 -0700
+++ ns-3.26/src/internet/helper/ipv6-address-helper.h	2016-10-03 19:49:01.596388033 -0700
@@ -31,7 +31,8 @@
 namespace ns3 {
 
 /**
- * \class Ipv6AddressHelper
+ * \ingroup ipv6Helpers
+ *
  * \brief Helper class to auto-assign global IPv6 unicast addresses
  *
  * Assign global unicast IPv6 addresses based on \RFC{4291} definition.
diff -Naur ns-3.25/src/internet/helper/ipv6-interface-container.h ns-3.26/src/internet/helper/ipv6-interface-container.h
--- ns-3.25/src/internet/helper/ipv6-interface-container.h	2016-10-03 20:57:08.294247269 -0700
+++ ns-3.26/src/internet/helper/ipv6-interface-container.h	2016-10-03 19:49:01.596388033 -0700
@@ -34,7 +34,8 @@
 {
 
 /**
- * \class Ipv6InterfaceContainer
+ * \ingroup ipv6
+ *
  * \brief Keep track of a set of IPv6 interfaces.
  */
 class Ipv6InterfaceContainer
diff -Naur ns-3.25/src/internet/helper/ipv6-list-routing-helper.h ns-3.26/src/internet/helper/ipv6-list-routing-helper.h
--- ns-3.25/src/internet/helper/ipv6-list-routing-helper.h	2016-10-03 20:57:08.295247262 -0700
+++ ns-3.26/src/internet/helper/ipv6-list-routing-helper.h	2016-10-03 19:49:01.597388026 -0700
@@ -29,6 +29,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup ipv6Helpers
+ *
  * \brief Helper class that adds ns3::Ipv6ListRouting objects
  *
  * This class is expected to be used in conjunction with 
diff -Naur ns-3.25/src/internet/helper/ipv6-routing-helper.h ns-3.26/src/internet/helper/ipv6-routing-helper.h
--- ns-3.25/src/internet/helper/ipv6-routing-helper.h	2016-10-03 20:57:08.296247254 -0700
+++ ns-3.26/src/internet/helper/ipv6-routing-helper.h	2016-10-03 19:49:01.598388018 -0700
@@ -32,6 +32,8 @@
 class Node;
 
 /**
+ * \ingroup ipv6Helpers
+ *
  * \brief A factory to create ns3::Ipv6RoutingProtocol objects
  *
  * For each new routing protocol created as a subclass of 
diff -Naur ns-3.25/src/internet/helper/ipv6-static-routing-helper.h ns-3.26/src/internet/helper/ipv6-static-routing-helper.h
--- ns-3.25/src/internet/helper/ipv6-static-routing-helper.h	2016-10-03 20:57:08.297247246 -0700
+++ ns-3.26/src/internet/helper/ipv6-static-routing-helper.h	2016-10-03 19:49:01.599388011 -0700
@@ -33,6 +33,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup ipv6Helpers
+ *
  * \brief Helper class that adds ns3::Ipv6StaticRouting objects
  *
  * This class is expected to be used in conjunction with 
diff -Naur ns-3.25/src/internet/helper/rip-helper.h ns-3.26/src/internet/helper/rip-helper.h
--- ns-3.25/src/internet/helper/rip-helper.h	2016-10-03 20:57:08.297247246 -0700
+++ ns-3.26/src/internet/helper/rip-helper.h	2016-10-03 19:49:01.599388011 -0700
@@ -29,6 +29,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup ipv4Helpers
+ *
  * \brief Helper class that adds RIP routing to nodes.
  *
  * This class is expected to be used in conjunction with
diff -Naur ns-3.25/src/internet/helper/ripng-helper.h ns-3.26/src/internet/helper/ripng-helper.h
--- ns-3.25/src/internet/helper/ripng-helper.h	2016-10-03 20:57:08.298247238 -0700
+++ ns-3.26/src/internet/helper/ripng-helper.h	2016-10-03 19:49:01.600388003 -0700
@@ -29,6 +29,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup ipv6Helpers
+ *
  * \brief Helper class that adds RIPng routing to nodes.
  *
  * This class is expected to be used in conjunction with
diff -Naur ns-3.25/src/internet/model/arp-cache.cc ns-3.26/src/internet/model/arp-cache.cc
--- ns-3.25/src/internet/model/arp-cache.cc	2016-10-03 20:57:08.299247230 -0700
+++ ns-3.26/src/internet/model/arp-cache.cc	2016-10-03 19:49:01.601387996 -0700
@@ -29,6 +29,7 @@
 #include "arp-cache.h"
 #include "arp-header.h"
 #include "ipv4-interface.h"
+#include "ipv4-header.h"
 
 namespace ns3 {
 
@@ -295,6 +296,24 @@
     }
 }
 
+std::list<ArpCache::Entry *>
+ArpCache::LookupInverse (Address to)
+{
+  NS_LOG_FUNCTION (this << to);
+
+  std::list<ArpCache::Entry *> entryList;
+  for (CacheI i = m_arpCache.begin (); i != m_arpCache.end (); i++)
+    {
+      ArpCache::Entry *entry = (*i).second;
+      if (entry->GetMacAddress () == to)
+        {
+          entryList.push_back (entry);
+        }
+    }
+  return entryList;
+}
+
+
 ArpCache::Entry *
 ArpCache::Lookup (Ipv4Address to)
 {
diff -Naur ns-3.25/src/internet/model/arp-cache.h ns-3.26/src/internet/model/arp-cache.h
--- ns-3.25/src/internet/model/arp-cache.h	2016-10-03 20:57:08.299247230 -0700
+++ ns-3.26/src/internet/model/arp-cache.h	2016-10-03 19:49:01.601387996 -0700
@@ -148,6 +148,13 @@
    */
   ArpCache::Entry *Lookup (Ipv4Address destination);
   /**
+   * \brief Do lookup in the ARP cache against a MAC address
+   * \param destination The destination MAC address to lookup
+   * of
+   * \return A std::list of ArpCache::Entry with info about layer 2
+   */
+  std::list<ArpCache::Entry *> LookupInverse (Address destination);
+  /**
    * \brief Add an Ipv4Address to this ARP cache
    */
   ArpCache::Entry *Add (Ipv4Address to);
@@ -269,6 +276,11 @@
      */
     void ClearRetries (void);
 
+    /**
+     * \brief Update the entry when seeing a packet
+     */
+    void UpdateSeen (void);
+
 private:
     /**
      * \brief ARP cache entry states
@@ -281,11 +293,6 @@
     };
 
     /**
-     * \brief Update the entry when seeing a packet
-     */
-    void UpdateSeen (void);
-
-    /**
      * \brief Returns the entry timeout
      * \returns the entry timeout
      */
diff -Naur ns-3.25/src/internet/model/arp-l3-protocol.cc ns-3.26/src/internet/model/arp-l3-protocol.cc
--- ns-3.25/src/internet/model/arp-l3-protocol.cc	2016-10-03 20:57:08.300247223 -0700
+++ ns-3.26/src/internet/model/arp-l3-protocol.cc	2016-10-03 19:49:01.602387988 -0700
@@ -186,10 +186,13 @@
       NS_LOG_LOGIC ("ARP: Cannot remove ARP header");
       return;
     }
-  NS_LOG_LOGIC ("ARP: received "<< (arp.IsRequest () ? "request" : "reply") <<
-                " node="<<m_node->GetId ()<<", got request from " <<
-                arp.GetSourceIpv4Address () << " for address " <<
-                arp.GetDestinationIpv4Address () << "; we have addresses: ");
+  NS_LOG_LOGIC ("ARP: received " << (arp.IsRequest () ? "request" : "reply") <<
+                " node=" << m_node->GetId () <<
+                ", got " <<
+                (arp.IsRequest () ? "request" : "reply") <<
+                " from " << arp.GetSourceIpv4Address () <<
+                " for address " << arp.GetDestinationIpv4Address () <<
+                "; we have addresses: ");
   for (uint32_t i = 0; i < cache->GetInterface ()->GetNAddresses (); i++)
     {
       NS_LOG_LOGIC (cache->GetInterface ()->GetAddress (i).GetLocal () << ", ");
diff -Naur ns-3.25/src/internet/model/arp-l3-protocol.h ns-3.26/src/internet/model/arp-l3-protocol.h
--- ns-3.25/src/internet/model/arp-l3-protocol.h	2016-10-03 20:57:08.301247215 -0700
+++ ns-3.26/src/internet/model/arp-l3-protocol.h	2016-10-03 19:49:01.603387981 -0700
@@ -37,14 +37,17 @@
 class Ipv4Interface;
 
 /**
- * \ingroup internet
- * \defgroup arp Arp
+ * \ingroup ipv4
+ * \defgroup arp ARP protocol.
  *
- * This is an overview of Arp capabilities (write me).
+ * The ARP protocol and its associated tables are responsible
+ * for the IPv4 - MAC address translation.
+ * Each NetDevice has its own ARP table.
  */
+
 /**
  * \ingroup arp
- * \brief An implementation of the ARP protocol
+ * \brief An implementation of the ARP protocol.
  */
 class ArpL3Protocol : public Object
 {
diff -Naur ns-3.25/src/internet/model/candidate-queue.h ns-3.26/src/internet/model/candidate-queue.h
--- ns-3.25/src/internet/model/candidate-queue.h	2016-10-03 20:57:08.302247207 -0700
+++ ns-3.26/src/internet/model/candidate-queue.h	2016-10-03 19:49:01.604387973 -0700
@@ -30,7 +30,9 @@
 class SPFVertex;
 
 /**
- * \brief A Candidate Queue used in static routing.
+ * \ingroup globalrouting
+ *
+ * \brief A Candidate Queue used in routing calculations.
  *
  * The CandidateQueue is used in the OSPF shortest path computations.  It
  * is a priority queue used to store candidates for the shortest path to a
diff -Naur ns-3.25/src/internet/model/global-route-manager.h ns-3.26/src/internet/model/global-route-manager.h
--- ns-3.25/src/internet/model/global-route-manager.h	2016-10-03 20:57:08.304247191 -0700
+++ ns-3.26/src/internet/model/global-route-manager.h	2016-10-03 19:49:01.606387959 -0700
@@ -25,6 +25,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup globalrouting
+ *
  * @brief A global global router
  *
  * This singleton object can query interface each node in the system
diff -Naur ns-3.25/src/internet/model/global-route-manager-impl.h ns-3.26/src/internet/model/global-route-manager-impl.h
--- ns-3.25/src/internet/model/global-route-manager-impl.h	2016-10-03 20:57:08.304247191 -0700
+++ ns-3.26/src/internet/model/global-route-manager-impl.h	2016-10-03 19:49:01.606387959 -0700
@@ -40,6 +40,8 @@
 class Ipv4GlobalRouting;
 
 /**
+ * \ingroup globalrouting
+ *
  * @brief Vertex used in shortest path first (SPF) computations. See \RFC{2328},
  * Section 16.
  *
diff -Naur ns-3.25/src/internet/model/global-router-interface.cc ns-3.26/src/internet/model/global-router-interface.cc
--- ns-3.25/src/internet/model/global-router-interface.cc	2016-10-03 20:57:08.305247184 -0700
+++ ns-3.26/src/internet/model/global-router-interface.cc	2016-10-03 19:49:01.607387951 -0700
@@ -29,6 +29,7 @@
 #include "ns3/bridge-net-device.h"
 #include "ipv4-global-routing.h"
 #include "global-router-interface.h"
+#include "loopback-net-device.h"
 #include <vector>
 
 namespace ns3 {
@@ -639,6 +640,11 @@
     {
       Ptr<NetDevice> ndLocal = node->GetDevice (i);
 
+      if (DynamicCast <LoopbackNetDevice> (ndLocal))
+        {
+          continue;
+        }
+
       //
       // There is an assumption that bridge ports must never have an IP address 
       // associated with them.  This turns out to be a very convenient place to
@@ -1152,6 +1158,7 @@
   NS_LOG_FUNCTION (this << &c);
 
   uint32_t nDesignatedRouters = c.GetN ();
+  NS_LOG_DEBUG ("Number of designated routers: " << nDesignatedRouters);
 
   for (uint32_t i = 0; i < nDesignatedRouters; ++i)
     {
@@ -1191,23 +1198,32 @@
       // and, if we find a node with a GlobalRouter interface and an IPv4 
       // interface associated with that device, we call it an attached router.
       //
+      ClearBridgesVisited ();
       Ptr<Channel> ch = ndLocal->GetChannel ();
       uint32_t nDevices = ch->GetNDevices ();
       NS_ASSERT (nDevices);
+      NetDeviceContainer deviceList = FindAllNonBridgedDevicesOnLink (ch);
+      NS_LOG_LOGIC ("Found " << deviceList.GetN () << " non-bridged devices on channel");
 
-      for (uint32_t i = 0; i < nDevices; i++)
+      for (uint32_t i = 0; i < deviceList.GetN (); i++)
         {
-          Ptr<NetDevice> tempNd = ch->GetDevice (i);
+          Ptr<NetDevice> tempNd = deviceList.Get (i);
           NS_ASSERT (tempNd);
+          if (tempNd == ndLocal)
+            {
+              NS_LOG_LOGIC ("Adding " << addrLocal << " to Network LSA");
+              pLSA->AddAttachedRouter (addrLocal);
+              continue;
+            }
           Ptr<Node> tempNode = tempNd->GetNode ();
 
-          //
           // Does the node in question have a GlobalRouter interface?  If not it can
           // hardly be considered an attached router.
           //
           Ptr<GlobalRouter> rtr = tempNode->GetObject<GlobalRouter> ();
           if (rtr == 0)
             { 
+              NS_LOG_LOGIC ("Node " << tempNode->GetId () << " does not have GlobalRouter interface--skipping");
               continue;
             }
 
@@ -1231,15 +1247,61 @@
                       NS_LOG_WARN ("Warning, interface has multiple IP addresses; using only the primary one");
                     }
                   Ipv4Address tempAddr = tempIpv4->GetAddress (tempInterface, 0).GetLocal ();
+                  NS_LOG_LOGIC ("Adding " << tempAddr << " to Network LSA");
                   pLSA->AddAttachedRouter (tempAddr);
                 }
             }
+          else
+            {
+              NS_LOG_LOGIC ("Node " << tempNode->GetId () << " device " << tempNd << " does not have IPv4 interface; skipping");
+            }
         }
       m_LSAs.push_back (pLSA);
+      NS_LOG_LOGIC ("========== LSA for node " << node->GetId () << " ==========");
+      NS_LOG_LOGIC (*pLSA);
       pLSA = 0;
     }
 }
 
+NetDeviceContainer
+GlobalRouter::FindAllNonBridgedDevicesOnLink (Ptr<Channel> ch) const
+{
+  NS_LOG_FUNCTION (this << ch);
+  NetDeviceContainer c;
+
+  for (uint32_t i = 0; i < ch->GetNDevices (); i++)
+    {
+      Ptr<NetDevice> nd = ch->GetDevice (i);
+      NS_LOG_LOGIC ("checking to see if the device " << nd << " is bridged");
+      Ptr<BridgeNetDevice> bnd = NetDeviceIsBridged (nd);
+      if (bnd && BridgeHasAlreadyBeenVisited (bnd) == false)
+        {
+          NS_LOG_LOGIC ("Device is bridged by BridgeNetDevice " << bnd << " with " << bnd->GetNBridgePorts () << " ports");
+          MarkBridgeAsVisited (bnd);
+          // Find all channels bridged together, and recursively call
+          // on all other channels
+          for (uint32_t j = 0; j < bnd->GetNBridgePorts (); j++)
+            {
+              Ptr<NetDevice> bridgedDevice = bnd->GetBridgePort (j);
+              if (bridgedDevice->GetChannel () == ch)
+                {
+                  NS_LOG_LOGIC ("Skipping my own device/channel");
+                  continue;
+                }
+              NS_LOG_LOGIC ("Calling on channel " << bridgedDevice->GetChannel ());
+              c.Add (FindAllNonBridgedDevicesOnLink (bridgedDevice->GetChannel ()));
+            }
+        }
+      else
+        {
+          NS_LOG_LOGIC ("Device is not bridged; adding");
+          c.Add (nd);
+        }
+    }
+  NS_LOG_LOGIC ("Found " << c.GetN () << " devices");
+  return c;
+}
+
 //
 // Given a local net device, we need to walk the channel to which the net device is
 // attached and look for nodes with GlobalRouter interfaces on them (one of them 
@@ -1753,6 +1815,7 @@
     {
       if (bridgeNetDevice == *iter)
         {
+          NS_LOG_LOGIC ("Bridge " << bridgeNetDevice << " has been visited.");
           return true;
         }
     }
@@ -1765,6 +1828,7 @@
 void 
 GlobalRouter::MarkBridgeAsVisited (Ptr<BridgeNetDevice> bridgeNetDevice) const
 {
+  NS_LOG_FUNCTION (this << bridgeNetDevice);
   m_bridgesVisited.push_back (bridgeNetDevice);
 }
 
diff -Naur ns-3.25/src/internet/model/global-router-interface.h ns-3.26/src/internet/model/global-router-interface.h
--- ns-3.25/src/internet/model/global-router-interface.h	2016-10-03 20:57:08.306247176 -0700
+++ ns-3.26/src/internet/model/global-router-interface.h	2016-10-03 19:49:01.608387944 -0700
@@ -40,6 +40,8 @@
 class Ipv4GlobalRouting;
 
 /**
+ * \ingroup globalrouting
+ *
  * @brief A single link record for a link state advertisement.
  *
  * The GlobalRoutingLinkRecord is modeled after the OSPF link record field of
@@ -826,6 +828,21 @@
   void BuildNetworkLSAs (NetDeviceContainer c);
 
   /**
+   * \brief Return a container of all non-bridged NetDevices on a link
+   *
+   * This method will recursively find all of the 'edge' devices in an
+   * L2 broadcast domain.  If there are no bridged devices, then the
+   * container returned is simply the set of devices on the channel
+   * passed in as an argument.  If the link has bridges on it 
+   * (and therefore multiple ns3::Channel objects interconnected by 
+   * bridges), the method will find all of the non-bridged devices
+   * in the L2 broadcast domain.
+   *
+   * \param ch a channel from the link
+   */
+  NetDeviceContainer FindAllNonBridgedDevicesOnLink (Ptr<Channel> ch) const;
+
+  /**
    * \brief Decide whether or not a given net device is being bridged by a BridgeNetDevice.
    *
    * \param nd the NetDevice
@@ -847,6 +864,9 @@
 
   // Declared mutable so that const member functions can clear it
   // (supporting the logical constness of the search methods of this class) 
+  /**
+   * Container of bridges visited.
+   */
   mutable std::vector<Ptr<BridgeNetDevice> > m_bridgesVisited;
   /**
    * Clear the list of bridges visited on the link 
diff -Naur ns-3.25/src/internet/model/global-routing.h ns-3.26/src/internet/model/global-routing.h
--- ns-3.25/src/internet/model/global-routing.h	2016-10-03 20:57:08.306247176 -0700
+++ ns-3.26/src/internet/model/global-routing.h	2016-10-03 19:49:01.608387944 -0700
@@ -18,13 +18,16 @@
  */
 
 /**
- * \ingroup internet
- * \defgroup globalrouting Global Routing
+ * \ingroup ipv4Routing
+ * \defgroup globalrouting Global Routing.
+ *
+ * Performs pre-simulation static route computation
+ * on a layer-3 IPv4 topology.
  *
  * \section model Model
  *
  * ns-3 global routing performs pre-simulation static route computation
- * on a layer-3 Ipv4 topology.  The user API from the script level is
+ * on a layer-3 IPv4 topology.  The user API from the script level is
  * fairly minimal; once a topology has been constructed and addresses
  * assigned, the user may call ns3::GlobalRouteManager::PopulateRoutingTables()
  * and the simulator will initialize the routing database and set up
diff -Naur ns-3.25/src/internet/model/icmpv4.cc ns-3.26/src/internet/model/icmpv4.cc
--- ns-3.25/src/internet/model/icmpv4.cc	2016-10-03 20:57:08.308247160 -0700
+++ ns-3.26/src/internet/model/icmpv4.cc	2016-10-03 19:49:01.610387929 -0700
@@ -247,24 +247,26 @@
 Icmpv4Echo::Deserialize (Buffer::Iterator start)
 {
   NS_LOG_FUNCTION (this << &start);
+
+  uint32_t optionalPayloadSize = start.GetRemainingSize () -4;
+  NS_ASSERT (start.GetRemainingSize () >= 4);
+
   m_identifier = start.ReadNtohU16 ();
   m_sequence = start.ReadNtohU16 ();
-  NS_ASSERT (start.GetSize () >= 4);
-  uint32_t size = start.GetSize () - 4;
-  if (size != m_dataSize)
+  if (optionalPayloadSize != m_dataSize)
     {
       delete [] m_data;
-      m_data = new uint8_t[size];
-      m_dataSize = size;
+      m_dataSize = optionalPayloadSize;
+      m_data = new uint8_t[m_dataSize];
     }
   start.Read (m_data, m_dataSize);
-  return m_dataSize;
+  return m_dataSize+4;
 }
 void 
 Icmpv4Echo::Print (std::ostream &os) const
 {
   NS_LOG_FUNCTION (this << &os);
-  os << "identifier=" << m_identifier << ", sequence="  << m_sequence;
+  os << "identifier=" << m_identifier << ", sequence="  << m_sequence << ", data size=" << m_dataSize;
 }
 
 
diff -Naur ns-3.25/src/internet/model/icmpv4.h ns-3.26/src/internet/model/icmpv4.h
--- ns-3.25/src/internet/model/icmpv4.h	2016-10-03 20:57:08.308247160 -0700
+++ ns-3.26/src/internet/model/icmpv4.h	2016-10-03 19:49:01.610387929 -0700
@@ -30,6 +30,13 @@
 
 class Packet;
 
+/**
+ * \ingroup icmp
+ *
+ * \brief Base class for all the ICMP packet headers.
+ *
+ * This header is the common part in all the ICMP packets.
+ */
 class Icmpv4Header : public Header
 {
 public:
@@ -88,6 +95,11 @@
   bool m_calcChecksum;  //!< true if checksum is calculated
 };
 
+/**
+ * \ingroup icmp
+ *
+ * \brief ICMP Echo header
+ */
 class Icmpv4Echo : public Header
 {
 public:
@@ -148,6 +160,11 @@
   uint32_t m_dataSize;   //!< data size
 };
 
+/**
+ * \ingroup icmp
+ *
+ * \brief ICMP Destination Unreachable header
+ */
 class Icmpv4DestinationUnreachable : public Header
 {
 public:
@@ -214,6 +231,11 @@
 };
 
 
+/**
+ * \ingroup icmp
+ *
+ * \brief ICMP Time Exceeded header
+ */
 class Icmpv4TimeExceeded : public Header
 {
 public:
diff -Naur ns-3.25/src/internet/model/icmpv4-l4-protocol.cc ns-3.26/src/internet/model/icmpv4-l4-protocol.cc
--- ns-3.25/src/internet/model/icmpv4-l4-protocol.cc	2016-10-03 20:57:08.307247168 -0700
+++ ns-3.26/src/internet/model/icmpv4-l4-protocol.cc	2016-10-03 19:49:01.609387936 -0700
@@ -28,6 +28,7 @@
 #include "ns3/packet.h"
 #include "ns3/boolean.h"
 #include "ns3/ipv4-route.h"
+#include "ns3/ipv6-interface.h"
 
 namespace ns3 {
 
diff -Naur ns-3.25/src/internet/model/icmpv4-l4-protocol.h ns-3.26/src/internet/model/icmpv4-l4-protocol.h
--- ns-3.25/src/internet/model/icmpv4-l4-protocol.h	2016-10-03 20:57:08.307247168 -0700
+++ ns-3.26/src/internet/model/icmpv4-l4-protocol.h	2016-10-03 19:49:01.609387936 -0700
@@ -31,6 +31,17 @@
 class Ipv4Interface;
 class Ipv4Route;
 
+/**
+ * \ingroup ipv4
+ * \defgroup icmp ICMP protocol and associated headers.
+ */
+
+/**
+ * \ingroup icmp
+ *
+ * \brief This is the implementation of the ICMP protocol as
+ * described in \RFC{792}.
+ */
 class Icmpv4L4Protocol : public IpL4Protocol
 {
 public:
diff -Naur ns-3.25/src/internet/model/icmpv6-header.cc ns-3.26/src/internet/model/icmpv6-header.cc
--- ns-3.25/src/internet/model/icmpv6-header.cc	2016-10-03 20:57:08.309247152 -0700
+++ ns-3.26/src/internet/model/icmpv6-header.cc	2016-10-03 19:49:01.611387921 -0700
@@ -1123,7 +1123,7 @@
 uint32_t Icmpv6DestinationUnreachable::Deserialize (Buffer::Iterator start)
 {
   NS_LOG_FUNCTION (this << &start);
-  uint16_t length = start.GetSize () - 8;
+  uint16_t length = start.GetRemainingSize () - 8;
   uint8_t* data = new uint8_t[length];
   Buffer::Iterator i = start;
 
@@ -1234,7 +1234,7 @@
 uint32_t Icmpv6TooBig::Deserialize (Buffer::Iterator start) 
 {
   NS_LOG_FUNCTION (this << &start);
-  uint16_t length = start.GetSize () - 8;
+  uint16_t length = start.GetRemainingSize () - 8;
   uint8_t* data = new uint8_t[length];
   Buffer::Iterator i = start;
 
@@ -1334,7 +1334,7 @@
 {
   NS_LOG_FUNCTION (this << &start);
   
-  uint16_t length = start.GetSize () - 8;
+  uint16_t length = start.GetRemainingSize () - 8;
   uint8_t* data = new uint8_t[length];
   Buffer::Iterator i = start;
 
@@ -1445,7 +1445,7 @@
 uint32_t Icmpv6ParameterError::Deserialize (Buffer::Iterator start) 
 {
   NS_LOG_FUNCTION (this << &start);
-  uint16_t length = start.GetSize () - 8;
+  uint16_t length = start.GetRemainingSize () - 8;
   uint8_t* data = new uint8_t[length];
   Buffer::Iterator i = start;
 
diff -Naur ns-3.25/src/internet/model/icmpv6-header.h ns-3.26/src/internet/model/icmpv6-header.h
--- ns-3.25/src/internet/model/icmpv6-header.h	2016-10-03 20:57:08.310247145 -0700
+++ ns-3.26/src/internet/model/icmpv6-header.h	2016-10-03 19:49:01.612387914 -0700
@@ -31,14 +31,14 @@
 {
 
 /**
- * \class Icmpv6Header
+ * \ingroup icmpv6
+ *
  * \brief ICMPv6 header.
  */
 class Icmpv6Header : public Header
 {
 public:
   /**
-   * \enum Type_e
    * \brief ICMPv6 type code.
    */
   enum Type_e
@@ -72,7 +72,6 @@
   };
 
   /**
-   * \enum OptionType_e
    * \brief ICMPv6 Option type code.
    */
   enum OptionType_e
@@ -85,7 +84,6 @@
   };
 
   /**
-   * \enum ErrorDestinationUnreachable_e
    * \brief ICMPv6 error code : Destination Unreachable
    */
   enum ErrorDestinationUnreachable_e
@@ -98,7 +96,6 @@
   };
 
   /**
-   * \enum ErrorTimeExceeded_e
    * \brief ICMPv6 error code : Time Exceeded
    */
   enum ErrorTimeExceeded_e
@@ -108,7 +105,6 @@
   };
 
   /**
-   * \enum ErrorParameterError_e
    * \brief ICMPv6 error code : Parameter Error
    */
   enum ErrorParameterError_e
@@ -235,7 +231,8 @@
 };
 
 /**
- * \class Icmpv6OptionHeader
+ * \ingroup icmpv6
+ *
  * \brief ICMPv6 option header.
  */
 class Icmpv6OptionHeader : public Header
@@ -325,7 +322,8 @@
 };
 
 /**
- * \class Icmpv6NS
+ * \ingroup icmpv6
+ *
  * \brief ICMPv6 Neighbor Solicitation header.
  */
 class Icmpv6NS : public Icmpv6Header
@@ -422,7 +420,8 @@
 };
 
 /**
- * \class Icmpv6NA
+ * \ingroup icmpv6
+ *
  * \brief ICMPv6 Neighbor Advertisement header.
  */
 class Icmpv6NA : public Icmpv6Header
@@ -563,7 +562,8 @@
 };
 
 /**
- * \class Icmpv6RA
+ * \ingroup icmpv6
+ *
  * \brief ICMPv6 Router Advertisement header.
  */
 class Icmpv6RA : public Icmpv6Header
@@ -755,7 +755,8 @@
 };
 
 /**
- * \class Icmpv6RS
+ * \ingroup icmpv6
+ *
  * \brief ICMPv6 Router Solicitation header.
  */
 class Icmpv6RS : public Icmpv6Header
@@ -828,7 +829,8 @@
 };
 
 /**
- * \class Icmpv6Redirection
+ * \ingroup icmpv6
+ *
  * \brief ICMPv6 Redirection header.
  */
 class Icmpv6Redirection : public Icmpv6Header
@@ -935,7 +937,8 @@
 };
 
 /**
- * \class Icmpv6Echo
+ * \ingroup icmpv6
+ *
  * \brief ICMPv6 Echo message.
  */
 class Icmpv6Echo : public Icmpv6Header
@@ -1031,7 +1034,8 @@
 };
 
 /**
- * \class Icmpv6DestinationUnreachable
+ * \ingroup icmpv6
+ *
  * \brief ICMPv6 Error Destination Unreachable header.
  */
 class Icmpv6DestinationUnreachable : public Icmpv6Header
@@ -1104,7 +1108,8 @@
 };
 
 /**
- * \class Icmpv6TooBig
+ * \ingroup icmpv6
+ *
  * \brief ICMPv6 Error Too Big header.
  */
 class Icmpv6TooBig : public Icmpv6Header
@@ -1195,7 +1200,8 @@
 };
 
 /**
- * \class Icmpv6TimeExceeded
+ * \ingroup icmpv6
+ *
  * \brief ICMPv6 Error Time Exceeded header.
  */
 class Icmpv6TimeExceeded : public Icmpv6Header
@@ -1269,7 +1275,8 @@
 };
 
 /**
- * \class Icmpv6ParameterError
+ * \ingroup icmpv6
+ *
  * \brief ICMPv6 Error Parameter Error header.
  */
 class Icmpv6ParameterError : public Icmpv6Header
@@ -1360,7 +1367,8 @@
 };
 
 /**
- * \class Icmpv6OptionMtu
+ * \ingroup icmpv6
+ *
  * \brief ICMPv6 MTU option.
  */
 class Icmpv6OptionMtu : public Icmpv6OptionHeader
@@ -1456,7 +1464,8 @@
 };
 
 /**
- * \class Icmpv6OptionPrefixInformation
+ * \ingroup icmpv6
+ *
  * \brief ICMPv6 Option Prefix Information.
  */
 class Icmpv6OptionPrefixInformation : public Icmpv6OptionHeader
@@ -1621,7 +1630,8 @@
 };
 
 /**
- * \class Icmpv6OptionLinkLayerAddress
+ * \ingroup icmpv6
+ *
  * \brief ICMPv6 link-layer address option.
  */
 class Icmpv6OptionLinkLayerAddress : public Icmpv6OptionHeader
@@ -1707,7 +1717,8 @@
 };
 
 /**
- * \class Icmpv6OptionRedirected
+ * \ingroup icmpv6
+ *
  * \brief ICMPv6 redirected option.
  */
 class Icmpv6OptionRedirected : public Icmpv6OptionHeader
diff -Naur ns-3.25/src/internet/model/icmpv6-l4-protocol.h ns-3.26/src/internet/model/icmpv6-l4-protocol.h
--- ns-3.25/src/internet/model/icmpv6-l4-protocol.h	2016-10-03 20:57:08.311247137 -0700
+++ ns-3.26/src/internet/model/icmpv6-l4-protocol.h	2016-10-03 19:49:01.614387899 -0700
@@ -40,7 +40,13 @@
 class TraceContext;
 
 /**
- * \class Icmpv6L4Protocol
+ * \ingroup ipv6
+ * \defgroup icmpv6 ICMPv6 protocol and associated headers.
+ */
+
+/**
+ * \ingroup icmpv6
+ *
  * \brief An implementation of the ICMPv6 protocol.
  */
 class Icmpv6L4Protocol : public IpL4Protocol
diff -Naur ns-3.25/src/internet/model/ip-l4-protocol.h ns-3.26/src/internet/model/ip-l4-protocol.h
--- ns-3.25/src/internet/model/ip-l4-protocol.h	2016-10-03 20:57:08.312247129 -0700
+++ ns-3.26/src/internet/model/ip-l4-protocol.h	2016-10-03 19:49:01.614387899 -0700
@@ -26,20 +26,23 @@
 
 #include "ns3/object.h"
 #include "ns3/callback.h"
-#include "ns3/ipv4-header.h"
-#include "ns3/ipv6-header.h"
-#include "ns3/ipv6-interface.h"
+#include "ipv4-header.h"
+#include "ipv6-header.h"
 
 namespace ns3 {
 
 class Packet;
 class Ipv4Address;
 class Ipv4Interface;
+class Ipv6Address;
+class Ipv6Interface;
 class Ipv4Route;
 class Ipv6Route;
 
 /**
- * \brief L4 Protocol abstract base class 
+ * \ingroup internet
+ *
+ * \brief L4 Protocol abstract base class.
  *
  * This is an abstract base class for layer four protocols which use IP as
  * the network layer.
@@ -48,7 +51,7 @@
 {
 public:
   /**
-   * \brief Rx status codes
+   * \brief Rx status codes.
    */
   enum RxStatus {
     RX_OK,
@@ -66,7 +69,8 @@
   virtual ~IpL4Protocol ();
 
   /**
-   * \returns the protocol number of this protocol.
+   * \brief Returns the protocol number of this protocol.
+   * \returns the protocol number.
    */
   virtual int GetProtocolNumber (void) const = 0;
 
diff -Naur ns-3.25/src/internet/model/ipv4-address-generator.h ns-3.26/src/internet/model/ipv4-address-generator.h
--- ns-3.25/src/internet/model/ipv4-address-generator.h	2016-10-03 20:57:08.313247121 -0700
+++ ns-3.26/src/internet/model/ipv4-address-generator.h	2016-10-03 19:49:01.615387891 -0700
@@ -25,6 +25,7 @@
 
 /**
  * \ingroup address
+ * \ingroup ipv4
  *
  * \brief This generator assigns addresses sequentially from a provided
  * network address; used in topology code.
diff -Naur ns-3.25/src/internet/model/ipv4-end-point-demux.cc ns-3.26/src/internet/model/ipv4-end-point-demux.cc
--- ns-3.25/src/internet/model/ipv4-end-point-demux.cc	2016-10-03 20:57:08.314247113 -0700
+++ ns-3.26/src/internet/model/ipv4-end-point-demux.cc	2016-10-03 19:49:01.616387884 -0700
@@ -20,8 +20,10 @@
 
 #include "ipv4-end-point-demux.h"
 #include "ipv4-end-point.h"
+#include "ipv4-interface-address.h"
 #include "ns3/log.h"
 
+
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("Ipv4EndPointDemux");
diff -Naur ns-3.25/src/internet/model/ipv4-end-point-demux.h ns-3.26/src/internet/model/ipv4-end-point-demux.h
--- ns-3.25/src/internet/model/ipv4-end-point-demux.h	2016-10-03 20:57:08.314247113 -0700
+++ ns-3.26/src/internet/model/ipv4-end-point-demux.h	2016-10-03 19:49:01.616387884 -0700
@@ -31,6 +31,8 @@
 class Ipv4EndPoint;
 
 /**
+ * \ingroup ipv4
+ *
  * \brief Demultiplexes packets to various transport layer endpoints
  *
  * This class serves as a lookup table to match partial or full information
diff -Naur ns-3.25/src/internet/model/ipv4-end-point.h ns-3.26/src/internet/model/ipv4-end-point.h
--- ns-3.25/src/internet/model/ipv4-end-point.h	2016-10-03 20:57:08.315247106 -0700
+++ ns-3.26/src/internet/model/ipv4-end-point.h	2016-10-03 19:49:01.617387876 -0700
@@ -34,6 +34,8 @@
 class Packet;
 
 /**
+ * \ingroup ipv4
+ *
  * \brief A representation of an internet endpoint/connection
  *
  * This class provides an internet four-tuple (source and destination ports 
diff -Naur ns-3.25/src/internet/model/ipv4-global-routing.cc ns-3.26/src/internet/model/ipv4-global-routing.cc
--- ns-3.25/src/internet/model/ipv4-global-routing.cc	2016-10-03 20:57:08.315247106 -0700
+++ ns-3.26/src/internet/model/ipv4-global-routing.cc	2016-10-03 19:49:01.617387876 -0700
@@ -513,7 +513,7 @@
     {
       NS_LOG_LOGIC ("Forwarding disabled for this interface");
       ecb (p, header, Socket::ERROR_NOROUTETOHOST);
-      return false;
+      return true;
     }
   // Next, try to find a route
   NS_LOG_LOGIC ("Unicast destination- looking up global route");
diff -Naur ns-3.25/src/internet/model/ipv4-global-routing.h ns-3.26/src/internet/model/ipv4-global-routing.h
--- ns-3.25/src/internet/model/ipv4-global-routing.h	2016-10-03 20:57:08.316247098 -0700
+++ ns-3.26/src/internet/model/ipv4-global-routing.h	2016-10-03 19:49:01.618387869 -0700
@@ -42,7 +42,9 @@
 
 
 /**
- * \brief Global routing protocol for IP version 4 stacks.
+ * \ingroup ipv4
+ *
+ * \brief Global routing protocol for IPv4 stacks.
  *
  * In ns-3 we have the concept of a pluggable routing protocol.  Routing
  * protocols are added to a list maintained by the Ipv4L3Protocol.  Every 
@@ -258,6 +260,12 @@
   /// iterator of container of Ipv4RoutingTableEntry (routes to external AS)
   typedef std::list<Ipv4RoutingTableEntry *>::iterator ASExternalRoutesI;
 
+  /**
+   * \brief Lookup in the forwarding table for destination.
+   * \param dest destination address
+   * \param oif output interface if any (put 0 otherwise)
+   * \return Ipv4Route to route the packet to reach dest address
+   */
   Ptr<Ipv4Route> LookupGlobal (Ipv4Address dest, Ptr<NetDevice> oif = 0);
 
   HostRoutes m_hostRoutes;             //!< Routes to hosts
diff -Naur ns-3.25/src/internet/model/ipv4.h ns-3.26/src/internet/model/ipv4.h
--- ns-3.25/src/internet/model/ipv4.h	2016-10-03 20:57:08.331246981 -0700
+++ ns-3.26/src/internet/model/ipv4.h	2016-10-03 19:49:01.633387757 -0700
@@ -39,14 +39,14 @@
 
 /**
  * \ingroup internet
- * \defgroup ipv4 Ipv4
+ * \defgroup ipv4 IPv4 classes and sub-modules
  */
 /**
  * \ingroup ipv4
- * \brief Access to the Ipv4 forwarding table, interfaces, and configuration
+ * \brief Access to the IPv4 forwarding table, interfaces, and configuration
  *
  * This class defines the API to manipulate the following aspects of
- * the Ipv4 implementation:
+ * the IPv4 implementation:
  * -# set/get an Ipv4RoutingProtocol 
  * -# register a NetDevice for use by the Ipv4 layer (basically, to
  * create Ipv4-related state such as addressing and neighbor cache that 
diff -Naur ns-3.25/src/internet/model/ipv4-header.h ns-3.26/src/internet/model/ipv4-header.h
--- ns-3.25/src/internet/model/ipv4-header.h	2016-10-03 20:57:08.317247090 -0700
+++ ns-3.26/src/internet/model/ipv4-header.h	2016-10-03 19:49:01.619387862 -0700
@@ -26,6 +26,8 @@
 
 namespace ns3 {
 /**
+ * \ingroup ipv4
+ *
  * \brief Packet header for IPv4
  */
 class Ipv4Header : public Header 
diff -Naur ns-3.25/src/internet/model/ipv4-interface-address.h ns-3.26/src/internet/model/ipv4-interface-address.h
--- ns-3.25/src/internet/model/ipv4-interface-address.h	2016-10-03 20:57:08.318247082 -0700
+++ ns-3.26/src/internet/model/ipv4-interface-address.h	2016-10-03 19:49:01.620387854 -0700
@@ -28,6 +28,7 @@
 
 /**
  * \ingroup address
+ * \ingroup ipv4
  *
  * \brief a class to store IPv4 address information on an interface
  *
diff -Naur ns-3.25/src/internet/model/ipv4-interface.cc ns-3.26/src/internet/model/ipv4-interface.cc
--- ns-3.25/src/internet/model/ipv4-interface.cc	2016-10-03 20:57:08.318247082 -0700
+++ ns-3.26/src/internet/model/ipv4-interface.cc	2016-10-03 19:49:01.620387854 -0700
@@ -30,6 +30,7 @@
 #include "ns3/node.h"
 #include "ns3/pointer.h"
 
+
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("Ipv4Interface");
@@ -327,7 +328,10 @@
           ++tmp;
         }
     }
-  NS_ASSERT (false);  // Assert if not found
+  else
+    {
+      NS_FATAL_ERROR ("index " << index << " out of bounds");  
+    }
   Ipv4InterfaceAddress addr;
   return (addr);  // quiet compiler
 }
@@ -338,7 +342,7 @@
   NS_LOG_FUNCTION (this << index);
   if (index >= m_ifaddrs.size ())
     {
-      NS_ASSERT_MSG (false, "Bug in Ipv4Interface::RemoveAddress");
+      NS_FATAL_ERROR ("Bug in Ipv4Interface::RemoveAddress");
     }
   Ipv4InterfaceAddressListI i = m_ifaddrs.begin ();
   uint32_t tmp = 0;
@@ -353,7 +357,7 @@
       ++tmp;
       ++i;
     }
-  NS_ASSERT_MSG (false, "Address " << index << " not found");
+  NS_FATAL_ERROR ("Address " << index << " not found");
   Ipv4InterfaceAddress addr;
   return (addr);  // quiet compiler
 }
diff -Naur ns-3.25/src/internet/model/ipv4-interface.h ns-3.26/src/internet/model/ipv4-interface.h
--- ns-3.25/src/internet/model/ipv4-interface.h	2016-10-03 20:57:08.319247074 -0700
+++ ns-3.26/src/internet/model/ipv4-interface.h	2016-10-03 19:49:01.621387847 -0700
@@ -23,8 +23,6 @@
 #define IPV4_INTERFACE_H
 
 #include <list>
-#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"
@@ -35,8 +33,13 @@
 class Packet;
 class Node;
 class ArpCache;
+class Ipv4InterfaceAddress;
+class Ipv4Address;
+class Ipv4Header;
 
 /**
+ * \ingroup ipv4
+ *
  * \brief The IPv4 representation of a network interface
  *
  * This class roughly corresponds to the struct in_device
diff -Naur ns-3.25/src/internet/model/ipv4-l3-protocol.cc ns-3.26/src/internet/model/ipv4-l3-protocol.cc
--- ns-3.25/src/internet/model/ipv4-l3-protocol.cc	2016-10-03 20:57:08.320247067 -0700
+++ ns-3.26/src/internet/model/ipv4-l3-protocol.cc	2016-10-03 19:49:01.622387839 -0700
@@ -36,6 +36,7 @@
 
 #include "loopback-net-device.h"
 #include "arp-l3-protocol.h"
+#include "arp-cache.h"
 #include "ipv4-l3-protocol.h"
 #include "icmpv4-l4-protocol.h"
 #include "ipv4-interface.h"
@@ -56,12 +57,6 @@
     .SetParent<Ipv4> ()
     .SetGroupName ("Internet")
     .AddConstructor<Ipv4L3Protocol> ()
-    .AddAttribute ("DefaultTos",
-                   "The TOS value set by default on "
-                   "all outgoing packets generated on this node.",
-                   UintegerValue (0),
-                   MakeUintegerAccessor (&Ipv4L3Protocol::m_defaultTos),
-                   MakeUintegerChecker<uint8_t> ())
     .AddAttribute ("DefaultTtl",
                    "The TTL value set by default on "
                    "all outgoing packets generated on this node.",
@@ -598,6 +593,36 @@
       return;
     }
 
+  // the packet is valid, we update the ARP cache entry (if present)
+  Ptr<ArpCache> arpCache = ipv4Interface->GetArpCache ();
+  if (arpCache)
+    {
+      // case one, it's a a direct routing.
+      ArpCache::Entry *entry = arpCache->Lookup (ipHeader.GetSource ());
+      if (entry)
+        {
+          if (entry->IsAlive ())
+            {
+              entry->UpdateSeen ();
+            }
+        }
+      else
+        {
+          // It's not in the direct routing, so it's the router, and it could have multiple IP addresses.
+          // In doubt, update all of them.
+          // Note: it's a confirmed behavior for Linux routers.
+          std::list<ArpCache::Entry *> entryList = arpCache->LookupInverse (from);
+          std::list<ArpCache::Entry *>::iterator iter;
+          for (iter = entryList.begin (); iter != entryList.end (); iter ++)
+            {
+              if ((*iter)->IsAlive ())
+                {
+                  (*iter)->UpdateSeen ();
+                }
+            }
+        }
+    }
+
   for (SocketList::iterator i = m_sockets.begin (); i != m_sockets.end (); ++i)
     {
       NS_LOG_LOGIC ("Forwarding to raw socket"); 
@@ -710,7 +735,7 @@
       ttl = tag.GetTtl ();
     }
 
-  uint8_t tos = m_defaultTos;
+  uint8_t tos = 0;
   SocketIpTosTag ipTosTag;
   found = packet->RemovePacketTag (ipTosTag);
   if (found)
@@ -1017,6 +1042,17 @@
       m_dropTrace (header, packet, DROP_TTL_EXPIRED, m_node->GetObject<Ipv4> (), interface);
       return;
     }
+  // in case the packet still has a priority tag attached, remove it
+  SocketPriorityTag priorityTag;
+  packet->RemovePacketTag (priorityTag);
+  uint8_t priority = Socket::IpTos2Priority (ipHeader.GetTos ());
+  // add a priority tag if the priority is not null
+  if (priority)
+    {
+      priorityTag.SetPriority (priority);
+      packet->AddPacketTag (priorityTag);
+    }
+
   m_unicastForwardTrace (ipHeader, packet, interface);
   SendRealOut (rtentry, packet, ipHeader);
 }
@@ -1039,7 +1075,7 @@
         }
       NS_LOG_LOGIC ("Got last fragment, Packet is complete " << *p );
       ipHeader.SetFragmentOffset (0);
-      ipHeader.SetPayloadSize (p->GetSize () + ipHeader.GetSerializedSize ());
+      ipHeader.SetPayloadSize (p->GetSize ());
     }
 
   m_localDeliverTrace (ipHeader, p, iif);
@@ -1365,6 +1401,8 @@
   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<Ipv4> (), 0);
+
+  // \todo Send an ICMP no route.
 }
 
 void
diff -Naur ns-3.25/src/internet/model/ipv4-l3-protocol.h ns-3.26/src/internet/model/ipv4-l3-protocol.h
--- ns-3.25/src/internet/model/ipv4-l3-protocol.h	2016-10-03 20:57:08.321247059 -0700
+++ ns-3.26/src/internet/model/ipv4-l3-protocol.h	2016-10-03 19:49:01.623387832 -0700
@@ -54,7 +54,9 @@
 
 
 /**
- * \brief Implement the Ipv4 layer.
+ * \ingroup ipv4
+ *
+ * \brief Implement the IPv4 layer.
  * 
  * This is the actual implementation of IP.  It contains APIs to send and
  * receive packets at the IP layer, as well as APIs for IP routing.
@@ -394,11 +396,11 @@
   /**
    * \brief Fragment a packet
    * \param packet the packet
-   * \param ipHeader the IPv4 header
+   * \param ipv4Header the IPv4 header
    * \param outIfaceMtu the MTU of the interface
    * \param listFragments the list of fragments
    */
-  void DoFragmentation (Ptr<Packet> packet, const Ipv4Header & ipv4Header, uint32_t outIfaceMtu, std::list<Ipv4PayloadHeaderPair>& listFragments);
+  void DoFragmentation (Ptr<Packet> packet, const Ipv4Header& ipv4Header, uint32_t outIfaceMtu, std::list<Ipv4PayloadHeaderPair>& listFragments);
 
   /**
    * \brief Process a packet fragment
@@ -457,7 +459,6 @@
   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)
   Ptr<Node> m_node; //!< Node attached to stack.
@@ -489,7 +490,6 @@
   SocketList m_sockets; //!< List of IPv4 raw sockets.
 
   /**
-   * \class Fragments
    * \brief A Set of Fragment belonging to the same packet (src, dst, identification and proto)
    */
   class Fragments : public SimpleRefCount<Fragments>
diff -Naur ns-3.25/src/internet/model/ipv4-list-routing.cc ns-3.26/src/internet/model/ipv4-list-routing.cc
--- ns-3.25/src/internet/model/ipv4-list-routing.cc	2016-10-03 20:57:08.321247059 -0700
+++ ns-3.26/src/internet/model/ipv4-list-routing.cc	2016-10-03 19:49:01.623387832 -0700
@@ -161,7 +161,7 @@
     {
       NS_LOG_LOGIC ("Forwarding disabled for this interface");
       ecb (p, header, Socket::ERROR_NOROUTETOHOST);
-      return false;
+      return true;
     }
   // Next, try to find a route
   // If we have already delivered a packet locally (e.g. multicast)
diff -Naur ns-3.25/src/internet/model/ipv4-list-routing.h ns-3.26/src/internet/model/ipv4-list-routing.h
--- ns-3.25/src/internet/model/ipv4-list-routing.h	2016-10-03 20:57:08.322247051 -0700
+++ ns-3.26/src/internet/model/ipv4-list-routing.h	2016-10-03 19:49:01.624387824 -0700
@@ -26,11 +26,9 @@
 namespace ns3 {
 
 /**
- * \ingroup internet 
- * \defgroup ipv4ListRouting Ipv4 List Routing
- */
-/**
- * \ingroup ipv4ListRouting
+ * \ingroup ipv4Routing
+ *
+ * \brief IPv4 list routing.
  *
  * This class is a specialization of Ipv4RoutingProtocol that allows 
  * other instances of Ipv4RoutingProtocol to be inserted in a 
diff -Naur ns-3.25/src/internet/model/ipv4-packet-filter.cc ns-3.26/src/internet/model/ipv4-packet-filter.cc
--- ns-3.25/src/internet/model/ipv4-packet-filter.cc	2016-10-03 20:57:08.322247051 -0700
+++ ns-3.26/src/internet/model/ipv4-packet-filter.cc	2016-10-03 19:49:01.624387824 -0700
@@ -18,10 +18,13 @@
  *
  * Authors:  Stefano Avallone <stavallo@unina.it>
  *           Tom Henderson <tomhend@u.washington.edu>
+ *           Pasquale Imputato <p.imputato@gmail.com>
  */
 
 #include "ns3/log.h"
 #include "ns3/enum.h"
+#include "ns3/tcp-header.h"
+#include "ns3/udp-header.h"
 #include "ipv4-queue-disc-item.h"
 #include "ipv4-packet-filter.h"
 
@@ -60,134 +63,88 @@
 
 // ------------------------------------------------------------------------- //
 
-NS_OBJECT_ENSURE_REGISTERED (PfifoFastIpv4PacketFilter);
+NS_OBJECT_ENSURE_REGISTERED (FqCoDelIpv4PacketFilter);
 
-TypeId 
-PfifoFastIpv4PacketFilter::GetTypeId (void)
+TypeId
+FqCoDelIpv4PacketFilter::GetTypeId (void)
 {
-  static TypeId tid = TypeId ("ns3::PfifoFastIpv4PacketFilter")
+  static TypeId tid = TypeId ("ns3::FqCoDelIpv4PacketFilter")
     .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"))
+    .AddConstructor<FqCoDelIpv4PacketFilter> ()
+    .AddAttribute ("Perturbation",
+                   "The salt used as an additional input to the hash function of this filter",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&FqCoDelIpv4PacketFilter::m_perturbation),
+                   MakeUintegerChecker<uint32_t> ())
   ;
   return tid;
 }
 
-PfifoFastIpv4PacketFilter::PfifoFastIpv4PacketFilter ()
+FqCoDelIpv4PacketFilter::FqCoDelIpv4PacketFilter ()
 {
   NS_LOG_FUNCTION (this);
 }
 
-PfifoFastIpv4PacketFilter::~PfifoFastIpv4PacketFilter()
+FqCoDelIpv4PacketFilter::~FqCoDelIpv4PacketFilter ()
 {
   NS_LOG_FUNCTION (this);
 }
 
 int32_t
-PfifoFastIpv4PacketFilter::DoClassify (Ptr<QueueDiscItem> item) const
+FqCoDelIpv4PacketFilter::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)
+  Ipv4Header hdr = ipv4Item->GetHeader ();
+  Ipv4Address src = hdr.GetSource ();
+  Ipv4Address dest = hdr.GetDestination ();
+  uint8_t prot = hdr.GetProtocol ();
+  uint16_t fragOffset = hdr.GetFragmentOffset ();
+
+  TcpHeader tcpHdr;
+  UdpHeader udpHdr;
+  uint16_t srcPort = 0;
+  uint16_t destPort = 0;
+
+  Ptr<Packet> pkt = ipv4Item->GetPacket ();
+
+  if (prot == 6 && fragOffset == 0) // TCP
     {
-      uint8_t tos = ipv4Item->GetHeader ().GetTos ();
-      band = TosToBand (tos);
-      NS_LOG_DEBUG ("Found Ipv4 packet; TOS " << (uint8_t) tos << " band " << band);
+      pkt->PeekHeader (tcpHdr);
+      srcPort = tcpHdr.GetSourcePort ();
+      destPort = tcpHdr.GetDestinationPort ();
     }
-  else
+  else if (prot == 17 && fragOffset == 0) // UDP
     {
-      Ipv4Header::DscpType dscp = ipv4Item->GetHeader ().GetDscp ();
-      band = DscpToBand (dscp);
-      NS_LOG_DEBUG ("Found Ipv4 packet; DSCP " << ipv4Item->GetHeader ().DscpTypeToString (dscp) << " band " << band);
+      pkt->PeekHeader (udpHdr);
+      srcPort = udpHdr.GetSourcePort ();
+      destPort = udpHdr.GetDestinationPort ();
     }
 
-  return band;
-}
+  /* serialize the 5-tuple and the perturbation in buf */
+  uint8_t buf[17];
+  src.Serialize (buf);
+  dest.Serialize (buf + 4);
+  buf[8] = prot;
+  buf[9] = (srcPort >> 8) & 0xff;
+  buf[10] = srcPort & 0xff;
+  buf[11] = (destPort >> 8) & 0xff;
+  buf[12] = destPort & 0xff;
+  buf[13] = (m_perturbation >> 24) & 0xff;
+  buf[14] = (m_perturbation >> 16) & 0xff;
+  buf[15] = (m_perturbation >> 8) & 0xff;
+  buf[16] = m_perturbation & 0xff;
 
-uint32_t
-PfifoFastIpv4PacketFilter::TosToBand (uint8_t tos) const
-{
-  NS_LOG_FUNCTION (this << (uint16_t) tos);
+  /* Linux calculates the jhash2 (jenkins hash), we calculate the murmur3 */
+  uint32_t hash = Hash32 ((char*) buf, 17);
 
-  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);
+  NS_LOG_DEBUG ("Found Ipv4 packet; hash value " << hash);
 
-  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;
+  return hash;
 }
 
 } // namespace ns3
diff -Naur ns-3.25/src/internet/model/ipv4-packet-filter.h ns-3.26/src/internet/model/ipv4-packet-filter.h
--- ns-3.25/src/internet/model/ipv4-packet-filter.h	2016-10-03 20:57:08.322247051 -0700
+++ ns-3.26/src/internet/model/ipv4-packet-filter.h	2016-10-03 19:49:01.625387817 -0700
@@ -18,6 +18,7 @@
  *
  * Authors:  Stefano Avallone <stavallo@unina.it>
  *           Tom Henderson <tomhend@u.washington.edu>
+ *           Pasquale Imputato <p.imputato@gmail.com>
  */
 
 #ifndef IPV4_PACKET_FILTER_H
@@ -29,7 +30,8 @@
 namespace ns3 {
 
 /**
- * \ingroup internet
+ * \ingroup ipv4
+ * \ingroup traffic-control
  *
  * Ipv4PacketFilter is the abstract base class for filters defined for IPv4 packets.
  */
@@ -53,80 +55,11 @@
 /**
  * \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
+ * FqCoDelIpv4PacketFilter is the filter to be added to the FQCoDel
+ * queue disc to simulate the behavior of the fq-codel Linux queue disc.
  *
  */
-class PfifoFastIpv4PacketFilter: public Ipv4PacketFilter {
+class FqCoDelIpv4PacketFilter : public Ipv4PacketFilter {
 public:
   /**
    * \brief Get the type ID.
@@ -134,24 +67,13 @@
    */
   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
-  };
+  FqCoDelIpv4PacketFilter ();
+  virtual ~FqCoDelIpv4PacketFilter ();
 
 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
+  uint32_t m_perturbation; //!< hash perturbation value
 };
 
 } // namespace ns3
diff -Naur ns-3.25/src/internet/model/ipv4-packet-info-tag.h ns-3.26/src/internet/model/ipv4-packet-info-tag.h
--- ns-3.25/src/internet/model/ipv4-packet-info-tag.h	2016-10-03 20:57:08.323247043 -0700
+++ ns-3.26/src/internet/model/ipv4-packet-info-tag.h	2016-10-03 19:49:01.625387817 -0700
@@ -31,6 +31,8 @@
 class Packet;
 
 /**
+ * \ingroup ipv4
+ *
  * \brief This class implements Linux struct pktinfo 
  * in order to deliver ancillary information to the socket interface.
  * This is used with socket option such as IP_PKTINFO, IP_RECVTTL, 
diff -Naur ns-3.25/src/internet/model/ipv4-packet-probe.h ns-3.26/src/internet/model/ipv4-packet-probe.h
--- ns-3.25/src/internet/model/ipv4-packet-probe.h	2016-10-03 20:57:08.324247036 -0700
+++ ns-3.26/src/internet/model/ipv4-packet-probe.h	2016-10-03 19:49:01.626387809 -0700
@@ -37,6 +37,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup ipv4
+ *
  * This class is designed to probe an underlying ns3 TraceSource
  * exporting a packet, an IPv4 object, and an interface.  This probe
  * exports a trace source "Output" with arguments of type Ptr<const Packet>,
diff -Naur ns-3.25/src/internet/model/ipv4-queue-disc-item.cc ns-3.26/src/internet/model/ipv4-queue-disc-item.cc
--- ns-3.25/src/internet/model/ipv4-queue-disc-item.cc	2016-10-03 20:57:08.324247036 -0700
+++ ns-3.26/src/internet/model/ipv4-queue-disc-item.cc	2016-10-03 19:49:01.626387809 -0700
@@ -79,4 +79,20 @@
   ;
 }
 
+bool
+Ipv4QueueDiscItem::GetUint8Value (QueueItem::Uint8Values field, uint8_t& value) const
+{
+  bool ret = false;
+
+  switch (field)
+    {
+    case IP_DSFIELD:
+      value = m_header.GetTos ();
+      ret = true;
+      break;
+    }
+
+  return ret;
+}
+
 } // namespace ns3
diff -Naur ns-3.25/src/internet/model/ipv4-queue-disc-item.h ns-3.26/src/internet/model/ipv4-queue-disc-item.h
--- ns-3.25/src/internet/model/ipv4-queue-disc-item.h	2016-10-03 20:57:08.324247036 -0700
+++ ns-3.26/src/internet/model/ipv4-queue-disc-item.h	2016-10-03 19:49:01.627387802 -0700
@@ -29,7 +29,8 @@
 namespace ns3 {
 
 /**
- * \ingroup internet
+ * \ingroup ipv4
+ * \ingroup traffic-control
  *
  * Ipv4QueueDiscItem is a subclass of QueueDiscItem which stores IPv4 packets.
  * Header and payload are kept separate to allow the queue disc to manipulate
@@ -69,6 +70,15 @@
    */
   virtual void Print (std::ostream &os) const;
 
+  /*
+   * The values for the fields of the Ipv4 header are taken from m_header and
+   * thus might differ from those present in the packet in case the header is
+   * modified after being added to the packet. However, this function is likely
+   * to be called before the header is added to the packet (i.e., before the
+   * packet is dequeued from the queue disc)
+   */
+  virtual bool GetUint8Value (Uint8Values field, uint8_t &value) const;
+
 private:
   /**
    * \brief Default constructor
@@ -90,8 +100,8 @@
    */
   Ipv4QueueDiscItem &operator = (const Ipv4QueueDiscItem &);
 
-  Ipv4Header m_header;
-  bool m_headerAdded;
+  Ipv4Header m_header;  //!< The IPv4 header.
+  bool m_headerAdded;   //!< True if the header has already been added to the packet.
 };
 
 } // namespace ns3
diff -Naur ns-3.25/src/internet/model/ipv4-raw-socket-factory.h ns-3.26/src/internet/model/ipv4-raw-socket-factory.h
--- ns-3.25/src/internet/model/ipv4-raw-socket-factory.h	2016-10-03 20:57:08.325247028 -0700
+++ ns-3.26/src/internet/model/ipv4-raw-socket-factory.h	2016-10-03 19:49:01.628387795 -0700
@@ -28,6 +28,7 @@
 
 /**
  * \ingroup socket
+ * \ingroup ipv4
  *
  * \brief API to create RAW socket instances 
  *
diff -Naur ns-3.25/src/internet/model/ipv4-raw-socket-factory-impl.h ns-3.26/src/internet/model/ipv4-raw-socket-factory-impl.h
--- ns-3.25/src/internet/model/ipv4-raw-socket-factory-impl.h	2016-10-03 20:57:08.325247028 -0700
+++ ns-3.26/src/internet/model/ipv4-raw-socket-factory-impl.h	2016-10-03 19:49:01.627387802 -0700
@@ -27,8 +27,8 @@
 
 /**
  * \ingroup socket
+ * \ingroup ipv4
  *
- * \class Ipv4RawSocketFactoryImpl
  * \brief Implementation of IPv4 raw socket factory.
  */
 class Ipv4RawSocketFactoryImpl : public Ipv4RawSocketFactory
diff -Naur ns-3.25/src/internet/model/ipv4-raw-socket-impl.cc ns-3.26/src/internet/model/ipv4-raw-socket-impl.cc
--- ns-3.25/src/internet/model/ipv4-raw-socket-impl.cc	2016-10-03 20:57:08.326247020 -0700
+++ ns-3.26/src/internet/model/ipv4-raw-socket-impl.cc	2016-10-03 19:49:01.628387795 -0700
@@ -182,6 +182,8 @@
     }
   InetSocketAddress ad = InetSocketAddress::ConvertFrom (address);
   m_dst = ad.GetIpv4 ();
+  SetIpTos (ad.GetTos ());
+
   return 0;
 }
 int 
@@ -202,6 +204,7 @@
 {
   NS_LOG_FUNCTION (this << p << flags);
   InetSocketAddress to = InetSocketAddress (m_dst, m_protocol);
+  to.SetTos (GetIpTos ());
   return SendTo (p, flags, to);
 }
 int 
@@ -218,10 +221,36 @@
     {
       return 0;
     }
+
   InetSocketAddress ad = InetSocketAddress::ConvertFrom (toAddress);
   Ptr<Ipv4> ipv4 = m_node->GetObject<Ipv4> ();
   Ipv4Address dst = ad.GetIpv4 ();
   Ipv4Address src = m_src;
+  uint8_t tos = ad.GetTos ();
+
+  uint8_t priority = GetPriority ();
+  if (tos)
+    {
+      SocketIpTosTag ipTosTag;
+      ipTosTag.SetTos (tos);
+      // This packet may already have a SocketIpTosTag (see BUG 2440)
+      p->ReplacePacketTag (ipTosTag);
+      priority = IpTos2Priority (tos);
+    }
+  if (priority)
+    {
+      SocketPriorityTag priorityTag;
+      priorityTag.SetPriority (priority);
+      p->ReplacePacketTag (priorityTag);
+    }
+
+  if (IsManualIpTtl () && GetIpTtl () != 0 && !dst.IsMulticast () && !dst.IsBroadcast ())
+    {
+      SocketIpTtlTag tag;
+      tag.SetTtl (GetIpTtl ());
+      p->AddPacketTag (tag);
+    }
+
   if (ipv4->GetRoutingProtocol ())
     {
       Ipv4Header header;
@@ -357,7 +386,23 @@
           tag.SetRecvIf (incomingInterface->GetDevice ()->GetIfIndex ());
           copy->AddPacketTag (tag);
         }
-      if (m_protocol == 1)
+
+      //Check only version 4 options
+      if (IsIpRecvTos ())
+        {
+          SocketIpTosTag ipTosTag;
+          ipTosTag.SetTos (ipHeader.GetTos ());
+          copy->AddPacketTag (ipTosTag);
+        }
+
+      if (IsIpRecvTtl ())
+        {
+          SocketIpTtlTag ipTtlTag;
+          ipTtlTag.SetTtl (ipHeader.GetTtl ());
+          copy->AddPacketTag (ipTtlTag);
+        }
+
+     if (m_protocol == 1)
         {
           Icmpv4Header icmpHeader;
           copy->PeekHeader (icmpHeader);
diff -Naur ns-3.25/src/internet/model/ipv4-raw-socket-impl.h ns-3.26/src/internet/model/ipv4-raw-socket-impl.h
--- ns-3.25/src/internet/model/ipv4-raw-socket-impl.h	2016-10-03 20:57:08.326247020 -0700
+++ ns-3.26/src/internet/model/ipv4-raw-socket-impl.h	2016-10-03 19:49:01.629387787 -0700
@@ -14,9 +14,10 @@
 class Node;
 
 /**
- * \class Ipv4RawSocketImpl
- * \brief IPv4 raw socket.
  * \ingroup socket
+ * \ingroup ipv4
+ *
+ * \brief IPv4 raw socket.
  *
  * A RAW Socket typically is used to access specific IP layers not usually
  * available through L4 sockets, e.g., ICMP. The implementer should take
diff -Naur ns-3.25/src/internet/model/ipv4-route.h ns-3.26/src/internet/model/ipv4-route.h
--- ns-3.25/src/internet/model/ipv4-route.h	2016-10-03 20:57:08.327247012 -0700
+++ ns-3.26/src/internet/model/ipv4-route.h	2016-10-03 19:49:01.630387780 -0700
@@ -33,7 +33,7 @@
 /**
  * \ingroup ipv4Routing
  *
- *\brief Ipv4 route cache entry (similar to Linux struct rtable)
+ *\brief IPv4 route cache entry (similar to Linux struct rtable)
  *
  * This is a reference counted object.  In the future, we will add other 
  * entries from struct dst_entry, struct rtable, and struct dst_ops as needed.
diff -Naur ns-3.25/src/internet/model/ipv4-routing-protocol.h ns-3.26/src/internet/model/ipv4-routing-protocol.h
--- ns-3.25/src/internet/model/ipv4-routing-protocol.h	2016-10-03 20:57:08.328247004 -0700
+++ ns-3.26/src/internet/model/ipv4-routing-protocol.h	2016-10-03 19:49:01.630387780 -0700
@@ -34,9 +34,14 @@
 class NetDevice;
 
 /**
- * \ingroup internet 
- * \defgroup ipv4Routing Ipv4RoutingProtocol 
+ * \ingroup internet
+ * \defgroup ipv4Routing IPv4 Routing Protocols.
+ *
+ * The classes in this group implement different routing protocols
+ * for IPv4. Other modules could implement further protocols
+ * (e.g., AODV, OLSR, etc.).
  */
+
 /**
  * \ingroup ipv4Routing
  * \brief Abstract base class for IPv4 routing protocols. 
diff -Naur ns-3.25/src/internet/model/ipv4-routing-table-entry.h ns-3.26/src/internet/model/ipv4-routing-table-entry.h
--- ns-3.25/src/internet/model/ipv4-routing-table-entry.h	2016-10-03 20:57:08.328247004 -0700
+++ ns-3.26/src/internet/model/ipv4-routing-table-entry.h	2016-10-03 19:49:01.631387772 -0700
@@ -29,7 +29,7 @@
 namespace ns3 {
 
 /**
- * \ingroup internet
+ * \ingroup ipv4Routing
  *
  * A record of an IPv4 routing table entry for Ipv4GlobalRouting and 
  * Ipv4StaticRouting.  This is not a reference counted object.
@@ -188,7 +188,7 @@
 std::ostream& operator<< (std::ostream& os, Ipv4RoutingTableEntry const& route);
 
 /**
- * \ingroup internet
+ * \ingroup ipv4Routing
  *
  * \brief A record of an IPv4 multicast route for Ipv4GlobalRouting and Ipv4StaticRouting
  */
diff -Naur ns-3.25/src/internet/model/ipv4-static-routing.cc ns-3.26/src/internet/model/ipv4-static-routing.cc
--- ns-3.25/src/internet/model/ipv4-static-routing.cc	2016-10-03 20:57:08.329246997 -0700
+++ ns-3.26/src/internet/model/ipv4-static-routing.cc	2016-10-03 19:49:01.632387765 -0700
@@ -543,7 +543,7 @@
     {
       NS_LOG_LOGIC ("Forwarding disabled for this interface");
       ecb (p, ipHeader, Socket::ERROR_NOROUTETOHOST);
-      return false;
+      return true;
     }
   // Next, try to find a route
   Ptr<Ipv4Route> rtentry = LookupStatic (ipHeader.GetDestination ());
diff -Naur ns-3.25/src/internet/model/ipv4-static-routing.h ns-3.26/src/internet/model/ipv4-static-routing.h
--- ns-3.25/src/internet/model/ipv4-static-routing.h	2016-10-03 20:57:08.330246989 -0700
+++ ns-3.26/src/internet/model/ipv4-static-routing.h	2016-10-03 19:49:01.632387765 -0700
@@ -44,11 +44,7 @@
 class Node;
 
 /**
- * \ingroup internet
- * \defgroup ipv4StaticRouting Ipv4StaticRouting
- */
-/**
- * \ingroup ipv4StaticRouting
+ * \ingroup ipv4Routing
  * 
  * \brief Static routing protocol for IP version 4 stacks.
  *
diff -Naur ns-3.25/src/internet/model/ipv6-address-generator.h ns-3.26/src/internet/model/ipv6-address-generator.h
--- ns-3.25/src/internet/model/ipv6-address-generator.h	2016-10-03 20:57:08.331246981 -0700
+++ ns-3.26/src/internet/model/ipv6-address-generator.h	2016-10-03 19:49:01.634387750 -0700
@@ -26,6 +26,7 @@
 
 /**
  * \ingroup address
+ * \ingroup ipv6
  *
  * \brief This generator assigns addresses sequentially from a provided
  * network address; used in topology code. It also keeps track of all
diff -Naur ns-3.25/src/internet/model/ipv6-autoconfigured-prefix.h ns-3.26/src/internet/model/ipv6-autoconfigured-prefix.h
--- ns-3.25/src/internet/model/ipv6-autoconfigured-prefix.h	2016-10-03 20:57:08.332246973 -0700
+++ ns-3.26/src/internet/model/ipv6-autoconfigured-prefix.h	2016-10-03 19:49:01.635387742 -0700
@@ -34,7 +34,8 @@
 {
 
 /**
- * \class Ipv6AutoconfiguredPrefix
+ * \ingroup ipv6
+ *
  * \brief Router prefix information.
  */
 class Ipv6AutoconfiguredPrefix : public Object
diff -Naur ns-3.25/src/internet/model/ipv6-end-point-demux.h ns-3.26/src/internet/model/ipv6-end-point-demux.h
--- ns-3.25/src/internet/model/ipv6-end-point-demux.h	2016-10-03 20:57:08.333246965 -0700
+++ ns-3.26/src/internet/model/ipv6-end-point-demux.h	2016-10-03 19:49:01.636387735 -0700
@@ -31,8 +31,9 @@
 class Ipv6EndPoint;
 
 /**
- * \class Ipv6EndPointDemux
- * \brief Demultiplexor for end points.
+ * \ingroup ipv6
+ *
+ * \brief Demultiplexer for end points.
  */
 class Ipv6EndPointDemux
 {
diff -Naur ns-3.25/src/internet/model/ipv6-end-point.h ns-3.26/src/internet/model/ipv6-end-point.h
--- ns-3.25/src/internet/model/ipv6-end-point.h	2016-10-03 20:57:08.334246958 -0700
+++ ns-3.26/src/internet/model/ipv6-end-point.h	2016-10-03 19:49:01.636387735 -0700
@@ -36,9 +36,11 @@
 class Packet;
 
 /**
- * \brief A representation of an internet IPv6 endpoint/connection
+ * \ingroup ipv6
  *
- * This class provides an internet four-tuple (source and destination ports
+ * \brief A representation of an IPv6 endpoint/connection
+ *
+ * This class provides an Internet four-tuple (source and destination ports
  * and addresses).  These are used in the ns3::Ipv6EndPointDemux as targets
  * of lookups.  The class also has a callback for notification to higher
  * layers that a packet from a lower layer was received.  In the ns3
diff -Naur ns-3.25/src/internet/model/ipv6-extension.cc ns-3.26/src/internet/model/ipv6-extension.cc
--- ns-3.25/src/internet/model/ipv6-extension.cc	2016-10-03 20:57:08.336246942 -0700
+++ ns-3.26/src/internet/model/ipv6-extension.cc	2016-10-03 19:49:01.639387713 -0700
@@ -832,7 +832,7 @@
   static TypeId tid = TypeId ("ns3::Ipv6ExtensionRoutingDemux")
     .SetParent<Object> ()
     .SetGroupName ("Internet")
-    .AddAttribute ("Routing Extensions", "The set of IPv6 Routing extensions registered with this demux.",
+    .AddAttribute ("RoutingExtensions", "The set of IPv6 Routing extensions registered with this demux.",
                    ObjectVectorValue (),
                    MakeObjectVectorAccessor (&Ipv6ExtensionRoutingDemux::m_extensionsRouting),
                    MakeObjectVectorChecker<Ipv6ExtensionRouting> ())
diff -Naur ns-3.25/src/internet/model/ipv6-extension-demux.h ns-3.26/src/internet/model/ipv6-extension-demux.h
--- ns-3.25/src/internet/model/ipv6-extension-demux.h	2016-10-03 20:57:08.335246950 -0700
+++ ns-3.26/src/internet/model/ipv6-extension-demux.h	2016-10-03 19:49:01.637387728 -0700
@@ -32,7 +32,8 @@
 class Node;
 
 /**
- * \class Ipv6ExtensionDemux
+ * \ingroup ipv6HeaderExt
+ *
  * \brief Demultiplexes IPv6 extensions.
  */
 class Ipv6ExtensionDemux : public Object
diff -Naur ns-3.25/src/internet/model/ipv6-extension.h ns-3.26/src/internet/model/ipv6-extension.h
--- ns-3.25/src/internet/model/ipv6-extension.h	2016-10-03 20:57:08.337246934 -0700
+++ ns-3.26/src/internet/model/ipv6-extension.h	2016-10-03 19:49:01.639387713 -0700
@@ -40,7 +40,13 @@
 namespace ns3 {
 
 /**
- * \class Ipv6Extension
+ * \ingroup ipv6
+ * \defgroup ipv6HeaderExt IPV6 Header extension system.
+ */
+
+/**
+ * \ingroup ipv6HeaderExt
+ *
  * \brief IPv6 Extension base
  * If you want to implement a new IPv6 extension, all you have to do is
  * implement a subclass of this class and add it to an Ipv6ExtensionDemux.
@@ -155,7 +161,8 @@
 };
 
 /**
- * \class Ipv6ExtensionHopByHop
+ * \ingroup ipv6HeaderExt
+ *
  * \brief IPv6 Extension "Hop By Hop"
  */
 class Ipv6ExtensionHopByHop : public Ipv6Extension
@@ -199,7 +206,8 @@
 };
 
 /**
- * \class Ipv6ExtensionDestination
+ * \ingroup ipv6HeaderExt
+ *
  * \brief IPv6 Extension Destination
  */
 class Ipv6ExtensionDestination : public Ipv6Extension
@@ -243,7 +251,8 @@
 };
 
 /**
- * \class Ipv6ExtensionFragment
+ * \ingroup ipv6HeaderExt
+ *
  * \brief IPv6 Extension Fragment
  */
 class Ipv6ExtensionFragment : public Ipv6Extension
@@ -291,10 +300,12 @@
   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
+   * \brief Fragment a packet.
+   *
+   * \param packet the packet.
+   * \param ipv6Header the IPv6 header.
+   * \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, Ipv6Header ipv6Header, uint32_t fragmentSize, std::list<Ipv6PayloadHeaderPair>& listFragments);
 
@@ -306,8 +317,9 @@
 
 private:
   /**
-   * \class Fragments
-   * \brief A Set of Fragment
+   * \ingroup ipv6HeaderExt
+   *
+   * \brief This class stores the fragments of a packet waiting to be rebuilt.
    */
   class Fragments : public SimpleRefCount<Fragments>
   {
@@ -421,8 +433,10 @@
 };
 
 /**
- * \class Ipv6ExtensionRouting
- * \brief IPv6 Extension Routing
+ * \ingroup ipv6HeaderExt
+ *
+ * \brief IPv6 Extension Routing.
+ *
  * If you want to implement a new IPv6 routing extension, all you have to do is
  * implement a subclass of this class and add it to an Ipv6ExtensionRoutingDemux.
  */
@@ -473,7 +487,8 @@
 };
 
 /**
- * \class Ipv6ExtensionRoutingDemux
+ * \ingroup ipv6HeaderExt
+ *
  * \brief IPv6 Extension Routing Demux.
  */
 class Ipv6ExtensionRoutingDemux : public Object
@@ -544,7 +559,8 @@
 };
 
 /**
- * \class Ipv6ExtensionLooseRouting
+ * \ingroup ipv6HeaderExt
+ *
  * \brief IPv6 Extension Loose Routing
  */
 class Ipv6ExtensionLooseRouting : public Ipv6ExtensionRouting
@@ -588,7 +604,8 @@
 };
 
 /**
- * \class Ipv6ExtensionESP
+ * \ingroup ipv6HeaderExt
+ *
  * \brief IPv6 Extension ESP (Encapsulating Security Payload)
  */
 class Ipv6ExtensionESP : public Ipv6Extension
@@ -632,7 +649,8 @@
 };
 
 /**
- * \class Ipv6ExtensionAH
+ * \ingroup ipv6HeaderExt
+ *
  * \brief IPv6 Extension AH (Authentication Header)
  */
 class Ipv6ExtensionAH : public Ipv6Extension
diff -Naur ns-3.25/src/internet/model/ipv6-extension-header.h ns-3.26/src/internet/model/ipv6-extension-header.h
--- ns-3.25/src/internet/model/ipv6-extension-header.h	2016-10-03 20:57:08.336246942 -0700
+++ ns-3.26/src/internet/model/ipv6-extension-header.h	2016-10-03 19:49:01.638387720 -0700
@@ -33,7 +33,8 @@
 {
 
 /**
- * \class Ipv6ExtensionHeader
+ * \ingroup ipv6HeaderExt
+ *
  * \brief Header for IPv6 Extension.
  */
 class Ipv6ExtensionHeader : public Header 
@@ -130,9 +131,11 @@
 };
 
 /**
- * \class OptionField
- * \brief Option field for an IPv6ExtensionHeader
- * Enables adding options to an IPv6ExtensionHeader
+ * \ingroup ipv6HeaderExt
+ *
+ * \brief Option field for an IPv6ExtensionHeader.
+ *
+ * Enables adding options to an IPv6ExtensionHeader.
  *
  * Implementor's note: Make sure to add the result of
  * OptionField::GetSerializedSize () to your IPv6ExtensionHeader::GetSerializedSize ()
@@ -213,7 +216,8 @@
 };
 
 /**
- * \class Ipv6ExtensionHopByHopHeader
+ * \ingroup ipv6HeaderExt
+ *
  * \brief Header of IPv6 Extension "Hop by Hop"
  */
 class Ipv6ExtensionHopByHopHeader : public Ipv6ExtensionHeader, public OptionField
@@ -269,7 +273,8 @@
 };
 
 /**
- * \class Ipv6ExtensionDestinationHeader
+ * \ingroup ipv6HeaderExt
+ *
  * \brief Header of IPv6 Extension Destination
  */
 class Ipv6ExtensionDestinationHeader : public Ipv6ExtensionHeader, public OptionField
@@ -325,7 +330,8 @@
 };
 
 /**
- * \class Ipv6ExtensionFragmentHeader
+ * \ingroup ipv6HeaderExt
+ *
  * \brief Header of IPv6 Extension Fragment
  */
 class Ipv6ExtensionFragmentHeader : public Ipv6ExtensionHeader
@@ -428,7 +434,8 @@
 };
 
 /**
- * \class Ipv6ExtensionRoutingHeader
+ * \ingroup ipv6HeaderExt
+ *
  * \brief Header of IPv6 Extension Routing
  */
 class Ipv6ExtensionRoutingHeader : public Ipv6ExtensionHeader
@@ -519,7 +526,8 @@
 };
 
 /**
- * \class Ipv6ExtensionLooseRoutingHeader
+ * \ingroup ipv6HeaderExt
+ *
  * \brief Header of IPv6 Extension Routing : Type 0 (Loose Routing)
  */
 class Ipv6ExtensionLooseRoutingHeader : public Ipv6ExtensionRoutingHeader
@@ -618,7 +626,8 @@
 };
 
 /**
- * \class Ipv6ExtensionESPHeader
+ * \ingroup ipv6HeaderExt
+ *
  * \brief Header of IPv6 Extension ESP
  */
 class Ipv6ExtensionESPHeader : public Ipv6ExtensionHeader
@@ -674,7 +683,8 @@
 };
 
 /**
- * \class Ipv6ExtensionAHHeader
+ * \ingroup ipv6HeaderExt
+ *
  * \brief Header of IPv6 Extension AH
  */
 class Ipv6ExtensionAHHeader : public Ipv6ExtensionHeader
diff -Naur ns-3.25/src/internet/model/ipv6.h ns-3.26/src/internet/model/ipv6.h
--- ns-3.25/src/internet/model/ipv6.h	2016-10-03 20:57:08.355246794 -0700
+++ ns-3.26/src/internet/model/ipv6.h	2016-10-03 19:49:01.657387578 -0700
@@ -43,7 +43,7 @@
 
 /**
  * \ingroup internet
- * \defgroup ipv6 Ipv6
+ * \defgroup ipv6 IPv6 classes and sub-modules
  */
 
 /**
diff -Naur ns-3.25/src/internet/model/ipv6-header.h ns-3.26/src/internet/model/ipv6-header.h
--- ns-3.25/src/internet/model/ipv6-header.h	2016-10-03 20:57:08.338246926 -0700
+++ ns-3.26/src/internet/model/ipv6-header.h	2016-10-03 19:49:01.640387705 -0700
@@ -27,7 +27,8 @@
 namespace ns3 {
 
 /**
- * \class Ipv6Header
+ * \ingroup ipv6
+ *
  * \brief Packet header for IPv6
  */
 class Ipv6Header : public Header
diff -Naur ns-3.25/src/internet/model/ipv6-interface-address.h ns-3.26/src/internet/model/ipv6-interface-address.h
--- ns-3.25/src/internet/model/ipv6-interface-address.h	2016-10-03 20:57:08.339246919 -0700
+++ ns-3.26/src/internet/model/ipv6-interface-address.h	2016-10-03 19:49:01.641387698 -0700
@@ -30,7 +30,8 @@
 
 /**
  * \ingroup address
- * \class Ipv6InterfaceAddress
+ * \ingroup ipv6
+ *
  * \brief IPv6 address associated with an interface.
  */
 class Ipv6InterfaceAddress
diff -Naur ns-3.25/src/internet/model/ipv6-interface.cc ns-3.26/src/internet/model/ipv6-interface.cc
--- ns-3.25/src/internet/model/ipv6-interface.cc	2016-10-03 20:57:08.339246919 -0700
+++ ns-3.26/src/internet/model/ipv6-interface.cc	2016-10-03 19:49:01.641387698 -0700
@@ -21,17 +21,17 @@
 #include "ns3/log.h"
 #include "ns3/node.h"
 #include "ns3/packet.h"
+#include "ns3/net-device.h"
+#include "ns3/mac16-address.h"
+#include "ns3/mac64-address.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"
-#include "ns3/mac64-address.h"
 #include "ipv6-l3-protocol.h"
 #include "icmpv6-l4-protocol.h"
+#include "ipv6-header.h"
 #include "ndisc-cache.h"
-#include "ns3/traffic-control-layer.h"
 
 namespace ns3
 {
@@ -114,7 +114,7 @@
         }
       else
         {
-          NS_ASSERT_MSG (false, "IPv6 autoconf for this kind of address not implemented.");
+          NS_FATAL_ERROR ("IPv6 autoconf for this kind of address not implemented.");
         }
     }
   else
@@ -299,8 +299,10 @@
           i++;
         }
     }
-
-  NS_ASSERT_MSG (false, "Address " << index << " not found");
+  else
+    {
+      NS_FATAL_ERROR ("index " << index << " out of bounds");
+    }
   Ipv6InterfaceAddress addr;
   return addr;  /* quiet compiler */
 }
@@ -318,7 +320,7 @@
 
   if (m_addresses.size () < index)
     {
-      NS_ASSERT_MSG (false, "Try to remove index that don't exist in Ipv6Interface::RemoveAddress");
+      NS_FATAL_ERROR ("Removing index that does not exist in Ipv6Interface::RemoveAddress");
     }
 
   for (Ipv6InterfaceAddressListI it = m_addresses.begin (); it != m_addresses.end (); ++it)
@@ -332,8 +334,7 @@
 
       i++;
     }
-
-  NS_ASSERT_MSG (false, "Address " << index << " not found");
+  NS_FATAL_ERROR ("Address " << index << " not found");
   Ipv6InterfaceAddress addr;
   return addr;  /* quiet compiler */
 }
diff -Naur ns-3.25/src/internet/model/ipv6-interface.h ns-3.26/src/internet/model/ipv6-interface.h
--- ns-3.25/src/internet/model/ipv6-interface.h	2016-10-03 20:57:08.340246911 -0700
+++ ns-3.26/src/internet/model/ipv6-interface.h	2016-10-03 19:49:01.642387690 -0700
@@ -22,12 +22,10 @@
 #define IPV6_INTERFACE_H
 
 #include <list>
-
-#include "ns3/ipv6-header.h"
-#include "ns3/ipv6-interface-address.h"
 #include "ns3/ptr.h"
 #include "ns3/object.h"
-#include "ns3/timer.h"
+#include "ipv6-interface-address.h"
+#include "ns3/traffic-control-layer.h"
 
 namespace ns3
 {
@@ -35,12 +33,15 @@
 class NetDevice;
 class Packet;
 class Node;
-class TrafficControlLayer;
 class NdiscCache;
+class Ipv6InterfaceAddress;
+class Ipv6Address;
+class Ipv6Header;
 
 /**
- * \class Ipv6Interface
- * \brief The IPv6 representation of a network interface
+ * \ingroup ipv6
+ *
+ * \brief The IPv6 representation of a network interface.
  *
  * By default IPv6 interfaces are created in the "down" state
  * with IP "fe80::1" and a /64 prefix. Before becoming usable,
diff -Naur ns-3.25/src/internet/model/ipv6-l3-protocol.cc ns-3.26/src/internet/model/ipv6-l3-protocol.cc
--- ns-3.25/src/internet/model/ipv6-l3-protocol.cc	2016-10-03 20:57:08.341246903 -0700
+++ ns-3.26/src/internet/model/ipv6-l3-protocol.cc	2016-10-03 19:49:01.643387683 -0700
@@ -975,6 +975,32 @@
       packet->RemoveAtEnd (packet->GetSize () - hdr.GetPayloadLength ());
     }
 
+  // the packet is valid, we update the NDISC cache entry (if present)
+  Ptr<NdiscCache> ndiscCache = ipv6Interface->GetNdiscCache ();
+  if (ndiscCache)
+    {
+      // case one, it's a a direct routing.
+      NdiscCache::Entry *entry = ndiscCache->Lookup (hdr.GetSourceAddress ());
+      if (entry)
+        {
+          entry->UpdateReachableTimer ();
+        }
+      else
+        {
+          // It's not in the direct routing, so it's the router, and it could have multiple IP addresses.
+          // In doubt, update all of them.
+          // Note: it's a confirmed behavior for Linux routers.
+          std::list<NdiscCache::Entry *> entryList = ndiscCache->LookupInverse (from);
+          std::list<NdiscCache::Entry *>::iterator iter;
+          for (iter = entryList.begin (); iter != entryList.end (); iter ++)
+            {
+              (*iter)->UpdateReachableTimer ();
+            }
+        }
+    }
+
+
+
   /* forward up to IPv6 raw sockets */
   for (SocketList::iterator it = m_sockets.begin (); it != m_sockets.end (); ++it)
     {
@@ -1204,7 +1230,7 @@
   NS_LOG_LOGIC ("Forwarding logic for node: " << m_node->GetId ());
 
   // Drop RFC 3849 packets: 2001:db8::/32
-  if (header.GetDestinationAddress().IsDocumentation())
+  if (header.GetDestinationAddress().IsDocumentation ())
     {
       NS_LOG_WARN ("Received a packet for 2001:db8::/32 (documentation class).  Drop.");
       m_dropTrace (header, p, DROP_ROUTE_ERROR, m_node->GetObject<Ipv6> (), 0);
@@ -1274,6 +1300,9 @@
           icmpv6->SendRedirection (copy, linkLocal, src, target, dst, Address ());
         }
     }
+  // in case the packet still has a priority tag attached, remove it
+  SocketPriorityTag priorityTag;
+  packet->RemovePacketTag (priorityTag);
   int32_t interface = GetInterfaceForDevice (rtentry->GetOutputDevice ());
   m_unicastForwardTrace (ipHeader, packet, interface);
   SendRealOut (rtentry, packet, ipHeader);
diff -Naur ns-3.25/src/internet/model/ipv6-l3-protocol.h ns-3.26/src/internet/model/ipv6-l3-protocol.h
--- ns-3.25/src/internet/model/ipv6-l3-protocol.h	2016-10-03 20:57:08.342246895 -0700
+++ ns-3.26/src/internet/model/ipv6-l3-protocol.h	2016-10-03 19:49:01.644387675 -0700
@@ -45,7 +45,8 @@
 class Ipv6AutoconfiguredPrefix;
 
 /**
- * \class Ipv6L3Protocol
+ * \ingroup ipv6
+ *
  * \brief IPv6 layer implementation.
  *
  * This class contains two distinct groups of trace sources.  The
diff -Naur ns-3.25/src/internet/model/ipv6-list-routing.cc ns-3.26/src/internet/model/ipv6-list-routing.cc
--- ns-3.25/src/internet/model/ipv6-list-routing.cc	2016-10-03 20:57:08.343246887 -0700
+++ ns-3.26/src/internet/model/ipv6-list-routing.cc	2016-10-03 19:49:01.645387668 -0700
@@ -115,7 +115,7 @@
     {
       NS_LOG_LOGIC ("Forwarding disabled for this interface");
       ecb (p, header, Socket::ERROR_NOROUTETOHOST);
-      return false;
+      return true;
     }
 
   // We disable error callback for the called protocols.
diff -Naur ns-3.25/src/internet/model/ipv6-list-routing.h ns-3.26/src/internet/model/ipv6-list-routing.h
--- ns-3.25/src/internet/model/ipv6-list-routing.h	2016-10-03 20:57:08.343246887 -0700
+++ ns-3.26/src/internet/model/ipv6-list-routing.h	2016-10-03 19:49:01.645387668 -0700
@@ -25,13 +25,8 @@
 namespace ns3 {
 
 /**
- * \ingroup internet
- * \defgroup ipv6ListRouting Ipv6 List Routing
- */
-
-/**
- * \ingroup ipv6ListRouting
- * \class Ipv6ListRouting
+ * \ingroup ipv6Routing
+ *
  * \brief Hold list of Ipv6RoutingProtocol objects.
  *
  * This class is a specialization of Ipv6RoutingProtocol that allows
diff -Naur ns-3.25/src/internet/model/ipv6-option-demux.h ns-3.26/src/internet/model/ipv6-option-demux.h
--- ns-3.25/src/internet/model/ipv6-option-demux.h	2016-10-03 20:57:08.344246880 -0700
+++ ns-3.26/src/internet/model/ipv6-option-demux.h	2016-10-03 19:49:01.646387660 -0700
@@ -32,7 +32,8 @@
 class Node;
 
 /**
- * \class Ipv6OptionDemux
+ * \ingroup ipv6HeaderExt
+ *
  * \brief IPv6 Option Demux.
  */
 class Ipv6OptionDemux : public Object
diff -Naur ns-3.25/src/internet/model/ipv6-option.h ns-3.26/src/internet/model/ipv6-option.h
--- ns-3.25/src/internet/model/ipv6-option.h	2016-10-03 20:57:08.345246872 -0700
+++ ns-3.26/src/internet/model/ipv6-option.h	2016-10-03 19:49:01.647387653 -0700
@@ -36,7 +36,8 @@
 {
 
 /**
- * \class Ipv6Option
+ * \ingroup ipv6HeaderExt
+ *
  * \brief IPv6 Option base
  * 
  * If you want to implement a new IPv6 option, all you have to do is
@@ -88,7 +89,8 @@
 };
 
 /**
- * \class Ipv6OptionPad1
+ * \ingroup ipv6HeaderExt
+ *
  * \brief IPv6 Option Pad1
  */
 class Ipv6OptionPad1 : public Ipv6Option
@@ -135,7 +137,8 @@
 };
 
 /**
- * \class Ipv6OptionPadn
+ * \ingroup ipv6HeaderExt
+ *
  * \brief IPv6 Option Padn
  */
 class Ipv6OptionPadn : public Ipv6Option
@@ -182,7 +185,8 @@
 };
 
 /**
- * \class Ipv6OptionJumbogram
+ * \ingroup ipv6HeaderExt
+ *
  * \brief IPv6 Option Jumbogram
  */
 class Ipv6OptionJumbogram : public Ipv6Option
@@ -228,7 +232,8 @@
 };
 
 /**
- * \class Ipv6OptionRouterAlert
+ * \ingroup ipv6HeaderExt
+ *
  * \brief IPv6 Option Router Alert
  */
 class Ipv6OptionRouterAlert : public Ipv6Option
diff -Naur ns-3.25/src/internet/model/ipv6-option-header.h ns-3.26/src/internet/model/ipv6-option-header.h
--- ns-3.25/src/internet/model/ipv6-option-header.h	2016-10-03 20:57:08.344246880 -0700
+++ ns-3.26/src/internet/model/ipv6-option-header.h	2016-10-03 19:49:01.647387653 -0700
@@ -29,7 +29,8 @@
 {
 
 /**
- * \class Ipv6OptionHeader
+ * \ingroup ipv6HeaderExt
+ *
  * \brief Header for IPv6 Option.
  */
 class Ipv6OptionHeader : public Header 
@@ -148,7 +149,8 @@
 };
 
 /**
- * \class Ipv6OptionPad1Header
+ * \ingroup ipv6HeaderExt
+ *
  * \brief Header of IPv6 Option Pad1
  */
 class Ipv6OptionPad1Header : public Ipv6OptionHeader
@@ -204,7 +206,8 @@
 };
 
 /**
- * \class Ipv6OptionPadnHeader
+ * \ingroup ipv6HeaderExt
+ *
  * \brief Header of IPv6 Option Padn
  */
 class Ipv6OptionPadnHeader : public Ipv6OptionHeader
@@ -261,7 +264,8 @@
 };
 
 /**
- * \class Ipv6OptionJumbogramHeader
+ * \ingroup ipv6HeaderExt
+ *
  * \brief Header of IPv6 Option Jumbogram
  */
 class Ipv6OptionJumbogramHeader : public Ipv6OptionHeader
@@ -341,7 +345,8 @@
 };
 
 /**
- * \class Ipv6OptionRouterAlertHeader
+ * \ingroup ipv6HeaderExt
+ *
  * \brief Header of IPv6 Option Router Alert
  */
 class Ipv6OptionRouterAlertHeader : public Ipv6OptionHeader
diff -Naur ns-3.25/src/internet/model/ipv6-packet-filter.cc ns-3.26/src/internet/model/ipv6-packet-filter.cc
--- ns-3.25/src/internet/model/ipv6-packet-filter.cc	2016-10-03 20:57:08.345246872 -0700
+++ ns-3.26/src/internet/model/ipv6-packet-filter.cc	2016-10-03 19:49:01.648387645 -0700
@@ -18,10 +18,13 @@
  *
  * Authors:  Stefano Avallone <stavallo@unina.it>
  *           Tom Henderson <tomhend@u.washington.edu>
+ *           Pasquale Imputato <p.imputato@gmail.com>
  */
 
 #include "ns3/log.h"
 #include "ns3/enum.h"
+#include "ns3/tcp-header.h"
+#include "ns3/udp-header.h"
 #include "ipv6-queue-disc-item.h"
 #include "ipv6-packet-filter.h"
 
@@ -60,84 +63,87 @@
 
 // ------------------------------------------------------------------------- //
 
-NS_OBJECT_ENSURE_REGISTERED (PfifoFastIpv6PacketFilter);
+NS_OBJECT_ENSURE_REGISTERED (FqCoDelIpv6PacketFilter);
 
-TypeId 
-PfifoFastIpv6PacketFilter::GetTypeId (void)
+TypeId
+FqCoDelIpv6PacketFilter::GetTypeId (void)
 {
-  static TypeId tid = TypeId ("ns3::PfifoFastIpv6PacketFilter")
+  static TypeId tid = TypeId ("ns3::FqCoDelIpv6PacketFilter")
     .SetParent<Ipv6PacketFilter> ()
     .SetGroupName ("Internet")
-    .AddConstructor<PfifoFastIpv6PacketFilter> ()
+    .AddConstructor<FqCoDelIpv6PacketFilter> ()
+    .AddAttribute ("Perturbation",
+                   "The salt used as an additional input to the hash function of this filter",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&FqCoDelIpv6PacketFilter::m_perturbation),
+                   MakeUintegerChecker<uint32_t> ())
   ;
   return tid;
 }
 
-PfifoFastIpv6PacketFilter::PfifoFastIpv6PacketFilter ()
+FqCoDelIpv6PacketFilter::FqCoDelIpv6PacketFilter ()
 {
   NS_LOG_FUNCTION (this);
 }
 
-PfifoFastIpv6PacketFilter::~PfifoFastIpv6PacketFilter()
+FqCoDelIpv6PacketFilter::~FqCoDelIpv6PacketFilter ()
 {
   NS_LOG_FUNCTION (this);
 }
 
 int32_t
-PfifoFastIpv6PacketFilter::DoClassify (Ptr<QueueDiscItem> item) const
+FqCoDelIpv6PacketFilter::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);
+  Ipv6Header hdr = ipv6Item->GetHeader ();
+  Ipv6Address src = hdr.GetSourceAddress ();
+  Ipv6Address dest = hdr.GetDestinationAddress ();
+  uint8_t prot = hdr.GetNextHeader ();
+
+  TcpHeader tcpHdr;
+  UdpHeader udpHdr;
+  uint16_t srcPort = 0;
+  uint16_t destPort = 0;
+
+  Ptr<Packet> pkt = ipv6Item->GetPacket ();
+
+  if (prot == 6) // TCP
+    {
+      pkt->PeekHeader (tcpHdr);
+      srcPort = tcpHdr.GetSourcePort ();
+      destPort = tcpHdr.GetDestinationPort ();
+    }
+  else if (prot == 17) // UDP
+    {
+      pkt->PeekHeader (udpHdr);
+      srcPort = udpHdr.GetSourcePort ();
+      destPort = udpHdr.GetDestinationPort ();
+    }
+
+  /* serialize the 5-tuple and the perturbation in buf */
+  uint8_t buf[41];
+  src.Serialize (buf);
+  dest.Serialize (buf + 16);
+  buf[32] = prot;
+  buf[33] = (srcPort >> 8) & 0xff;
+  buf[34] = srcPort & 0xff;
+  buf[35] = (destPort >> 8) & 0xff;
+  buf[36] = destPort & 0xff;
+  buf[37] = (m_perturbation >> 24) & 0xff;
+  buf[38] = (m_perturbation >> 16) & 0xff;
+  buf[39] = (m_perturbation >> 8) & 0xff;
+  buf[40] = m_perturbation & 0xff;
 
-  return band;
-}
+  /* Linux calculates the jhash2 (jenkins hash), we calculate the murmur3 */
+  uint32_t hash = Hash32 ((char*) buf, 41);
 
-uint32_t
-PfifoFastIpv6PacketFilter::DscpToBand (Ipv6Header::DscpType dscpType) const
-{
-  NS_LOG_FUNCTION (this);
+  NS_LOG_DEBUG ("Found Ipv6 packet; hash of the five tuple " << hash);
 
-  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;
+  return hash;
 }
 
 } // namespace ns3
diff -Naur ns-3.25/src/internet/model/ipv6-packet-filter.h ns-3.26/src/internet/model/ipv6-packet-filter.h
--- ns-3.25/src/internet/model/ipv6-packet-filter.h	2016-10-03 20:57:08.346246864 -0700
+++ ns-3.26/src/internet/model/ipv6-packet-filter.h	2016-10-03 19:49:01.648387645 -0700
@@ -18,6 +18,7 @@
  *
  * Authors:  Stefano Avallone <stavallo@unina.it>
  *           Tom Henderson <tomhend@u.washington.edu>
+ *           Pasquale Imputato <p.imputato@gmail.com>
  */
 
 #ifndef IPV6_PACKET_FILTER_H
@@ -29,7 +30,8 @@
 namespace ns3 {
 
 /**
- * \ingroup internet
+ * \ingroup ipv6
+ * \ingroup traffic-control
  *
  * Ipv6PacketFilter is the abstract base class for filters defined for IPv6 packets.
  */
@@ -53,40 +55,11 @@
 /**
  * \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
+ * FqCoDelIpv6PacketFilter is the filter to be added to the FQCoDel
+ * queue disc to simulate the behavior of the fq-codel Linux queue disc.
  *
  */
-class PfifoFastIpv6PacketFilter: public Ipv6PacketFilter {
+class FqCoDelIpv6PacketFilter : public Ipv6PacketFilter {
 public:
   /**
    * \brief Get the type ID.
@@ -94,12 +67,13 @@
    */
   static TypeId GetTypeId (void);
 
-  PfifoFastIpv6PacketFilter ();
-  virtual ~PfifoFastIpv6PacketFilter ();
+  FqCoDelIpv6PacketFilter ();
+  virtual ~FqCoDelIpv6PacketFilter ();
 
 private:
   virtual int32_t DoClassify (Ptr<QueueDiscItem> item) const;
-  uint32_t DscpToBand (Ipv6Header::DscpType dscpType) const;
+
+  uint32_t m_perturbation; //!< hash perturbation value
 };
 
 } // namespace ns3
diff -Naur ns-3.25/src/internet/model/ipv6-packet-info-tag.h ns-3.26/src/internet/model/ipv6-packet-info-tag.h
--- ns-3.25/src/internet/model/ipv6-packet-info-tag.h	2016-10-03 20:57:08.346246864 -0700
+++ ns-3.26/src/internet/model/ipv6-packet-info-tag.h	2016-10-03 19:49:01.649387638 -0700
@@ -31,6 +31,8 @@
 class Packet;
 
 /**
+ * \ingroup ipv6
+ *
  * \brief This class implements a tag that carries socket ancillary 
  * data to the socket interface. This is used like 
  * socket option of IP_PKTINFO/IPV6_PKTINFO in \RFC{3542}
diff -Naur ns-3.25/src/internet/model/ipv6-packet-probe.h ns-3.26/src/internet/model/ipv6-packet-probe.h
--- ns-3.25/src/internet/model/ipv6-packet-probe.h	2016-10-03 20:57:08.347246856 -0700
+++ ns-3.26/src/internet/model/ipv6-packet-probe.h	2016-10-03 19:49:01.649387638 -0700
@@ -38,6 +38,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup ipv6
+ *
  * This class is designed to probe an underlying ns3 TraceSource
  * exporting a packet, an IPv6 object, and an interface.  This probe
  * exports a trace source "Output" with arguments of type Ptr<const Packet>,
diff -Naur ns-3.25/src/internet/model/ipv6-pmtu-cache.h ns-3.26/src/internet/model/ipv6-pmtu-cache.h
--- ns-3.25/src/internet/model/ipv6-pmtu-cache.h	2016-10-03 20:57:08.348246848 -0700
+++ ns-3.26/src/internet/model/ipv6-pmtu-cache.h	2016-10-03 19:49:01.650387631 -0700
@@ -33,6 +33,7 @@
 
 /**
  * \ingroup ipv6
+ *
  * \brief This class implements the Path MTU cache, as defined by \RFC{1981}.
  *
  * The Path MTU is stored according to the destination address, and it is
diff -Naur ns-3.25/src/internet/model/ipv6-queue-disc-item.cc ns-3.26/src/internet/model/ipv6-queue-disc-item.cc
--- ns-3.25/src/internet/model/ipv6-queue-disc-item.cc	2016-10-03 20:57:08.348246848 -0700
+++ ns-3.26/src/internet/model/ipv6-queue-disc-item.cc	2016-10-03 19:49:01.650387631 -0700
@@ -79,4 +79,20 @@
   ;
 }
 
+bool
+Ipv6QueueDiscItem::GetUint8Value (QueueItem::Uint8Values field, uint8_t& value) const
+{
+  bool ret = false;
+
+  switch (field)
+    {
+    case IP_DSFIELD:
+      value = m_header.GetTrafficClass ();
+      ret = true;
+      break;
+    }
+
+  return ret;
+}
+
 } // namespace ns3
diff -Naur ns-3.25/src/internet/model/ipv6-queue-disc-item.h ns-3.26/src/internet/model/ipv6-queue-disc-item.h
--- ns-3.25/src/internet/model/ipv6-queue-disc-item.h	2016-10-03 20:57:08.348246848 -0700
+++ ns-3.26/src/internet/model/ipv6-queue-disc-item.h	2016-10-03 19:49:01.651387623 -0700
@@ -29,7 +29,8 @@
 namespace ns3 {
 
 /**
- * \ingroup internet
+ * \ingroup ipv6
+ * \ingroup traffic-control
  *
  * Ipv6QueueDiscItem is a subclass of QueueDiscItem which stores IPv6 packets.
  * Header and payload are kept separate to allow the queue disc to manipulate
@@ -69,6 +70,15 @@
    */
   virtual void Print (std::ostream &os) const;
 
+  /*
+   * The values for the fields of the Ipv6 header are taken from m_header and
+   * thus might differ from those present in the packet in case the header is
+   * modified after being added to the packet. However, this function is likely
+   * to be called before the header is added to the packet (i.e., before the
+   * packet is dequeued from the queue disc)
+   */
+  virtual bool GetUint8Value (Uint8Values field, uint8_t &value) const;
+
 private:
   /**
    * \brief Default constructor
@@ -90,8 +100,8 @@
    */
   Ipv6QueueDiscItem &operator = (const Ipv6QueueDiscItem &);
 
-  Ipv6Header m_header;
-  bool m_headerAdded;
+  Ipv6Header m_header;  //!< The IPv6 header.
+  bool m_headerAdded;   //!< True if the header has already been added to the packet.
 };
 
 } // namespace ns3
diff -Naur ns-3.25/src/internet/model/ipv6-raw-socket-factory.h ns-3.26/src/internet/model/ipv6-raw-socket-factory.h
--- ns-3.25/src/internet/model/ipv6-raw-socket-factory.h	2016-10-03 20:57:08.349246841 -0700
+++ ns-3.26/src/internet/model/ipv6-raw-socket-factory.h	2016-10-03 19:49:01.652387616 -0700
@@ -29,6 +29,7 @@
 class Socket;
 
 /**
+ * \ingroup ipv6
  * \ingroup socket
  *
  * \brief API to create IPv6 RAW socket instances 
diff -Naur ns-3.25/src/internet/model/ipv6-raw-socket-factory-impl.h ns-3.26/src/internet/model/ipv6-raw-socket-factory-impl.h
--- ns-3.25/src/internet/model/ipv6-raw-socket-factory-impl.h	2016-10-03 20:57:08.349246841 -0700
+++ ns-3.26/src/internet/model/ipv6-raw-socket-factory-impl.h	2016-10-03 19:49:01.651387623 -0700
@@ -28,8 +28,8 @@
 
 /**
  * \ingroup socket
+ * \ingroup ipv6
  *
- * \class Ipv6RawSocketFactoryImpl
  * \brief Implementation of IPv6 raw socket factory.
  */
 class Ipv6RawSocketFactoryImpl : public Ipv6RawSocketFactory
diff -Naur ns-3.25/src/internet/model/ipv6-raw-socket-impl.cc ns-3.26/src/internet/model/ipv6-raw-socket-impl.cc
--- ns-3.25/src/internet/model/ipv6-raw-socket-impl.cc	2016-10-03 20:57:08.350246833 -0700
+++ ns-3.26/src/internet/model/ipv6-raw-socket-impl.cc	2016-10-03 19:49:01.652387616 -0700
@@ -186,9 +186,9 @@
       m_err = Socket::ERROR_INVAL;
       return -1;
     }
-
   Inet6SocketAddress ad = Inet6SocketAddress::ConvertFrom (address);
   m_dst = ad.GetIpv6 ();
+
   return 0;
 }
 
@@ -225,6 +225,20 @@
   Ptr<Ipv6L3Protocol> ipv6 = m_node->GetObject<Ipv6L3Protocol> ();
   Ipv6Address dst = ad.GetIpv6 ();
 
+  if (IsManualIpv6Tclass ())
+    {
+      SocketIpv6TclassTag ipTclassTag;
+      ipTclassTag.SetTclass (GetIpv6Tclass ());
+      p->AddPacketTag (ipTclassTag);
+    }
+
+  if (IsManualIpv6HopLimit () && GetIpv6HopLimit () != 0 && !dst.IsMulticast ())
+    {
+      SocketIpv6HopLimitTag tag;
+      tag.SetHopLimit (GetIpv6HopLimit ());
+      p->AddPacketTag (tag);
+    }
+
   if (ipv6->GetRoutingProtocol ())
     {
       Ipv6Header hdr;
@@ -300,7 +314,7 @@
     }
 
   /* get packet */
-  struct Data data = m_data.front ();
+  Data data = m_data.front ();
   m_data.pop_front ();
   fromAddress = Inet6SocketAddress (data.fromIp, data.fromProtocol);
   if (data.packet->GetSize () > maxSize)
@@ -418,7 +432,7 @@
             }
         }
 
-      // Should check via getsockopt ()..
+      // Should check via getsockopt ().
       if (IsRecvPktInfo ())
         {
           Ipv6PacketInfoTag tag;
@@ -427,8 +441,23 @@
           copy->AddPacketTag (tag);
         }
 
+      // Check only version 6 options
+      if (IsIpv6RecvTclass ())
+        {
+          SocketIpv6TclassTag ipTclassTag;
+          ipTclassTag.SetTclass (hdr.GetTrafficClass ());
+          copy->AddPacketTag (ipTclassTag);
+        }
+
+      if (IsIpv6RecvHopLimit ())
+        {
+          SocketIpv6HopLimitTag ipHopLimitTag;
+          ipHopLimitTag.SetHopLimit (hdr.GetHopLimit ());
+          copy->AddPacketTag (ipHopLimitTag);
+        }
+
       copy->AddHeader (hdr);
-      struct Data data;
+      Data data;
       data.packet = copy;
       data.fromIp = hdr.GetSourceAddress ();
       data.fromProtocol = hdr.GetNextHeader ();
@@ -458,13 +487,13 @@
 void
 Ipv6RawSocketImpl::Icmpv6FilterSetPassAll()
 {
-  memset(&m_icmpFilter, 0xff, sizeof(icmpv6Filter));
+  memset(&m_icmpFilter, 0xff, sizeof(Icmpv6Filter));
 }
 
 void
 Ipv6RawSocketImpl::Icmpv6FilterSetBlockAll()
 {
-  memset(&m_icmpFilter, 0x00, sizeof(icmpv6Filter));
+  memset(&m_icmpFilter, 0x00, sizeof(Icmpv6Filter));
 }
 
 void
diff -Naur ns-3.25/src/internet/model/ipv6-raw-socket-impl.h ns-3.26/src/internet/model/ipv6-raw-socket-impl.h
--- ns-3.25/src/internet/model/ipv6-raw-socket-impl.h	2016-10-03 20:57:08.350246833 -0700
+++ ns-3.26/src/internet/model/ipv6-raw-socket-impl.h	2016-10-03 19:49:01.653387608 -0700
@@ -34,9 +34,10 @@
 class Node;
 
 /**
- * \class Ipv6RawSocketImpl
- * \brief IPv6 raw socket.
  * \ingroup socket
+ * \ingroup ipv6
+ *
+ * \brief IPv6 raw socket.
  *
  * A RAW Socket typically is used to access specific IP layers not usually
  * available through L4 sockets, e.g., ICMP. The implementer should take
@@ -167,15 +168,14 @@
 
 private:
   /**
-   * \struct Data
    * \brief IPv6 raw data and additional information.
    */
-  struct Data
+  typedef struct
   {
     Ptr<Packet> packet;   /**< Packet data */
     Ipv6Address fromIp;   /**< Source address */
     uint16_t fromProtocol;   /**< Protocol used */
-  };
+  } Data;
 
   /**
    * \brief Dispose object.
@@ -210,7 +210,7 @@
   /**
    * \brief Packet waiting to be processed.
    */
-  std::list<struct Data> m_data;
+  std::list<Data> m_data;
 
   /**
    * \brief Flag to shutdown send capability.
@@ -228,12 +228,12 @@
   typedef struct
   {
     uint32_t icmpv6Filt[8]; //!< ICMPv6 filter specification
-  } icmpv6Filter;
+  } Icmpv6Filter;
 
   /**
    * \brief ICMPv6 filter.
    */
-  icmpv6Filter m_icmpFilter;
+  Icmpv6Filter m_icmpFilter;
 };
 
 } /* namespace ns3 */
diff -Naur ns-3.25/src/internet/model/ipv6-route.h ns-3.26/src/internet/model/ipv6-route.h
--- ns-3.25/src/internet/model/ipv6-route.h	2016-10-03 20:57:08.351246825 -0700
+++ ns-3.26/src/internet/model/ipv6-route.h	2016-10-03 19:49:01.653387608 -0700
@@ -36,7 +36,7 @@
 
 /**
  * \ingroup ipv6Routing
- * \class Ipv6Route
+ *
  * \brief IPv6 route cache entry.
  */
 class Ipv6Route : public SimpleRefCount<Ipv6Route>
@@ -133,7 +133,7 @@
 
 /**
  * \ingroup ipv6Routing
- * \class Ipv6MulticastRoute
+ *
  * \brief IPv6 multicast route entry.
  */
 class Ipv6MulticastRoute : public SimpleRefCount<Ipv6MulticastRoute>
diff -Naur ns-3.25/src/internet/model/ipv6-routing-protocol.h ns-3.26/src/internet/model/ipv6-routing-protocol.h
--- ns-3.25/src/internet/model/ipv6-routing-protocol.h	2016-10-03 20:57:08.352246817 -0700
+++ ns-3.26/src/internet/model/ipv6-routing-protocol.h	2016-10-03 19:49:01.654387601 -0700
@@ -39,18 +39,22 @@
 
 /**
  * \ingroup internet 
- * \defgroup ipv6Routing Ipv6RoutingProtocol
+ * \defgroup ipv6Routing IPv6 Routing Protocols.
+ *
+ * The classes in this group implement different routing protocols
+ * for IPv6. Other modules could implement further protocols.
  */
 
 /**
  * \ingroup ipv6Routing
- * \brief Abstract base class for Ipv6 routing protocols.
+ * \brief Abstract base class for IPv6 routing protocols.
  * 
  * Defines two virtual functions for packet routing and forwarding.  The first, 
  * RouteOutput (), is used for locally originated packets, and the second,
  * RouteInput (), is used for forwarding and/or delivering received packets. 
  * Also defines the signatures of four callbacks used in RouteInput ().
  */
+
 class Ipv6RoutingProtocol : public Object
 {
 public:
diff -Naur ns-3.25/src/internet/model/ipv6-routing-table-entry.h ns-3.26/src/internet/model/ipv6-routing-table-entry.h
--- ns-3.25/src/internet/model/ipv6-routing-table-entry.h	2016-10-03 20:57:08.353246809 -0700
+++ ns-3.26/src/internet/model/ipv6-routing-table-entry.h	2016-10-03 19:49:01.655387593 -0700
@@ -31,7 +31,8 @@
 {
 
 /**
- * \class Ipv6RoutingTableEntry
+ * \ingroup ipv6Routing
+ *
  * \brief A record of an IPv6 route.
  */
 class Ipv6RoutingTableEntry 
@@ -270,7 +271,8 @@
 std::ostream& operator<< (std::ostream& os, Ipv6RoutingTableEntry const& route);
 
 /**
- * \class Ipv6MulticastRoutingTableEntry
+ * \ingroup ipv6Routing
+ *
  * \brief A record of an IPv6 multicast route.
  */
 class Ipv6MulticastRoutingTableEntry
diff -Naur ns-3.25/src/internet/model/ipv6-static-routing.cc ns-3.26/src/internet/model/ipv6-static-routing.cc
--- ns-3.25/src/internet/model/ipv6-static-routing.cc	2016-10-03 20:57:08.353246809 -0700
+++ ns-3.26/src/internet/model/ipv6-static-routing.cc	2016-10-03 19:49:01.656387586 -0700
@@ -623,7 +623,7 @@
         {
           ecb (p, header, Socket::ERROR_NOROUTETOHOST);
         }
-      return false;
+      return true;
     }
   // Next, try to find a route
   NS_LOG_LOGIC ("Unicast destination");
diff -Naur ns-3.25/src/internet/model/ipv6-static-routing.h ns-3.26/src/internet/model/ipv6-static-routing.h
--- ns-3.25/src/internet/model/ipv6-static-routing.h	2016-10-03 20:57:08.354246802 -0700
+++ ns-3.26/src/internet/model/ipv6-static-routing.h	2016-10-03 19:49:01.656387586 -0700
@@ -42,12 +42,7 @@
 class Ipv6MulticastRoutingTableEntry;
 
 /**
- * \ingroup internet
- * \defgroup ipv6StaticRouting Ipv6StaticRouting
- */
-/**
- * \ingroup ipv6StaticRouting
- * \class Ipv6StaticRouting
+ * \ingroup ipv6Routing
  *
  * \brief Static routing protocol for IP version 6 stacks.
  *
diff -Naur ns-3.25/src/internet/model/loopback-net-device.h ns-3.26/src/internet/model/loopback-net-device.h
--- ns-3.25/src/internet/model/loopback-net-device.h	2016-10-03 20:57:08.355246794 -0700
+++ ns-3.26/src/internet/model/loopback-net-device.h	2016-10-03 19:49:01.658387571 -0700
@@ -31,9 +31,13 @@
 
 /**
  * \ingroup netdevice
+ * \ingroup internet
  * 
  * \brief Virtual network interface that loops back any data sent to it to
- *        be immediately received on the same interface
+ * be immediately received on the same interface.
+ *
+ * This NetDevice is automatically added to any node as soon as the Internet
+ * stack is initialized.
  */
 class LoopbackNetDevice : public NetDevice
 {
diff -Naur ns-3.25/src/internet/model/ndisc-cache.cc ns-3.26/src/internet/model/ndisc-cache.cc
--- ns-3.25/src/internet/model/ndisc-cache.cc	2016-10-03 20:57:08.356246786 -0700
+++ ns-3.26/src/internet/model/ndisc-cache.cc	2016-10-03 19:49:01.659387564 -0700
@@ -100,6 +100,23 @@
   return 0;
 }
 
+std::list<NdiscCache::Entry*> NdiscCache::LookupInverse (Address dst)
+{
+  NS_LOG_FUNCTION (this << dst);
+
+  std::list<NdiscCache::Entry *> entryList;
+  for (CacheI i = m_ndCache.begin (); i != m_ndCache.end (); i++)
+    {
+      NdiscCache::Entry *entry = (*i).second;
+      if (entry->GetMacAddress () == dst)
+        {
+          entryList.push_back (entry);
+        }
+    }
+  return entryList;
+}
+
+
 NdiscCache::Entry* NdiscCache::Add (Ipv6Address to)
 {
   NS_LOG_FUNCTION (this << to);
@@ -397,11 +414,6 @@
   return m_lastReachabilityConfirmation;
 }
 
-void NdiscCache::Entry::UpdateLastReachabilityconfirmation ()
-{
-  NS_LOG_FUNCTION_NOARGS ();
-}
-
 void NdiscCache::Entry::StartReachableTimer ()
 {
   NS_LOG_FUNCTION_NOARGS ();
@@ -410,11 +422,27 @@
       m_nudTimer.Cancel ();
     }
 
+  m_lastReachabilityConfirmation = Simulator::Now ();
   m_nudTimer.SetFunction (&NdiscCache::Entry::FunctionReachableTimeout, this);
   m_nudTimer.SetDelay (MilliSeconds (Icmpv6L4Protocol::REACHABLE_TIME));
   m_nudTimer.Schedule ();
 }
 
+void NdiscCache::Entry::UpdateReachableTimer ()
+{
+  NS_LOG_FUNCTION_NOARGS ();
+
+  if (m_state == REACHABLE)
+    {
+      m_lastReachabilityConfirmation = Simulator::Now ();
+      if (m_nudTimer.IsRunning ())
+        {
+          m_nudTimer.Cancel ();
+        }
+      m_nudTimer.Schedule ();
+    }
+}
+
 void NdiscCache::Entry::StartProbeTimer ()
 {
   NS_LOG_FUNCTION_NOARGS ();
diff -Naur ns-3.25/src/internet/model/ndisc-cache.h ns-3.26/src/internet/model/ndisc-cache.h
--- ns-3.25/src/internet/model/ndisc-cache.h	2016-10-03 20:57:08.356246786 -0700
+++ ns-3.26/src/internet/model/ndisc-cache.h	2016-10-03 19:49:01.659387564 -0700
@@ -41,7 +41,8 @@
 class Ipv6Header;
 
 /**
- * \class NdiscCache
+ * \ingroup ipv6
+ *
  * \brief IPv6 Neighbor Discovery cache.
  */
 class NdiscCache : public Object
@@ -83,12 +84,19 @@
 
   /**
    * \brief Lookup in the cache.
-   * \param dst destination address
-   * \return the entry if found, 0 otherwise
+   * \param dst destination address.
+   * \return the entry if found, 0 otherwise.
    */
   NdiscCache::Entry* Lookup (Ipv6Address dst);
 
   /**
+   * \brief Lookup in the cache for a MAC address.
+   * \param dst destination MAC address.
+   * \return a list of matching entries.
+   */
+  std::list<NdiscCache::Entry*> LookupInverse (Address dst);
+
+  /**
    * \brief Add an entry.
    * \param to address to add
    * \return an new Entry
@@ -138,8 +146,9 @@
   typedef std::pair<Ptr<Packet>, Ipv6Header> Ipv6PayloadHeaderPair;
 
   /**
-   * \class Entry
-   * \brief A record that holds information about an NdiscCache entry.
+   * \ingroup ipv6
+   *
+   * \brief A record that holds information about a NdiscCache entry.
    */
   class Entry
   {
@@ -273,14 +282,14 @@
     Time GetLastReachabilityConfirmation () const;
 
     /**
-     * \brief Update the time of last reachability confirmation.
+     * \brief Start the reachable timer.
      */
-    void UpdateLastReachabilityconfirmation ();
+    void StartReachableTimer ();
 
     /**
-     * \brief Start the reachable timer.
+     * \brief Update the reachable timer.
      */
-    void StartReachableTimer ();
+    void UpdateReachableTimer ();
 
     /**
      * \brief Start retransmit timer.
diff -Naur ns-3.25/src/internet/model/nsc-tcp-socket-impl.cc ns-3.26/src/internet/model/nsc-tcp-socket-impl.cc
--- ns-3.25/src/internet/model/nsc-tcp-socket-impl.cc	2016-10-03 20:57:08.359246763 -0700
+++ ns-3.26/src/internet/model/nsc-tcp-socket-impl.cc	2016-10-03 19:49:01.662387541 -0700
@@ -461,14 +461,7 @@
 {
   NS_LOG_FUNCTION (this << maxSize << flags);
   Ptr<Packet> packet = Recv (maxSize, flags);
-  if (packet != 0)
-    {
-      SocketAddressTag tag;
-      bool found;
-      found = packet->PeekPacketTag (tag);
-      NS_ASSERT (found);
-      fromAddress = tag.GetAddress ();
-    }
+  GetPeerName (fromAddress);
   return packet;
 }
 
@@ -630,10 +623,6 @@
 
   Ptr<Packet> p =  Create<Packet> (buffer, len);
 
-  SocketAddressTag tag;
-
-  tag.SetAddress (m_peerAddress);
-  p->AddPacketTag (tag);
   m_deliveryQueue.push (p);
   m_rxAvailable += p->GetSize ();
 
diff -Naur ns-3.25/src/internet/model/rip.cc ns-3.26/src/internet/model/rip.cc
--- ns-3.25/src/internet/model/rip.cc	2016-10-03 20:57:08.362246739 -0700
+++ ns-3.26/src/internet/model/rip.cc	2016-10-03 19:49:01.665387519 -0700
@@ -268,7 +268,7 @@
         {
           ecb (p, header, Socket::ERROR_NOROUTETOHOST);
         }
-      return false;
+      return true;
     }
   // Next, try to find a route
   NS_LOG_LOGIC ("Unicast destination");
@@ -711,8 +711,13 @@
 {
   NS_LOG_FUNCTION (this << socket);
 
-  Ptr<Packet> packet = socket->Recv ();
-  NS_LOG_INFO ("Received " << *packet);
+  Address sender;
+  Ptr<Packet> packet = socket->RecvFrom (sender);
+  InetSocketAddress senderAddr = InetSocketAddress::ConvertFrom (sender);
+  NS_LOG_INFO ("Received " << *packet << " from " << senderAddr);
+
+  Ipv4Address senderAddress = senderAddr.GetIpv4 ();
+  uint16_t senderPort = senderAddr.GetPort ();
 
   Ipv4PacketInfoTag interfaceInfo;
   if (!packet->RemovePacketTag (interfaceInfo))
@@ -731,14 +736,6 @@
     }
   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)
     {
diff -Naur ns-3.25/src/internet/model/rip.h ns-3.26/src/internet/model/rip.h
--- ns-3.25/src/internet/model/rip.h	2016-10-03 20:57:08.362246739 -0700
+++ ns-3.26/src/internet/model/rip.h	2016-10-03 19:49:01.665387519 -0700
@@ -34,6 +34,7 @@
 namespace ns3 {
 
 /**
+ * \ingroup ipv4Routing
  * \defgroup rip RIP
  *
  * The RIP protocol (\RFC{2453}) is a unicast-only IPv4 IGP (Interior Gateway Protocol).
diff -Naur ns-3.25/src/internet/model/rip-header.cc ns-3.26/src/internet/model/rip-header.cc
--- ns-3.25/src/internet/model/rip-header.cc	2016-10-03 20:57:08.361246747 -0700
+++ ns-3.26/src/internet/model/rip-header.cc	2016-10-03 19:49:01.664387526 -0700
@@ -225,7 +225,7 @@
   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;
+  uint8_t rteNumber = i.GetRemainingSize ()/20;
   for (uint8_t n=0; n<rteNumber; n++)
     {
       RipRte rte;
diff -Naur ns-3.25/src/internet/model/rip-header.h ns-3.26/src/internet/model/rip-header.h
--- ns-3.25/src/internet/model/rip-header.h	2016-10-03 20:57:08.361246747 -0700
+++ ns-3.26/src/internet/model/rip-header.h	2016-10-03 19:49:01.664387526 -0700
@@ -121,14 +121,14 @@
   uint32_t GetRouteMetric (void) const;
 
   /**
-   * \brief Set the route metric.
-   * \param routeMetric The route metric.
+   * \brief Set the next hop.
+   * \param nextHop The next hop.
    */
   void SetNextHop (Ipv4Address nextHop);
 
   /**
-   * \brief Get the route metric.
-   * \returns The route metric.
+   * \brief Get the next hop.
+   * \returns The next hop.
    */
   Ipv4Address GetNextHop (void) const;
 
diff -Naur ns-3.25/src/internet/model/ripng.cc ns-3.26/src/internet/model/ripng.cc
--- ns-3.25/src/internet/model/ripng.cc	2016-10-03 20:57:08.364246724 -0700
+++ ns-3.26/src/internet/model/ripng.cc	2016-10-03 19:49:01.667387504 -0700
@@ -33,6 +33,7 @@
 #include "ns3/enum.h"
 #include "ns3/uinteger.h"
 #include "ns3/ipv6-packet-info-tag.h"
+#include "ns3/simulator.h"
 
 #define RIPNG_ALL_NODE "ff02::9"
 #define RIPNG_PORT 521
@@ -244,7 +245,7 @@
         {
           ecb (p, header, Socket::ERROR_NOROUTETOHOST);
         }
-      return false;
+      return true;
     }
   // Next, try to find a route
   NS_LOG_LOGIC ("Unicast destination");
@@ -702,8 +703,13 @@
 {
   NS_LOG_FUNCTION (this << socket);
 
-  Ptr<Packet> packet = socket->Recv ();
-  NS_LOG_INFO ("Received " << *packet);
+  Address sender;
+  Ptr<Packet> packet = socket->RecvFrom (sender);
+  Inet6SocketAddress senderAddr = Inet6SocketAddress::ConvertFrom (sender);
+  NS_LOG_INFO ("Received " << *packet << " from " << senderAddr);
+
+  Ipv6Address senderAddress = senderAddr.GetIpv6 ();
+  uint16_t senderPort = senderAddr.GetPort ();
 
   Ipv6PacketInfoTag interfaceInfo;
   if (!packet->RemovePacketTag (interfaceInfo))
@@ -722,14 +728,6 @@
     }
   uint8_t hopLimit = hoplimitTag.GetHopLimit ();
 
-  SocketAddressTag tag;
-  if (!packet->RemovePacketTag (tag))
-    {
-      NS_ABORT_MSG ("No incoming sender address on RIPng message, aborting.");
-    }
-  Ipv6Address senderAddress = Inet6SocketAddress::ConvertFrom (tag.GetAddress ()).GetIpv6 ();
-  uint16_t senderPort = Inet6SocketAddress::ConvertFrom (tag.GetAddress ()).GetPort ();
-
   int32_t interfaceForAddress = m_ipv6->GetInterfaceForAddress (senderAddress);
   if (interfaceForAddress != -1)
     {
diff -Naur ns-3.25/src/internet/model/ripng.h ns-3.26/src/internet/model/ripng.h
--- ns-3.25/src/internet/model/ripng.h	2016-10-03 20:57:08.364246724 -0700
+++ ns-3.26/src/internet/model/ripng.h	2016-10-03 19:49:01.667387504 -0700
@@ -34,6 +34,7 @@
 namespace ns3 {
 
 /**
+ * \ingroup ipv6Routing
  * \defgroup ripng RIPng
  *
  * The RIPng protocol (\RFC{2080}) is a unicast-only IPv6 IGP (Interior Gateway Protocol).
diff -Naur ns-3.25/src/internet/model/ripng-header.cc ns-3.26/src/internet/model/ripng-header.cc
--- ns-3.25/src/internet/model/ripng-header.cc	2016-10-03 20:57:08.363246732 -0700
+++ ns-3.26/src/internet/model/ripng-header.cc	2016-10-03 19:49:01.666387511 -0700
@@ -208,7 +208,7 @@
   uint16_t temp16 = i.ReadU16 ();
   NS_ASSERT_MSG (temp16 == 0, "RipNG received a message with invalid filled flags, aborting.");
 
-  uint8_t rteNumber = (i.GetSize () - 4)/20;
+  uint8_t rteNumber = i.GetRemainingSize ()/20;
   for (uint8_t n=0; n<rteNumber; n++)
     {
       RipNgRte rte;
diff -Naur ns-3.25/src/internet/model/ripng-header.h ns-3.26/src/internet/model/ripng-header.h
--- ns-3.25/src/internet/model/ripng-header.h	2016-10-03 20:57:08.363246732 -0700
+++ ns-3.26/src/internet/model/ripng-header.h	2016-10-03 19:49:01.666387511 -0700
@@ -32,6 +32,7 @@
 
 /**
  * \ingroup ripng
+ *
  * \brief RipNg Routing Table Entry (RTE) - see \RFC{2080}
  */
 class RipNgRte : public Header
@@ -139,6 +140,7 @@
 
 /**
  * \ingroup ripng
+ *
  * \brief RipNgHeader - see \RFC{2080}
  */
 class RipNgHeader : public Header
diff -Naur ns-3.25/src/internet/model/sim_errno.h ns-3.26/src/internet/model/sim_errno.h
--- ns-3.25/src/internet/model/sim_errno.h	2016-10-03 20:57:08.366246708 -0700
+++ ns-3.26/src/internet/model/sim_errno.h	2016-10-03 19:49:01.669387489 -0700
@@ -21,17 +21,23 @@
 #ifndef NSC_SIM_ERRNO_H
 #define NSC_SIM_ERRNO_H
 
-// list of network stack errors that may happen in a simulation,
-// and can be handled by the simulator in a sane way.
-// Note that NSC handles several errors internally though
-// nsc_assert, BUG() and friends, because they (should) never
-// happen in a simulation (e.g. ESOCKTNOSUPPORT).
-//
-// These values are returned by the various methods provided by nsc.
-// They must always be < 0, as values >= 0 are a success indicator;
-// e.g. send_data() will return the number of bytes sent or one of
-// the nsc_errno numbers below, accept() will return 0 on success or
-// one of the nsc_errno numbers below, etc.
+/**
+ * \ingroup nsctcp
+ *
+ * List of network stack errors that may happen in a simulation,
+ * and can be handled by the simulator in a sane way.
+ *
+ * Note that NSC handles several errors internally though
+ * nsc_assert, BUG() and friends, because they (should) never
+ * happen in a simulation (e.g. ESOCKTNOSUPPORT).
+ *
+ * These values are returned by the various methods provided by nsc.
+ * They must always be < 0, as values >= 0 are a success indicator;
+ * e.g. send_data() will return the number of bytes sent or one of
+ * the nsc_errno numbers below, accept() will return 0 on success or
+ * one of the nsc_errno numbers below, etc.
+ *
+ */
 enum nsc_errno {
   NSC_EUNKNOWN = -1,
   NSC_EADDRINUSE = -10,
diff -Naur ns-3.25/src/internet/model/tcp-bic.cc ns-3.26/src/internet/model/tcp-bic.cc
--- ns-3.25/src/internet/model/tcp-bic.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/model/tcp-bic.cc	2016-10-03 19:49:01.670387482 -0700
@@ -0,0 +1,282 @@
+/* -*- 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-bic.h"
+#include "ns3/log.h"
+#include "ns3/tcp-socket-base.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpBic");
+NS_OBJECT_ENSURE_REGISTERED (TcpBic);
+
+TypeId
+TcpBic::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::TcpBic")
+    .SetParent<TcpCongestionOps> ()
+    .AddConstructor<TcpBic> ()
+    .SetGroupName ("Internet")
+    .AddAttribute ("FastConvergence", "Turn on/off fast convergence.",
+                   BooleanValue (true),
+                   MakeBooleanAccessor (&TcpBic::m_fastConvergence),
+                   MakeBooleanChecker ())
+    .AddAttribute ("Beta", "Beta for multiplicative decrease",
+                   DoubleValue (0.8),
+                   MakeDoubleAccessor (&TcpBic::m_beta),
+                   MakeDoubleChecker <double> (0.0))
+    .AddAttribute ("MaxIncr", "Limit on increment allowed during binary search",
+                   UintegerValue (16),
+                   MakeUintegerAccessor (&TcpBic::m_maxIncr),
+                   MakeUintegerChecker <uint32_t> (1))
+    .AddAttribute ("LowWnd", "Threshold window size (in segments) for engaging BIC response",
+                   UintegerValue (14),
+                   MakeUintegerAccessor (&TcpBic::m_lowWnd),
+                   MakeUintegerChecker <uint32_t> ())
+    .AddAttribute ("SmoothPart", "Number of RTT needed to approach cWnd_max from "
+                   "cWnd_max-BinarySearchCoefficient. It can be viewed as the gradient "
+                   "of the slow start AIM phase: less this value is, "
+                   "more steep the increment will be.",
+                   IntegerValue (5),
+                   MakeIntegerAccessor (&TcpBic::m_smoothPart),
+                   MakeIntegerChecker <int> (1))
+    .AddAttribute ("BinarySearchCoefficient", "Inverse of the coefficient for the "
+                   "binary search. Default 4, as in Linux",
+                   UintegerValue (4),
+                   MakeUintegerAccessor (&TcpBic::m_b),
+                   MakeUintegerChecker <uint8_t> (2))
+  ;
+  return tid;
+}
+
+
+TcpBic::TcpBic ()
+  : TcpCongestionOps (),
+    m_cWndCnt (0),
+    m_lastMaxCwnd (0),
+    m_lastCwnd (0),
+    m_epochStart (Time::Min ())
+{
+  NS_LOG_FUNCTION (this);
+}
+
+TcpBic::TcpBic (const TcpBic &sock)
+  : TcpCongestionOps (sock),
+    m_fastConvergence (sock.m_fastConvergence),
+    m_beta (sock.m_beta),
+    m_maxIncr (sock.m_maxIncr),
+    m_lowWnd (sock.m_lowWnd),
+    m_smoothPart (sock.m_smoothPart),
+    m_cWndCnt (sock.m_cWndCnt),
+    m_lastMaxCwnd (sock.m_lastMaxCwnd),
+    m_lastCwnd (sock.m_lastCwnd),
+    m_epochStart (sock.m_epochStart),
+    m_b (sock.m_b)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+
+void
+TcpBic::IncreaseWindow (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked)
+{
+  NS_LOG_FUNCTION (this << tcb << segmentsAcked);
+
+  if (tcb->m_cWnd < tcb->m_ssThresh)
+    {
+      tcb->m_cWnd += tcb->m_segmentSize;
+      segmentsAcked -= 1;
+
+      NS_LOG_INFO ("In SlowStart, updated to cwnd " << tcb->m_cWnd <<
+                   " ssthresh " << tcb->m_ssThresh);
+    }
+
+  if (tcb->m_cWnd >= tcb->m_ssThresh && segmentsAcked > 0)
+    {
+      m_cWndCnt += segmentsAcked;
+      uint32_t cnt = Update (tcb);
+
+      /* According to the BIC paper and RFC 6356 even once the new cwnd is
+       * calculated you must compare this to the number of ACKs received since
+       * the last cwnd update. If not enough ACKs have been received then cwnd
+       * cannot be updated.
+       */
+      if (m_cWndCnt > cnt)
+        {
+          tcb->m_cWnd += tcb->m_segmentSize;
+          m_cWndCnt = 0;
+          NS_LOG_INFO ("In CongAvoid, updated to cwnd " << tcb->m_cWnd);
+        }
+      else
+        {
+          NS_LOG_INFO ("Not enough segments have been ACKed to increment cwnd."
+                       "Until now " << m_cWndCnt);
+        }
+    }
+}
+
+uint32_t
+TcpBic::Update (Ptr<TcpSocketState> tcb)
+{
+  NS_LOG_FUNCTION (this << tcb);
+
+  uint32_t segCwnd = tcb->GetCwndInSegments ();
+  uint32_t cnt;
+
+  m_lastCwnd = segCwnd;
+
+  if (m_epochStart == Time::Min ())
+    {
+      m_epochStart = Simulator::Now ();   /* record the beginning of an epoch */
+    }
+
+  if (segCwnd < m_lowWnd)
+    {
+      NS_LOG_INFO ("Under lowWnd, compatibility mode. Behaving as NewReno");
+      cnt = segCwnd;
+      return cnt;
+    }
+
+  if (segCwnd < m_lastMaxCwnd)
+    {
+      double dist = (m_lastMaxCwnd - segCwnd) / m_b;
+
+      NS_LOG_INFO ("cWnd = " << segCwnd << " under lastMax, " <<
+                   m_lastMaxCwnd << " and dist=" << dist);
+      if (dist > m_maxIncr)
+        {
+          /* Linear increase */
+          cnt = segCwnd / m_maxIncr;
+          NS_LOG_INFO ("Linear increase (maxIncr=" << m_maxIncr << "), cnt=" << cnt);
+        }
+      else if (dist <= 1)
+        {
+          /* smoothed binary search increase: when our window is really
+           * close to the last maximum, we parameterize in m_smoothPart the number
+           * of RTT needed to reach that window.
+           */
+          cnt = (segCwnd * m_smoothPart) / m_b;
+
+          NS_LOG_INFO ("Binary search increase (smoothPart=" << m_smoothPart <<
+                       "), cnt=" << cnt);
+        }
+      else
+        {
+          /* binary search increase */
+          cnt = segCwnd / dist;
+
+          NS_LOG_INFO ("Binary search increase, cnt=" << cnt);
+        }
+    }
+  else
+    {
+      NS_LOG_INFO ("cWnd = " << segCwnd << " above last max, " <<
+                   m_lastMaxCwnd);
+      if (segCwnd < m_lastMaxCwnd + m_b)
+        {
+          /* slow start AMD linear increase */
+          cnt = (segCwnd * m_smoothPart) / m_b;
+          NS_LOG_INFO ("Slow start AMD, cnt=" << cnt);
+        }
+      else if (segCwnd < m_lastMaxCwnd + m_maxIncr * (m_b - 1))
+        {
+          /* slow start */
+          cnt = (segCwnd * (m_b - 1)) / (segCwnd - m_lastMaxCwnd);
+
+          NS_LOG_INFO ("Slow start, cnt=" << cnt);
+        }
+      else
+        {
+          /* linear increase */
+          cnt = segCwnd / m_maxIncr;
+
+          NS_LOG_INFO ("Linear, cnt=" << cnt);
+        }
+    }
+
+  /* if in slow start or link utilization is very low. Code taken from Linux
+   * kernel, not sure of the source they take it. Usually, it is not reached,
+   * since if m_lastMaxCwnd is 0, we are (hopefully) in slow start.
+   */
+  if (m_lastMaxCwnd == 0)
+    {
+      if (cnt > 20) /* increase cwnd 5% per RTT */
+        {
+          cnt = 20;
+        }
+    }
+
+  if (cnt == 0)
+    {
+      cnt = 1;
+    }
+
+  return cnt;
+}
+
+std::string
+TcpBic::GetName () const
+{
+  return "TcpBic";
+}
+
+uint32_t
+TcpBic::GetSsThresh (Ptr<const TcpSocketState> tcb, uint32_t bytesInFlight)
+{
+  NS_LOG_FUNCTION (this);
+
+  uint32_t segCwnd = tcb->GetCwndInSegments ();
+  uint32_t ssThresh = 0;
+
+  m_epochStart = Time::Min ();
+
+  /* Wmax and fast convergence */
+  if (segCwnd < m_lastMaxCwnd && m_fastConvergence)
+    {
+      NS_LOG_INFO ("Fast Convergence. Last max cwnd: " << m_lastMaxCwnd <<
+                   " updated to " << (uint32_t) m_beta * segCwnd);
+      m_lastMaxCwnd = m_beta * segCwnd;
+    }
+  else
+    {
+      NS_LOG_INFO ("Last max cwnd: " << m_lastMaxCwnd << " updated to " <<
+                   segCwnd);
+      m_lastMaxCwnd = segCwnd;
+    }
+
+  if (segCwnd < m_lowWnd)
+    {
+      ssThresh = std::max (2 * tcb->m_segmentSize, bytesInFlight / 2);
+      NS_LOG_INFO ("Less than lowWindow, ssTh= " << ssThresh);
+    }
+  else
+    {
+      ssThresh = std::max (segCwnd * m_beta, 2.0) * tcb->m_segmentSize;
+      NS_LOG_INFO ("More than lowWindow, ssTh= " << ssThresh);
+    }
+
+  return ssThresh;
+}
+
+Ptr<TcpCongestionOps>
+TcpBic::Fork (void)
+{
+  return CopyObject<TcpBic> (this);
+}
+
+} // namespace ns3
diff -Naur ns-3.25/src/internet/model/tcp-bic.h ns-3.26/src/internet/model/tcp-bic.h
--- ns-3.25/src/internet/model/tcp-bic.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/model/tcp-bic.h	2016-10-03 19:49:01.670387482 -0700
@@ -0,0 +1,132 @@
+/* -*- 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 TCPBIC_H
+#define TCPBIC_H
+
+#include "ns3/tcp-congestion-ops.h"
+#include "ns3/traced-value.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup congestionOps
+ *
+ * \brief BIC congestion control algorithm
+ *
+ * In TCP Bic the congestion control problem is viewed as a search
+ * problem. Taking as a starting point the current window value
+ * and as a target point the last maximum window value
+ * (i.e. the cWnd value just before the loss event) a binary search
+ * technique can be used to update the cWnd value at the midpoint between
+ * the two, directly or using an additive increase strategy if the distance from
+ * the current window is too large.
+ *
+ * This way, assuming a no-loss period, the congestion window logarithmically
+ * approaches the maximum value of cWnd until the difference between it and cWnd
+ * falls below a preset threshold. After reaching such a value (or the maximum
+ * window is unknown, i.e. the binary search does not start at all) the algorithm
+ * switches to probing the new maximum window with a 'slow start' strategy.
+ *
+ * If a loss occur in either these phases, the current window (before the loss)
+ * can be treated as the new maximum, and the reduced (with a multiplicative
+ * decrease factor Beta) window size can be used as the new minimum.
+ *
+ * To maintain the performance of TCP Bic as close as possible with the Linux
+ * implementation, and at the same time maintain the friendliness with other TCP
+ * flavors, the cWnd is increased only after a certain number of ACKs
+ * are received, following RFC 6356. After the slow start phase, and after each
+ * new ACK, a value is calculated by the method Update. This number
+ * (m_cnt in the code) represents the ACK packets that should be received
+ * before increasing the cWnd by one segment. After a trivial check on the
+ * arrived ACKs (represented by m_cWndCnt in the code), the
+ * cWnd can be increased and m_cWndCnt can be set to zero, or
+ * otherwise m_cWndCnt can be increased by one and the
+ * cWnd can be left untouched.
+ *
+ * The binary search on the cWnd size space is done by varying the returned
+ * cnt, depending on the internal state of the class (e.g. the last maximum
+ * and the current cWnd size).
+ *
+ * The reference paper for BIC can be found in:
+ * http://an.kaist.ac.kr/courses/2006/cs540/reading/bic-tcp.pdf
+ *
+ * This model has a number of configurable parameters that are exposed as
+ * attributes of the TcpBic TypeId.  This model also exports trace sources,
+ * for tracking the congestion window, slow start threshold, and the internal
+ * state of the protocol.
+ *
+ * More information on this implementation: http://dl.acm.org/citation.cfm?id=2756518
+ */
+
+class TcpBic : public TcpCongestionOps
+{
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * \brief Constructor
+   */
+  TcpBic ();
+
+  /**
+   * Copy constructor.
+   * \param sock The socket to copy from.
+   */
+  TcpBic (const TcpBic &sock);
+
+  virtual 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:
+  /**
+   * \brief Bic window update after a new ack received
+   */
+  virtual uint32_t Update (Ptr<TcpSocketState> tcb);
+
+private:
+  friend class TcpBicIncrementTest;
+  friend class TcpBicDecrementTest;
+
+  // User parameters
+  bool     m_fastConvergence;  //!< Enable or disable fast convergence algorithm
+  double   m_beta;             //!< Beta for cubic multiplicative increase
+  uint32_t m_maxIncr;          //!< Maximum window increment
+  uint32_t m_lowWnd;           //!< Lower bound on congestion window
+  int      m_smoothPart;       //!< Number of RTT needed to reach Wmax from Wmax-B
+
+  // Bic parameters
+  uint32_t     m_cWndCnt;         //!<  cWnd integer-to-float counter
+  uint32_t     m_lastMaxCwnd;     //!<  Last maximum cWnd
+  uint32_t     m_lastCwnd;        //!<  Last cWnd
+  Time         m_epochStart;      //!<  Beginning of an epoch
+  uint8_t      m_b;               //!< Binary search coefficient
+};
+
+} // namespace ns3
+#endif // TCPBIC_H
diff -Naur ns-3.25/src/internet/model/tcp-congestion-ops.h ns-3.26/src/internet/model/tcp-congestion-ops.h
--- ns-3.25/src/internet/model/tcp-congestion-ops.h	2016-10-03 20:57:08.367246701 -0700
+++ ns-3.26/src/internet/model/tcp-congestion-ops.h	2016-10-03 19:49:01.671387474 -0700
@@ -21,13 +21,20 @@
 
 #include "ns3/object.h"
 #include "ns3/timer.h"
+#include "ns3/tcp-socket-base.h"
 
 namespace ns3 {
 
-class TcpSocketState;
-class TcpSocketBase;
+/**
+ * \ingroup tcp
+ * \defgroup congestionOps Congestion Control Algorithms.
+ *
+ * The various congestion control algorithms, also known as "TCP flavors".
+ */
 
 /**
+ * \ingroup congestionOps
+ *
  * \brief Congestion control abstract class
  *
  * The design is inspired on what Linux v4.0 does (but it has been
@@ -52,6 +59,11 @@
   static TypeId GetTypeId (void);
 
   TcpCongestionOps ();
+
+  /**
+   * \brief Copy constructor.
+   * \param other object to copy.
+   */
   TcpCongestionOps (const TcpCongestionOps &other);
 
   virtual ~TcpCongestionOps ();
@@ -106,11 +118,25 @@
    * \param rtt last rtt
    */
   virtual void PktsAcked (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked,
-                          const Time& rtt) { }
+                          const Time& rtt)
+  {
+  }
+
+  /**
+   * \brief Trigger events/calculations specific to a congestion state
+   *
+   * This function mimics the function set_state in Linux.
+   * The function is called before changing congestion state.
+   *
+   * \param tcb internal congestion state
+   * \param newState new congestion state to which the TCP is going to switch
+   */
+  virtual void CongestionStateSet (Ptr<TcpSocketState> tcb,
+                                   const TcpSocketState::TcpCongState_t newState)
+  {
+  }
 
   // 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) */
@@ -146,6 +172,11 @@
   static TypeId GetTypeId (void);
 
   TcpNewReno ();
+
+  /**
+   * \brief Copy constructor.
+   * \param sock object to copy.
+   */
   TcpNewReno (const TcpNewReno& sock);
 
   ~TcpNewReno ();
diff -Naur ns-3.25/src/internet/model/tcp-header.cc ns-3.26/src/internet/model/tcp-header.cc
--- ns-3.25/src/internet/model/tcp-header.cc	2016-10-03 20:57:08.368246693 -0700
+++ ns-3.26/src/internet/model/tcp-header.cc	2016-10-03 19:49:01.672387467 -0700
@@ -359,6 +359,7 @@
 uint32_t
 TcpHeader::Deserialize (Buffer::Iterator start)
 {
+  m_optionsLen = 0;
   Buffer::Iterator i = start;
   m_sourcePort = i.ReadNtohU16 ();
   m_destinationPort = i.ReadNtohU16 ();
@@ -404,6 +405,7 @@
           optionLen -= optionSize;
           i.Next (optionSize);
           m_options.push_back (op);
+          m_optionsLen += optionSize;
         }
       else
         {
@@ -417,6 +419,7 @@
               // Discard padding bytes without adding to option list
               i.Next (1);
               --optionLen;
+              ++m_optionsLen;
             }
         }
     }
@@ -518,14 +521,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.25/src/internet/model/tcp-highspeed.h ns-3.26/src/internet/model/tcp-highspeed.h
--- ns-3.25/src/internet/model/tcp-highspeed.h	2016-10-03 20:57:08.369246685 -0700
+++ ns-3.26/src/internet/model/tcp-highspeed.h	2016-10-03 19:49:01.673387459 -0700
@@ -25,7 +25,7 @@
 namespace ns3 {
 
 /**
- * \ingroup tcp
+ * \ingroup congestionOps
  *
  * \brief An implementation of TCP HighSpeed
  *
diff -Naur ns-3.25/src/internet/model/tcp-htcp.cc ns-3.26/src/internet/model/tcp-htcp.cc
--- ns-3.25/src/internet/model/tcp-htcp.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/model/tcp-htcp.cc	2016-10-03 19:49:01.673387459 -0700
@@ -0,0 +1,230 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 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
+ *
+ * by: Amir Modarresi <amodarresi@ittc.ku.edu>
+ *
+ * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
+ * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
+ * Information and Telecommunication Technology Center (ITTC)
+ * and Department of Electrical Engineering and Computer Science
+ * The University of Kansas Lawrence, KS USA.
+ */
+
+#include "tcp-htcp.h"
+
+#include "ns3/log.h"
+#include "ns3/trace-source-accessor.h"
+#include "ns3/simulator.h"
+#include "ns3/abort.h"
+#include "ns3/node.h"
+#include "math.h"
+#include "ns3/tcp-socket-base.h"
+#include "ns3/sequence-number.h"
+#include "ns3/double.h"
+#include "ns3/nstime.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpHtcp");
+
+NS_OBJECT_ENSURE_REGISTERED (TcpHtcp);
+
+TypeId TcpHtcp::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::TcpHtcp")
+    .SetParent<TcpNewReno> ()
+    .AddConstructor<TcpHtcp> ()
+    .SetGroupName ("Internet")
+    .AddAttribute ("DefaultBackoff",
+                   "The default AIMD backoff factor",
+                   DoubleValue (0.5),
+                   MakeDoubleAccessor (&TcpHtcp::m_defaultBackoff),
+                   MakeDoubleChecker<double> (0,1))
+    .AddAttribute ("ThroughputRatio",
+                   "Threshold value for updating beta",
+                   DoubleValue (0.2),
+                   MakeDoubleAccessor (&TcpHtcp::m_throughputRatio),
+                   MakeDoubleChecker<double> ())
+    .AddAttribute ("DeltaL",
+                   "Delta_L parameter in increase function",
+                   TimeValue (Seconds (1)),
+                   MakeTimeAccessor (&TcpHtcp::m_deltaL),
+                   MakeTimeChecker ())
+  ;
+  return tid;
+}
+
+std::string TcpHtcp::GetName () const
+{
+  return "TcpHtcp";
+}
+
+TcpHtcp::TcpHtcp (void)
+  : TcpNewReno (),
+    m_alpha (0),
+    m_beta (0),
+    m_delta (0),
+    m_lastCon (0),
+    m_minRtt (Time::Max ()),
+    m_maxRtt (Time::Min ()),
+    m_throughput (0),
+    m_lastThroughput (0),
+    m_dataSent (0)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+TcpHtcp::TcpHtcp (const TcpHtcp& sock)
+  : TcpNewReno (sock),
+    m_alpha (sock.m_alpha),
+    m_beta (sock.m_beta),
+    m_defaultBackoff (sock.m_defaultBackoff),
+    m_throughputRatio (sock.m_throughputRatio),
+    m_delta (sock.m_delta),
+    m_deltaL (sock.m_deltaL),
+    m_lastCon (sock.m_lastCon),
+    m_minRtt (sock.m_minRtt),
+    m_maxRtt (sock.m_maxRtt),
+    m_throughput (sock.m_throughput),
+    m_lastThroughput (sock.m_lastThroughput),
+    m_dataSent (sock.m_dataSent)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+TcpHtcp::~TcpHtcp (void)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+Ptr<TcpCongestionOps> TcpHtcp::Fork (void)
+{
+  NS_LOG_FUNCTION (this);
+  return CopyObject<TcpHtcp> (this);
+}
+
+void TcpHtcp::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 * m_alpha)) / tcb->m_cWnd);
+      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);
+    }
+}
+
+void TcpHtcp::UpdateAlpha (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  m_delta = (Simulator::Now () - m_lastCon);
+  if (m_delta <= m_deltaL)
+    {
+      m_alpha = 1;
+    }
+  else
+    {
+      Time diff = m_delta - m_deltaL;
+      double diffSec = diff.GetSeconds ();
+      // alpha=1+10(Delta-Delta_L)+[0.5(Delta-Delta_L)]^2  (seconds)
+      // from Leith and Shorten H-TCP paper
+      m_alpha = (1 + 10 * diffSec + 0.25 * (diffSec * diffSec));   
+    }
+  m_alpha = 2 * (1 - m_beta) * m_alpha;
+  if (m_alpha < 1)
+    {
+      m_alpha = 1;
+    }
+  NS_LOG_DEBUG ("Updated m_alpha: " << m_alpha);
+}
+
+void TcpHtcp::UpdateBeta (void)
+{
+  NS_LOG_FUNCTION (this);
+  if (m_lastThroughput > 0)
+    {
+      if (((m_throughput - m_lastThroughput) / m_lastThroughput) > m_throughputRatio)
+        {
+          m_beta = m_defaultBackoff;
+        }
+      else
+        {
+          m_beta = m_minRtt.GetDouble () / m_maxRtt.GetDouble ();
+        }
+    }
+  else
+    {
+      m_beta = m_defaultBackoff;
+    }
+  NS_LOG_DEBUG ("Updated m_beta: " << m_beta);
+}
+
+uint32_t TcpHtcp::GetSsThresh (Ptr<const TcpSocketState> tcb,
+                            uint32_t bytesInFlight)
+{
+  NS_LOG_FUNCTION (this << tcb << bytesInFlight);
+
+  m_lastCon = Simulator::Now ();
+
+  UpdateBeta ();
+  UpdateAlpha ();
+
+  uint32_t segWin = 2 * tcb->m_segmentSize;
+  uint32_t bFlight = bytesInFlight * m_beta;
+  uint32_t ssThresh = std::max (segWin, bFlight);
+  m_minRtt = Time::Max ();
+  m_maxRtt = Time::Min ();
+  m_lastThroughput = m_throughput;
+  m_throughput = 0;
+  m_dataSent = 0;
+  NS_LOG_DEBUG (this << " ssThresh: " << ssThresh << " m_beta: "  << m_beta);
+  return ssThresh;
+}
+
+void TcpHtcp::PktsAcked (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked,
+                      const Time &rtt)
+{
+
+  NS_LOG_FUNCTION (this << tcb << segmentsAcked << rtt);
+  NS_LOG_DEBUG ("TcpSocketState: " << tcb->m_congState);
+  if (tcb->m_congState == TcpSocketState::CA_OPEN)
+    {
+      m_dataSent += segmentsAcked * tcb->m_segmentSize;
+    }
+
+  m_throughput = m_dataSent
+    / (Simulator::Now ().GetSeconds () - m_lastCon.GetSeconds ());
+
+  UpdateAlpha ();
+  if (rtt < m_minRtt)
+    {
+      m_minRtt = rtt;
+      NS_LOG_DEBUG ("Updated m_minRtt=" << m_minRtt);
+    }
+  if (rtt > m_maxRtt)
+    {
+      m_maxRtt = rtt;
+      NS_LOG_DEBUG ("Updated m_maxRtt=" << m_maxRtt);
+    }
+}
+
+} // namespace ns3
diff -Naur ns-3.25/src/internet/model/tcp-htcp.h ns-3.26/src/internet/model/tcp-htcp.h
--- ns-3.25/src/internet/model/tcp-htcp.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/model/tcp-htcp.h	2016-10-03 19:49:01.673387459 -0700
@@ -0,0 +1,110 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 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
+ *
+ * by: Amir Modarresi <amodarresi@ittc.ku.edu>
+ *
+ * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
+ * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
+ * Information and Telecommunication Technology Center (ITTC)
+ * and Department of Electrical Engineering and Computer Science
+ * The University of Kansas Lawrence, KS USA.
+ */
+
+#ifndef TCP_HTCP_H
+#define TCP_HTCP_H
+
+#include "ns3/tcp-congestion-ops.h"
+#include "ns3/traced-value.h"
+#include "ns3/sequence-number.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup socket
+ * \ingroup tcp
+ *
+ * \brief An implementation of the H-TCP variant of TCP.
+ *
+ * This class contains the H-TCP implementation of TCP, according to
+ * Internet-Draft draft-leith-tcp-htcp-03 and its related paper,
+ * "H-TCP: TCP for high-speed and long-distance networks"
+ * H-TCP is a congestion control protocol suitable for high bandwidth-delay
+ * product networks. It is fair to similar flows present in the network and 
+ * also friendly with conventional TCP. It also makes use of free 
+ * bandwidth when it is available.
+ */
+class TcpHtcp : public TcpNewReno
+{
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+  /**
+   * Create an unbound tcp socket.
+   */
+  TcpHtcp (void);
+  /**
+   * \brief Copy constructor
+   * \param sock the object to copy
+   */
+  TcpHtcp (const TcpHtcp& sock);
+  virtual ~TcpHtcp (void);
+  virtual std::string GetName () const;
+  virtual Ptr<TcpCongestionOps> Fork ();
+  virtual uint32_t GetSsThresh (Ptr<const TcpSocketState> tcb,
+                                uint32_t bytesInFlight);
+
+  virtual void PktsAcked (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked,
+                          const Time &rtt);
+
+protected:
+  virtual void CongestionAvoidance (Ptr<TcpSocketState> tcb,
+                                    uint32_t segmentsAcked);
+
+private:
+  /**
+   * \brief Updates the additive increase parameter for H-TCP
+   */
+  void UpdateAlpha (void);
+
+  /**
+   * \brief Updates the multiplicative decrease factor beta for H-TCP
+   */
+  void UpdateBeta (void);
+
+  // h-tcp variables
+  double m_alpha;                    //!< AIMD additive increase parameter
+  double m_beta;                     //!< AIMD multiplicative decrease factor
+  double m_defaultBackoff;           //!< default value when throughput ratio less than default
+  double m_throughputRatio;          //!< ratio of two consequence throughput
+  Time m_delta;                      //!< Time in second that has elapsed since the
+                                     //last congestion event experienced by a flow
+  Time m_deltaL;                     //!< Threshold for switching between standard and new increase function
+  Time m_lastCon;                    //!< Time of the last congestion for the flow
+  Time m_minRtt;                     //!< Minimum RTT in each congestion period
+  Time m_maxRtt;                     //!< Maximum RTT in each congestion period
+  uint32_t m_throughput;             //!< Current throughput since last congestion
+  uint32_t m_lastThroughput;         //!< Throughput in last congestion period
+  uint32_t m_dataSent;               //!< Current amount of data sent since last congestion
+
+};
+
+} // namespace ns3
+
+#endif /* TCP_HTCP_H */
diff -Naur ns-3.25/src/internet/model/tcp-hybla.h ns-3.26/src/internet/model/tcp-hybla.h
--- ns-3.25/src/internet/model/tcp-hybla.h	2016-10-03 20:57:08.369246685 -0700
+++ ns-3.26/src/internet/model/tcp-hybla.h	2016-10-03 19:49:01.674387452 -0700
@@ -25,6 +25,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup congestionOps
+ *
  * \brief Implementation of the TCP Hybla algorithm
  *
  * The key idea behind TCP Hybla is to obtain for long RTT connections the same
diff -Naur ns-3.25/src/internet/model/tcp-illinois.cc ns-3.26/src/internet/model/tcp-illinois.cc
--- ns-3.25/src/internet/model/tcp-illinois.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/model/tcp-illinois.cc	2016-10-03 19:49:01.674387452 -0700
@@ -0,0 +1,382 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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: Keerthi Ganta <keerthiganta@ku.edu>
+ *         Truc Anh N. Nguyen <annguyen@ittc.ku.edu>
+ *
+ * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
+ * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
+ * Information and Telecommunication Technology Center (ITTC)
+ * and Department of Electrical Engineering and Computer Science
+ * The University of Kansas Lawrence, KS USA.
+ */
+
+
+#include "tcp-illinois.h"
+#include "ns3/tcp-socket-base.h"
+#include "ns3/log.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpIllinois");
+NS_OBJECT_ENSURE_REGISTERED (TcpIllinois);
+
+TypeId
+TcpIllinois::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::TcpIllinois")
+    .SetParent<TcpNewReno> ()
+    .AddConstructor<TcpIllinois> ()
+    .SetGroupName ("Internet")
+    .AddAttribute ("AlphaMin", "Minimum alpha threshold",
+                   DoubleValue (0.3),
+                   MakeDoubleAccessor (&TcpIllinois::m_alphaMin),
+                   MakeDoubleChecker<double> ())
+    .AddAttribute ("AlphaMax", "Maximum alpha threshold",
+                   DoubleValue (10.0),
+                   MakeDoubleAccessor (&TcpIllinois::m_alphaMax),
+                   MakeDoubleChecker<double> ())
+    .AddAttribute ("AlphaBase", "Alpha base threshold",
+                   DoubleValue (1.0),
+                   MakeDoubleAccessor (&TcpIllinois::m_alphaBase),
+                   MakeDoubleChecker<double> ())
+    .AddAttribute ("BetaMin", "Minimum beta threshold",
+                   DoubleValue (0.125),
+                   MakeDoubleAccessor (&TcpIllinois::m_betaMin),
+                   MakeDoubleChecker<double> ())
+    .AddAttribute ("BetaMax", "Maximum beta threshold",
+                   DoubleValue (0.5),
+                   MakeDoubleAccessor (&TcpIllinois::m_betaMax),
+                   MakeDoubleChecker<double> ())
+    .AddAttribute ("BetaBase", "Beta base threshold",
+                   DoubleValue (0.5),
+                   MakeDoubleAccessor (&TcpIllinois::m_betaBase),
+                   MakeDoubleChecker<double> ())
+    .AddAttribute ("WinThresh", "Window threshold",
+                   UintegerValue (15),
+                   MakeUintegerAccessor (&TcpIllinois::m_winThresh),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("Theta", "Theta threshold",
+                   UintegerValue (5),
+                   MakeUintegerAccessor (&TcpIllinois::m_theta),
+                   MakeUintegerChecker<uint32_t> ())
+  ;
+  return tid;
+}
+
+TcpIllinois::TcpIllinois (void)
+  : TcpNewReno (),
+    m_sumRtt (Time (0)),
+    m_cntRtt (0),
+    m_baseRtt (Time::Max ()),
+    m_maxRtt (Time::Min ()),
+    m_endSeq (0),
+    m_rttAbove (false),
+    m_rttLow (0),
+    m_alphaMin (0.3),
+    m_alphaMax (10.0),
+    m_alphaBase (1.0),
+    m_alpha (m_alphaMax),
+    m_betaMin (0.125),
+    m_betaMax (0.5),
+    m_betaBase (0.5),
+    m_beta (m_betaBase),
+    m_winThresh (15),
+    m_theta (5),
+    m_ackCnt (0)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+TcpIllinois::TcpIllinois (const TcpIllinois& sock)
+  : TcpNewReno (sock),
+    m_sumRtt (sock.m_sumRtt),
+    m_cntRtt (sock.m_cntRtt),
+    m_baseRtt (sock.m_baseRtt),
+    m_maxRtt (sock.m_maxRtt),
+    m_endSeq (sock.m_endSeq),
+    m_rttAbove (sock.m_rttAbove),
+    m_rttLow (sock.m_rttLow),
+    m_alphaMin (sock.m_alphaMin),
+    m_alphaMax (sock.m_alphaMax),
+    m_alphaBase (sock.m_alphaBase),
+    m_alpha (sock.m_alpha),
+    m_betaMin (sock.m_betaMin),
+    m_betaMax (sock.m_betaMax),
+    m_betaBase (sock.m_betaBase),
+    m_beta (sock.m_beta),
+    m_winThresh (sock.m_winThresh),
+    m_theta (sock.m_theta),
+    m_ackCnt (sock.m_ackCnt)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+TcpIllinois::~TcpIllinois (void)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+TcpIllinois::RecalcParam (uint32_t cWnd)
+{
+  NS_LOG_FUNCTION (this << cWnd);
+
+  if (cWnd < m_winThresh)
+    {
+      NS_LOG_INFO ("cWnd < winThresh, set alpha & beta to base values");
+
+      m_alpha = m_alphaBase;
+      m_beta = m_betaBase;
+    }
+  else if (m_cntRtt > 0)
+    {
+      double dm = static_cast<double> (CalculateMaxDelay ().GetMilliSeconds ());
+      double da = static_cast<double> (CalculateAvgDelay ().GetMilliSeconds ());
+
+      NS_LOG_INFO ("Updated to dm = " << dm << " da = " << da);
+
+      CalculateAlpha (da, dm);
+      CalculateBeta (da, dm);
+    }
+}
+
+void
+TcpIllinois::CongestionStateSet (Ptr<TcpSocketState> tcb,
+                                 const TcpSocketState::TcpCongState_t newState)
+{
+  NS_LOG_FUNCTION (this << tcb << newState);
+
+  if (newState == TcpSocketState::CA_LOSS)
+    {
+      m_alpha = m_alphaBase;
+      m_beta = m_betaBase;
+      m_rttLow = 0;
+      m_rttAbove = false;
+      Reset (tcb->m_nextTxSequence);
+    }
+}
+
+void
+TcpIllinois::IncreaseWindow (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked)
+{
+  NS_LOG_FUNCTION (this << segmentsAcked);
+
+  if (tcb->m_lastAckedSeq >= m_endSeq)
+    {
+      RecalcParam (tcb->m_cWnd);
+      Reset (tcb->m_nextTxSequence);
+    }
+
+  if (tcb->m_cWnd < tcb->m_ssThresh)
+    {
+      segmentsAcked = TcpNewReno::SlowStart (tcb, segmentsAcked);
+      NS_LOG_INFO ("In SlowStart, updated to cwnd " << tcb->m_cWnd <<
+                   " ssthresh " << tcb->m_ssThresh);
+    }
+  else
+    {
+      uint32_t segCwnd = tcb->GetCwndInSegments ();
+      uint32_t oldCwnd = segCwnd;
+
+      if (segmentsAcked > 0)
+        {
+          m_ackCnt += segmentsAcked * m_alpha;
+        }
+
+      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);
+        }
+    }
+}
+
+void
+TcpIllinois::PktsAcked (Ptr<TcpSocketState> tcb, uint32_t packetsAcked,
+                        const Time &rtt)
+{
+  NS_LOG_FUNCTION (this << tcb << packetsAcked << rtt);
+
+  if (rtt.IsZero ())
+    {
+      return;
+    }
+
+  // Keep track of minimum RTT
+  m_baseRtt = std::min (m_baseRtt, rtt);
+
+  // Keep track of maximum RTT
+  m_maxRtt = std::max (rtt, m_maxRtt);
+
+  ++m_cntRtt;
+  m_sumRtt += rtt;
+
+  NS_LOG_INFO ("Updated baseRtt = " << m_baseRtt << " maxRtt = " << m_maxRtt <<
+               " cntRtt = " << m_cntRtt << " sumRtt = " << m_sumRtt);
+}
+
+uint32_t
+TcpIllinois::GetSsThresh (Ptr<const TcpSocketState> tcb, uint32_t bytesInFlight)
+{
+  NS_LOG_FUNCTION (this << tcb << bytesInFlight);
+
+  uint32_t segBytesInFlight = bytesInFlight / tcb->m_segmentSize;
+  uint32_t ssThresh = std::max (2.0, (1.0 - m_beta) * segBytesInFlight);
+
+  NS_LOG_DEBUG ("Calculated ssThresh (in segments) = " << ssThresh);
+
+  return ssThresh * tcb->m_segmentSize;
+}
+
+void
+TcpIllinois::CalculateAlpha (double da, double dm)
+{
+  NS_LOG_FUNCTION (this << da << dm);
+
+  double d1 = dm / 100;
+
+  if (da <= d1)
+    {
+      NS_LOG_INFO ("da <= d1");
+
+      if (!m_rttAbove)
+        { // In case we can't get out of this low delay zone, we use alphaMax
+          m_alpha = m_alphaMax;
+        }
+      if (++m_rttLow >= m_theta)
+        {
+          /*
+           * da needs to stay below d1 for theta times RTT amount of time
+           * before we can increase alpha to alphaMax
+           */
+          NS_LOG_INFO ("da stays below d1 for theta times RTT amount of time, "
+                       "increase alpha to alphaMax");
+
+          m_rttLow = 0;
+          m_rttAbove = false;
+          m_alpha = m_alphaMax;
+        }
+    }
+  else
+    {
+      NS_LOG_INFO ("da > d1");
+
+      m_rttAbove = true;
+      /*
+       * alpha = k1 / (k2 + da), where
+       * k1 = ((dm - d1) * alphaMin * alphaMax) / (alphaMax - alphaMin)
+       * k2 = (((dm - d1) * alphaMin) / (alphaMax - alphaMin)) - d1
+       */
+      dm -= d1;
+      da -= d1;
+      m_alpha = (dm * m_alphaMax) / (dm + (da * (m_alphaMax - m_alphaMin)) / m_alphaMin);
+    }
+
+  NS_LOG_INFO ("Updated to alpha = " << m_alpha);
+}
+
+void
+TcpIllinois::CalculateBeta (double da, double dm)
+{
+  NS_LOG_FUNCTION (this << da << dm);
+
+  double d2, d3;
+
+  d2 = dm / 10;
+  d3 = (8 * dm) / 10;
+
+  if (da <= d2)
+    {
+      NS_LOG_INFO ("da <= d2");
+
+      m_beta = m_betaMin;
+    }
+
+  else if (da > d2 && da < d3)
+    {
+      NS_LOG_INFO ("da > d2 && da < d3");
+
+      /*
+       * beta = k3 + k4 * da, where
+       * k3 = (betaMin * d3 - betaMax * d2) / (d3 - d2)
+       * k4 = (betaMax - betaMin) / (d3 - d2)
+       */
+      m_beta = (m_betaMin * d3 - m_betaMax * d2 + (m_betaMax - m_betaMin) * da) / (d3 - d2);
+
+    }
+
+  else if (da >= d3 || d3 <= d2)
+    {
+      NS_LOG_INFO ("da >= d3 || d3 <= d2");
+
+      m_beta = m_betaMax;
+    }
+
+  NS_LOG_INFO ("Updated to beta = " << m_beta);
+}
+
+Time
+TcpIllinois::CalculateAvgDelay () const
+{
+  NS_LOG_FUNCTION (this);
+
+  return (m_sumRtt / m_cntRtt - m_baseRtt);
+}
+
+Time
+TcpIllinois::CalculateMaxDelay () const
+{
+  NS_LOG_FUNCTION (this);
+
+  return (m_maxRtt - m_baseRtt);
+}
+
+void
+TcpIllinois::Reset (const SequenceNumber32 &nextTxSequence)
+{
+  NS_LOG_FUNCTION (this << nextTxSequence);
+
+  m_endSeq = nextTxSequence;
+  m_cntRtt = 0;
+  m_sumRtt = Time (0);
+}
+
+Ptr<TcpCongestionOps>
+TcpIllinois::Fork (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  return CopyObject<TcpIllinois> (this);
+}
+
+std::string
+TcpIllinois::GetName () const
+{
+  NS_LOG_FUNCTION (this);
+
+  return "TcpIllinois";
+}
+
+} // namespace ns3
diff -Naur ns-3.25/src/internet/model/tcp-illinois.h ns-3.26/src/internet/model/tcp-illinois.h
--- ns-3.25/src/internet/model/tcp-illinois.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/model/tcp-illinois.h	2016-10-03 19:49:01.675387444 -0700
@@ -0,0 +1,251 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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: Keerthi Ganta <keerthiganta@ku.edu>
+ *         Truc Anh N. Nguyen <annguyen@ittc.ku.edu>
+ *
+ * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
+ * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
+ * Information and Telecommunication Technology Center (ITTC)
+ * and Department of Electrical Engineering and Computer Science
+ * The University of Kansas Lawrence, KS USA.
+ */
+
+#ifndef TCPILLINOIS_H
+#define TCPILLINOIS_H
+
+#include "ns3/tcp-congestion-ops.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup congestionOps
+ *
+ * \brief An implementation of TCP Illinois algorithm
+ *
+ * TCP Illinois is a hybrid congestion control algorithm designed for
+ * high-speed networks.  Illinois implements a Concave-AIMD (or C-AIMD)
+ * algorithm that uses packet loss as the primary congestion signal to
+ * determine the direction of window update and queueing delay as the
+ * secondary congestion signal to determine the amount of change.
+ *
+ * The additive increase and multiplicative decrease factors (denoted as
+ * alpha and beta, respectively) are functions of the current average queueing
+ * delay da as shown in Equations (1) and (2).  To improve the protocol
+ * robustness against sudden fluctuations in its delay sampling,
+ * Illinois allows the increment of alpha to alphaMax
+ * only if da stays below d1 for a some (theta) amount of time.
+ *
+ *                              / alphaMax          if da <= d1
+ *                      alpha =                                         (1)
+ *                              \ k1 / (k2 + da)    otherwise
+ *
+ *                             / betaMin            if da <= d2
+ *                      beta =   k3 + k4da          if d2 < da < d3      (2)
+ *                             \ betaMax            otherwise
+ *
+ *  where the calculations of k1, k2, k3, and k4 are shown in Equations (3), (4),
+ *  (5), and (6).
+ *
+ *           k1 = (dm - d1)(alphaMin)alphaMax / (alphaMax - alphaMin)    (3)
+ *
+ *           k2 = ((dm - d1)alphaMin / (alphaMax - alphaMin)) - d1       (4)
+ *
+ *           k3 = ((alphaMin)d3 - (alphaMax)d2) / (d3 - d2)              (5)
+ *
+ *           k4 = (alphaMax - alphaMin) / (d3 - d2)                      (6)
+ *
+ *  with da the current average queueing delay calculated in Equation  (7) where:
+ *  Ta is the average RTT (sumRtt / cntRtt in the implementation) and
+ *  Tmin (baseRtt in the implementation) is the minimum RTT ever seen
+ *  dm the maximum (average) queueing delay calculated in Equation (8) where
+ *  Tmax (maxRtt in the implementation) is the maximum RTT ever seen
+ *
+ *           da = Ta - Tmin          (7)
+ *
+ *           dm = Tmax - Tmin         (8)
+ *
+ * di (i = 1,2,3) are calculated in Equation (9) (0 <= eta_1 < 1, and
+ * 0 <= eta_2 <= eta_3 <=1)
+ *
+ *           di = (eta_i)dm            (9)
+ *
+ * Illinois only executes its adaptation of alpha and beta when cwnd exceeds a
+ * threshold called winThresh.  Otherwise, it sets alpha and beta to the base
+ * values of 1 and 0.5, respectively.
+ *
+ * Following the implementation of Illinois in the Linux kernel, we use the following
+ * default parameter settings:
+ *
+ *       alphaMin = 0.3      (0.1 in the Illinois paper)
+ *       alphaMax = 10.0
+ *       betaMin = 0.125
+ *       betaMax = 0.5
+ *       winThresh = 15      (10 in the Illinois paper)
+ *       theta = 5
+ *       eta1 = 0.01
+ *       eta2 = 0.1
+ *       eta3 = 0.8
+ *
+ * More information: http://www.doi.org/10.1145/1190095.1190166
+ */
+class TcpIllinois : public TcpNewReno
+{
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * Create an unbound tcp socket.
+   */
+  TcpIllinois (void);
+
+  /**
+   * \brief Copy constructor
+   * \param sock the object to copy
+   */
+  TcpIllinois (const TcpIllinois& sock);
+  virtual ~TcpIllinois (void);
+
+  virtual std::string GetName () const;
+
+  /**
+   * \brief Get slow start threshold after congestion event
+   *
+   * \param tcb internal congestion state
+   * \param bytesInFlight bytes in flight
+   *
+   * \return the slow start threshold value
+   */
+  virtual uint32_t GetSsThresh (Ptr<const TcpSocketState> tcb,
+                                uint32_t bytesInFlight);
+
+  virtual Ptr<TcpCongestionOps> Fork ();
+
+  /**
+    * \brief Reset Illinois parameters to default values upon a loss
+    *
+    * \param tcb internal congestion state
+    * \param newState new congestion state to which the TCP is going to switch
+    */
+  virtual void CongestionStateSet (Ptr<TcpSocketState> tcb,
+                                   const TcpSocketState::TcpCongState_t newState);
+
+  /**
+   * \brief Adjust cwnd following Illinois congestion avoidance algorithm
+   *
+   * \param tcb internal congestion state
+   * \param segmentsAcked count of segments ACKed
+   */
+  virtual void IncreaseWindow (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked);
+
+  /**
+   * \brief Measure RTT for each ACK
+   * Keep track of min and max RTT
+   *
+   * \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);
+
+protected:
+private:
+  /**
+   * \brief Recalculate alpha and beta every RTT
+   *
+   * \param cWnd current Cwnd (in bytes)
+   */
+  void RecalcParam (uint32_t cWnd);
+
+  /**
+   * \brief Calculate additive increase factor alpha
+   *
+   * If average queueing delay is at minimum, then alpha is set to alphaMax.
+   * Otherwise, alpha is a decreasing function of average queueing delay.
+   *
+   * \param da current average queueing delay
+   * \param dm maximum average queueing delay
+   *
+   */
+  void CalculateAlpha (double da, double dm);
+
+  /**
+   * \brief Calculate multiplicative decrease factor beta
+   *
+   * If the current average queueing delay is <= 10% of max. (average) queueing delay,
+   * beta is set to betaMin, which equals to 1/8 by default.
+   * If the current average queueing delay is >= 80% of max. (average) queueing delay,
+   * beta is set to betaMax, which equals to 1/2 by default.
+   * Otherwise, beta is an increasing function of average queueing delay.
+   *
+   * \param da current average queueing delay
+   * \param dm maximum average queueing delay
+   *
+   */
+  void CalculateBeta (double da, double dm);
+
+  /**
+   * \brief Calculate average queueing delay
+   *
+   * \return average queueing delay da
+   */
+  Time CalculateAvgDelay () const;
+
+  /**
+   * \brief Calculate maximum queueing delay
+   *
+   * \return maximum average queueing delay dm
+   */
+  Time CalculateMaxDelay () const;
+
+  /**
+   * \brief Reset Illinois parameters
+   *
+   * \param nextTxSequence Next sequence to transmit
+   */
+  void Reset (const SequenceNumber32 &nextTxSequence);
+
+private:
+  Time m_sumRtt;             //!< Sum of all RTT measurements during last RTT
+  uint32_t m_cntRtt;         //!< Number of RTT measurements during last RTT
+  Time m_baseRtt;            //!< Minimum of all RTT measurements
+  Time m_maxRtt;             //!< Maximum of all RTT measurements
+  SequenceNumber32 m_endSeq; //!< Right edge of current RTT
+  bool m_rttAbove;           //!< True when da > d1
+  uint8_t m_rttLow;          //!< Number of RTTs da has stayed below d1
+  double m_alphaMin;         //!< Minimum alpha threshold
+  double m_alphaMax;         //!< Maximum alpha threshold
+  double m_alphaBase;        //!< Base value of alpha for standard AIMD
+  double m_alpha;            //!< Additive increase factor
+  double m_betaMin;          //!< Minimum beta threshold
+  double m_betaMax;          //!< Maximum beta threshold
+  double m_betaBase;         //!< Base value of beta for standard AIMD
+  double m_beta;             //!< Multiplicative decrease factor
+  uint32_t m_winThresh;      //!< Window threshold for adaptive sizing
+  uint32_t m_theta;          //!< Number of RTTs required before setting alpha to its max
+  uint32_t m_ackCnt;         //!< Number of received ACK
+
+};
+
+} // namespace ns3
+
+#endif // TCPILLINOIS_H
diff -Naur ns-3.25/src/internet/model/tcp-l4-protocol.cc ns-3.26/src/internet/model/tcp-l4-protocol.cc
--- ns-3.25/src/internet/model/tcp-l4-protocol.cc	2016-10-03 20:57:08.370246677 -0700
+++ ns-3.26/src/internet/model/tcp-l4-protocol.cc	2016-10-03 19:49:01.676387437 -0700
@@ -41,6 +41,7 @@
 #include "ipv6-routing-protocol.h"
 #include "tcp-socket-factory-impl.h"
 #include "tcp-socket-base.h"
+#include "tcp-congestion-ops.h"
 #include "rtt-estimator.h"
 
 #include <vector>
diff -Naur ns-3.25/src/internet/model/tcp-l4-protocol.h ns-3.26/src/internet/model/tcp-l4-protocol.h
--- ns-3.25/src/internet/model/tcp-l4-protocol.h	2016-10-03 20:57:08.371246669 -0700
+++ ns-3.26/src/internet/model/tcp-l4-protocol.h	2016-10-03 19:49:01.676387437 -0700
@@ -40,10 +40,24 @@
 class TcpSocketBase;
 class Ipv4EndPoint;
 class Ipv6EndPoint;
+class NetDevice;
+
+
+/**
+ * \ingroup internet
+ * \defgroup tcp TCP
+ *
+ * This is an implementation of various Transmission Control Protocol flavors.
+ *
+ * Each TCP flavors is studied to match a specific environment, and they
+ * differ mainly in the congestion control algorithms used.
+ *
+ * See \RFC{793} and others.
+ */
 
 /**
  * \ingroup tcp
- * \brief Tcp socket creation and multiplexing/demultiplexing
+ * \brief TCP socket creation and multiplexing/demultiplexing
  * 
  * A single instance of this class is held by one instance of class Node.
  *
@@ -88,15 +102,16 @@
    * of the TCP protocol
    */
   Ptr<Socket> CreateSocket (void);
+
   /**
-   * \brief Create a TCP socket using the specified TypeId
+   * \brief Create a TCP socket using the specified congestion control algorithm TypeId
    *
    * \return A smart Socket pointer to a TcpSocket allocated by this instance
    * of the TCP protocol
    *
-   * \warning using a socketTypeId other than TCP is a bad idea.
+   * \warning using a congestionTypeId other than TCP is a bad idea.
    *
-   * \param socketTypeId the socket TypeId
+   * \param congestionTypeId the congestion control algorithm TypeId
    */
   Ptr<Socket> CreateSocket (TypeId congestionTypeId);
 
diff -Naur ns-3.25/src/internet/model/tcp-option.h ns-3.26/src/internet/model/tcp-option.h
--- ns-3.25/src/internet/model/tcp-option.h	2016-10-03 20:57:08.374246646 -0700
+++ ns-3.26/src/internet/model/tcp-option.h	2016-10-03 19:49:01.679387414 -0700
@@ -29,6 +29,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup tcp
+ *
  * Base class for all kinds of TCP options
  */
 class TcpOption : public Object
@@ -108,6 +110,8 @@
 };
 
 /**
+ * \ingroup tcp
+ *
  * \brief An unknown TCP option.
  *
  * An unknown option can be deserialized and (only if deserialized previously)
diff -Naur ns-3.25/src/internet/model/tcp-option-rfc793.h ns-3.26/src/internet/model/tcp-option-rfc793.h
--- ns-3.25/src/internet/model/tcp-option-rfc793.h	2016-10-03 20:57:08.372246662 -0700
+++ ns-3.26/src/internet/model/tcp-option-rfc793.h	2016-10-03 19:49:01.677387429 -0700
@@ -25,6 +25,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup tcp
+ *
  * Defines the TCP option of kind 0 (end of option list) as in \RFC{793}
  */
 class TcpOptionEnd : public TcpOption
diff -Naur ns-3.25/src/internet/model/tcp-option-ts.h ns-3.26/src/internet/model/tcp-option-ts.h
--- ns-3.25/src/internet/model/tcp-option-ts.h	2016-10-03 20:57:08.372246662 -0700
+++ ns-3.26/src/internet/model/tcp-option-ts.h	2016-10-03 19:49:01.678387422 -0700
@@ -27,6 +27,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup tcp
+ *
  * Defines the TCP option of kind 8 (timestamp option) as in \RFC{1323}
  */
 
diff -Naur ns-3.25/src/internet/model/tcp-option-winscale.h ns-3.26/src/internet/model/tcp-option-winscale.h
--- ns-3.25/src/internet/model/tcp-option-winscale.h	2016-10-03 20:57:08.373246654 -0700
+++ ns-3.26/src/internet/model/tcp-option-winscale.h	2016-10-03 19:49:01.678387422 -0700
@@ -27,6 +27,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup tcp
+ *
  * \brief Defines the TCP option of kind 3 (window scale option) as in \RFC{1323}
  *
  * For more efficient use of high bandwidth networks, a larger TCP window size
diff -Naur ns-3.25/src/internet/model/tcp-scalable.cc ns-3.26/src/internet/model/tcp-scalable.cc
--- ns-3.25/src/internet/model/tcp-scalable.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/model/tcp-scalable.cc	2016-10-03 19:49:01.680387407 -0700
@@ -0,0 +1,142 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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
+ *
+ * Authors: Truc Anh N. Nguyen <annguyen@ittc.ku.edu>
+ *          Keerthi Ganta <keerthig@ittc.ku.edu>
+ *          Md. Moshfequr Rahman <moshfequr@ittc.ku.edu>
+ *          Amir Modarresi <amodarresi@ittc.ku.edu>
+ *
+ * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
+ * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
+ * Information and Telecommunication Technology Center (ITTC)
+ * and Department of Electrical Engineering and Computer Science
+ * The University of Kansas Lawrence, KS USA.
+ */
+
+#include "tcp-scalable.h"
+#include "ns3/tcp-socket-base.h"
+#include "ns3/log.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpScalable");
+NS_OBJECT_ENSURE_REGISTERED (TcpScalable);
+
+TypeId
+TcpScalable::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::TcpScalable")
+    .SetParent<TcpNewReno> ()
+    .AddConstructor<TcpScalable> ()
+    .SetGroupName ("Internet")
+    .AddAttribute ("AIFactor", "Additive Increase Factor",
+                   UintegerValue (50),
+                   MakeUintegerAccessor (&TcpScalable::m_aiFactor),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("MDFactor", "Multiplicative Decrease Factor",
+                   DoubleValue (0.125),
+                   MakeDoubleAccessor (&TcpScalable::m_mdFactor),
+                   MakeDoubleChecker<double> ())
+  ;
+  return tid;
+}
+
+TcpScalable::TcpScalable (void)
+  : TcpNewReno (),
+    m_ackCnt (0),
+    m_aiFactor (50),
+    m_mdFactor (0.125)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+TcpScalable::TcpScalable (const TcpScalable& sock)
+  : TcpNewReno (sock),
+    m_ackCnt (sock.m_ackCnt),
+    m_aiFactor (sock.m_aiFactor),
+    m_mdFactor (sock.m_mdFactor)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+TcpScalable::~TcpScalable (void)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+Ptr<TcpCongestionOps>
+TcpScalable::Fork (void)
+{
+  return CopyObject<TcpScalable> (this);
+}
+
+void
+TcpScalable::CongestionAvoidance (Ptr<TcpSocketState> tcb,
+                                  uint32_t segmentsAcked)
+{
+  NS_LOG_FUNCTION (this << tcb << segmentsAcked);
+
+  uint32_t segCwnd = tcb->GetCwndInSegments ();
+  uint32_t oldCwnd = segCwnd;
+  uint32_t w = std::min (segCwnd, m_aiFactor);
+
+  if (m_ackCnt >= w)
+    {
+      m_ackCnt = 0;
+      segCwnd++;
+    }
+
+  m_ackCnt += segmentsAcked;
+  if (m_ackCnt >= w)
+    {
+      uint32_t delta = m_ackCnt / w;
+      m_ackCnt = 0;
+      segCwnd += delta;
+    }
+
+  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
+TcpScalable::GetName () const
+{
+  return "TcpScalable";
+}
+
+uint32_t
+TcpScalable::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 - m_mdFactor;
+  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;
+}
+
+} // namespace ns3
diff -Naur ns-3.25/src/internet/model/tcp-scalable.h ns-3.26/src/internet/model/tcp-scalable.h
--- ns-3.25/src/internet/model/tcp-scalable.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/model/tcp-scalable.h	2016-10-03 19:49:01.680387407 -0700
@@ -0,0 +1,116 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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
+ *
+ * Authors: Truc Anh N. Nguyen <annguyen@ittc.ku.edu>
+ *          Keerthi Ganta <keerthig@ittc.ku.edu>
+ *          Md Moshfequr Rahman <moshfequr@ittc.ku.edu>
+ *          Amir Modarresi <amodarresi@ittc.ku.edu>
+ *
+ * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
+ * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
+ * Information and Telecommunication Technology Center (ITTC)
+ * and Department of Electrical Engineering and Computer Science
+ * The University of Kansas Lawrence, KS USA.
+ */
+
+#ifndef TCPSCALABLE_H
+#define TCPSCALABLE_H
+
+#include "ns3/tcp-congestion-ops.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup congestionOps
+ *
+ * \brief An implementation of TCP Scalable
+ *
+ * Scalable improves TCP performance to better utilize the available bandwidth
+ * of a highspeed wide area network by altering NewReno congestion window
+ * adjustment algorithm.
+ *
+ * When congestion has not been detected, for each ACK received in an RTT,
+ * Scalable increases its cwnd per:
+ *
+ *         cwnd = cwnd + 0.01                  (1)
+ *
+ * Following Linux implementation of Scalable, we use 50 instead of 100 to
+ * account for delayed ACK.
+ *
+ * On the first detection of congestion in a given RTT, cwnd is reduced based
+ * on the following equation:
+ *
+ *         cwnd = cwnd - ceil(0.125 * cwnd)       (2)
+ *
+ * More information: http://doi.acm.org/10.1145/956981.956989
+ */
+
+class TcpScalable : public TcpNewReno
+{
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * Create an unbound tcp socket.
+   */
+  TcpScalable (void);
+
+  /**
+   * \brief Copy constructor
+   * \param sock the object to copy
+   */
+  TcpScalable (const TcpScalable& sock);
+  virtual ~TcpScalable (void);
+
+  virtual std::string GetName () const;
+
+  /**
+   * \brief Get slow start threshold following Scalable principle (Equation 2)
+   *
+   * \param tcb internal congestion state
+   * \param bytesInFlight bytes in flight
+   *
+   * \return the slow start threshold value
+   */
+  virtual uint32_t GetSsThresh (Ptr<const TcpSocketState> tcb,
+                                uint32_t bytesInFlight);
+
+  virtual Ptr<TcpCongestionOps> Fork ();
+
+protected:
+  /**
+   * \brief Congestion avoidance of TcpScalable (Equation 1)
+   *
+   * \param tcb internal congestion state
+   * \param segmentsAcked count of segments acked
+   */
+  virtual void CongestionAvoidance (Ptr<TcpSocketState> tcb,
+                                    uint32_t segmentsAcked);
+
+private:
+  uint32_t m_ackCnt;               //!< Number of received ACK
+  uint32_t m_aiFactor;             //!< Additive increase factor
+  double m_mdFactor;               //!< Multiplicative decrease factor
+};
+
+} // namespace ns3
+
+#endif // TCPSCALABLE_H
diff -Naur ns-3.25/src/internet/model/tcp-socket-base.cc ns-3.26/src/internet/model/tcp-socket-base.cc
--- ns-3.25/src/internet/model/tcp-socket-base.cc	2016-10-03 20:57:08.378246615 -0700
+++ ns-3.26/src/internet/model/tcp-socket-base.cc	2016-10-03 19:49:01.684387377 -0700
@@ -50,6 +50,7 @@
 #include "tcp-option-winscale.h"
 #include "tcp-option-ts.h"
 #include "rtt-estimator.h"
+#include "tcp-congestion-ops.h"
 
 #include <math.h>
 #include <algorithm>
@@ -138,11 +139,11 @@
                      "ns3::Time::TracedValueCallback")
     .AddTraceSource ("NextTxSequence",
                      "Next sequence number to send (SND.NXT)",
-                     MakeTraceSourceAccessor (&TcpSocketBase::m_nextTxSequence),
+                     MakeTraceSourceAccessor (&TcpSocketBase::m_nextTxSequenceTrace),
                      "ns3::SequenceNumber32TracedValueCallback")
     .AddTraceSource ("HighestSequence",
                      "Highest sequence number ever sent in socket's life time",
-                     MakeTraceSourceAccessor (&TcpSocketBase::m_highTxMark),
+                     MakeTraceSourceAccessor (&TcpSocketBase::m_highTxMarkTrace),
                      "ns3::SequenceNumber32TracedValueCallback")
     .AddTraceSource ("State",
                      "TCP state",
@@ -214,6 +215,14 @@
                      "TCP Congestion machine state",
                      MakeTraceSourceAccessor (&TcpSocketState::m_congState),
                      "ns3::TracedValue::TcpCongStatesTracedValueCallback")
+    .AddTraceSource ("HighestSequence",
+                     "Highest sequence number received from peer",
+                     MakeTraceSourceAccessor (&TcpSocketState::m_highTxMark),
+                     "ns3::SequenceNumber32TracedValueCallback")
+    .AddTraceSource ("NextTxSequence",
+                     "Next sequence number to send (SND.NXT)",
+                     MakeTraceSourceAccessor (&TcpSocketState::m_nextTxSequence),
+                     "ns3::SequenceNumber32TracedValueCallback")
   ;
   return tid;
 }
@@ -225,7 +234,11 @@
     m_initialCWnd (0),
     m_initialSsThresh (0),
     m_segmentSize (0),
-    m_congState (CA_OPEN)
+    m_lastAckedSeq (0),
+    m_congState (CA_OPEN),
+    m_highTxMark (0),
+    // Change m_nextTxSequence for non-zero initial sequence number
+    m_nextTxSequence (0)
 {
 }
 
@@ -236,7 +249,10 @@
     m_initialCWnd (other.m_initialCWnd),
     m_initialSsThresh (other.m_initialSsThresh),
     m_segmentSize (other.m_segmentSize),
-    m_congState (other.m_congState)
+    m_lastAckedSeq (other.m_lastAckedSeq),
+    m_congState (other.m_congState),
+    m_highTxMark (other.m_highTxMark),
+    m_nextTxSequence (other.m_nextTxSequence)
 {
 }
 
@@ -273,8 +289,8 @@
     m_node (0),
     m_tcp (0),
     m_rtt (0),
-    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),
@@ -296,7 +312,8 @@
     m_timestampEnabled (true),
     m_timestampToEcho (0),
     m_sendPendingDataEvent (),
-    m_recover (0), // Set to the initial sequence number
+    // Set m_recover to the initial sequence number
+    m_recover (0),
     m_retxThresh (3),
     m_limitedTx (false),
     m_retransOut (0),
@@ -321,6 +338,14 @@
   ok = m_tcb->TraceConnectWithoutContext ("CongState",
                                           MakeCallback (&TcpSocketBase::UpdateCongState, this));
   NS_ASSERT (ok == true);
+
+  ok = m_tcb->TraceConnectWithoutContext ("NextTxSequence",
+                                          MakeCallback (&TcpSocketBase::UpdateNextTxSequence, this));
+  NS_ASSERT (ok == true);
+
+  ok = m_tcb->TraceConnectWithoutContext ("HighestSequence",
+                                          MakeCallback (&TcpSocketBase::UpdateHighTxMark, this));
+  NS_ASSERT (ok == true);
 }
 
 TcpSocketBase::TcpSocketBase (const TcpSocketBase& sock)
@@ -345,8 +370,6 @@
     m_endPoint6 (0),
     m_node (sock.m_node),
     m_tcp (sock.m_tcp),
-    m_nextTxSequence (sock.m_nextTxSequence),
-    m_highTxMark (sock.m_highTxMark),
     m_state (sock.m_state),
     m_errno (sock.m_errno),
     m_closeNotified (sock.m_closeNotified),
@@ -410,6 +433,13 @@
   ok = m_tcb->TraceConnectWithoutContext ("CongState",
                                           MakeCallback (&TcpSocketBase::UpdateCongState, this));
   NS_ASSERT (ok == true);
+
+  ok = m_tcb->TraceConnectWithoutContext ("NextTxSequence",
+                                          MakeCallback (&TcpSocketBase::UpdateNextTxSequence, this));
+  NS_ASSERT (ok == true);
+
+  ok = m_tcb->TraceConnectWithoutContext ("HighestSequence",
+                                          MakeCallback (&TcpSocketBase::UpdateHighTxMark, this));
 }
 
 TcpSocketBase::~TcpSocketBase (void)
@@ -527,6 +557,7 @@
       InetSocketAddress transport = InetSocketAddress::ConvertFrom (address);
       Ipv4Address ipv4 = transport.GetIpv4 ();
       uint16_t port = transport.GetPort ();
+      SetIpTos (transport.GetTos ());
       if (ipv4 == Ipv4Address::GetAny () && port == 0)
         {
           m_endPoint = m_tcp->Allocate ();
@@ -639,6 +670,7 @@
         }
       InetSocketAddress transport = InetSocketAddress::ConvertFrom (address);
       m_endPoint->SetPeer (transport.GetIpv4 (), transport.GetPort ());
+      SetIpTos (transport.GetTos ());
       m_endPoint6 = 0;
 
       // Get the appropriate local address and port number from the routing protocol and set up endpoint
@@ -727,7 +759,7 @@
       return 0;
     }
 
-  if (m_txBuffer->SizeFromSequence (m_nextTxSequence) > 0)
+  if (m_txBuffer->SizeFromSequence (m_tcb->m_nextTxSequence) > 0)
     { // App close with pending data must wait until all data transmitted
       if (m_closeOnEmpty == false)
         {
@@ -841,19 +873,6 @@
       return Create<Packet> (); // Send EOF on connection close
     }
   Ptr<Packet> outPacket = m_rxBuffer->Extract (maxSize);
-  if (outPacket != 0 && outPacket->GetSize () != 0)
-    {
-      SocketAddressTag tag;
-      if (m_endPoint != 0)
-        {
-          tag.SetAddress (InetSocketAddress (m_endPoint->GetPeerAddress (), m_endPoint->GetPeerPort ()));
-        }
-      else if (m_endPoint6 != 0)
-        {
-          tag.SetAddress (Inet6SocketAddress (m_endPoint6->GetPeerAddress (), m_endPoint6->GetPeerPort ()));
-        }
-      outPacket->AddPacketTag (tag);
-    }
   return outPacket;
 }
 
@@ -1175,6 +1194,10 @@
 TcpSocketBase::DoForwardUp (Ptr<Packet> packet, const Address &fromAddress,
                             const Address &toAddress)
 {
+  // in case the packet still has a priority tag attached, remove it
+  SocketPriorityTag priorityTag;
+  packet->RemovePacketTag (priorityTag);
+
   // Peel off TCP header and do validity checking
   TcpHeader tcpHeader;
   uint32_t bytesRemoved = packet->RemoveHeader (tcpHeader);
@@ -1299,7 +1322,7 @@
           TcpHeader h;
           Ptr<Packet> p = Create<Packet> ();
           h.SetFlags (TcpHeader::RST);
-          h.SetSequenceNumber (m_nextTxSequence);
+          h.SetSequenceNumber (m_tcb->m_nextTxSequence);
           h.SetAckNumber (m_rxBuffer->NextRxSequence ());
           h.SetSourcePort (tcpHeader.GetDestinationPort ());
           h.SetDestinationPort (tcpHeader.GetSourcePort ());
@@ -1368,13 +1391,13 @@
 
           // TODO: RFC 5961 5.2 [Blind Data Injection Attack].[Mitigation]
         }
-      else if (tcpHeader.GetAckNumber () > m_highTxMark)
+      else if (tcpHeader.GetAckNumber () > m_tcb->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);
+                        " HighTxMark = " << m_tcb->m_highTxMark);
 
           SendEmptyPacket (TcpHeader::ACK);
         }
@@ -1416,6 +1439,83 @@
     }
 }
 
+void
+TcpSocketBase::LimitedTransmit ()
+{
+  NS_LOG_FUNCTION (this);
+  NS_ASSERT (m_limitedTx);
+  NS_ASSERT (m_txBuffer->SizeFromSequence (m_tcb->m_nextTxSequence) > 0);
+
+  NS_LOG_INFO ("Limited transmit");
+  uint32_t sz = SendDataPacket (m_tcb->m_nextTxSequence, m_tcb->m_segmentSize, true);
+  m_tcb->m_nextTxSequence += sz;
+}
+
+void
+TcpSocketBase::FastRetransmit ()
+{
+  NS_LOG_FUNCTION (this);
+  NS_ASSERT (m_tcb->m_congState != TcpSocketState::CA_RECOVERY);
+
+  m_recover = m_tcb->m_highTxMark;
+  m_congestionControl->CongestionStateSet (m_tcb, TcpSocketState::CA_RECOVERY);
+  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 ();
+}
+
+void
+TcpSocketBase::DupAck ()
+{
+  NS_LOG_FUNCTION (this);
+  ++m_dupAckCount;
+
+  if (m_tcb->m_congState == TcpSocketState::CA_OPEN)
+    {
+      // From Open we go Disorder
+      NS_ASSERT_MSG (m_dupAckCount == 1, "From OPEN->DISORDER but with " <<
+                     m_dupAckCount << " dup ACKs");
+
+      m_congestionControl->CongestionStateSet (m_tcb, TcpSocketState::CA_DISORDER);
+      m_tcb->m_congState = TcpSocketState::CA_DISORDER;
+
+      NS_LOG_DEBUG ("OPEN -> DISORDER");
+    }
+
+  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");
+          FastRetransmit ();
+        }
+      else if (m_limitedTx && m_txBuffer->SizeFromSequence (m_tcb->m_nextTxSequence) > 0)
+        {
+          // RFC3042 Limited transmit: Send a new packet for each duplicated ACK before fast retransmit
+          LimitedTransmit ();
+        }
+    }
+  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);
+    }
+
+  // Artificially call PktsAcked. After all, one segment has been ACKed.
+  m_congestionControl->PktsAcked (m_tcb, 1, m_lastRtt);
+}
+
 /* Process the newly received ACK */
 void
 TcpSocketBase::ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader)
@@ -1426,88 +1526,22 @@
   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;
-    }
-
-  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);
+                " SND.NXT=" << m_tcb->m_nextTxSequence);
+
+  m_tcb->m_lastAckedSeq = ackNumber;
 
   if (ackNumber == m_txBuffer->HeadSequence ()
-      && ackNumber < m_nextTxSequence
+      && ackNumber < m_tcb->m_nextTxSequence
       && packet->GetSize () == 0)
     {
       // There is a DupAck
-      ++m_dupAckCount;
-
-      if (m_tcb->m_congState == TcpSocketState::CA_OPEN)
-        {
-          // 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);
-        }
-
-      // Artificially call PktsAcked. After all, one segment has been ACKed.
-      m_congestionControl->PktsAcked (m_tcb, 1, m_lastRtt);
+      DupAck ();
     }
   else if (ackNumber == m_txBuffer->HeadSequence ()
-           && ackNumber == m_nextTxSequence)
+           && ackNumber == m_tcb->m_nextTxSequence)
     {
       // Dupack, but the ACK is precisely equal to the nextTxSequence
     }
@@ -1515,6 +1549,19 @@
     { // Case 3: New ACK, reset m_dupAckCount and update m_txBuffer
       bool callCongestionControl = true;
       bool resetRTO = true;
+      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;
+        }
+
+      NS_LOG_LOGIC (" Bytes acked: " << bytesAcked <<
+                    " Segments acked: " << segsAcked <<
+                    " bytes left: " << m_bytesAckedNotProcessed);
 
       /* The following switch is made because m_dupAckCount can be
        * "inflated" through out-of-order segments (e.g. from retransmission,
@@ -1545,6 +1592,7 @@
         {
           // The network reorder packets. Linux changes the counting lost
           // packet algorithm from FACK to NewReno. We simply go back in Open.
+          m_congestionControl->CongestionStateSet (m_tcb, TcpSocketState::CA_OPEN);
           m_tcb->m_congState = TcpSocketState::CA_OPEN;
           m_congestionControl->PktsAcked (m_tcb, segsAcked, m_lastRtt);
           m_dupAckCount = 0;
@@ -1620,6 +1668,7 @@
                */
               m_congestionControl->PktsAcked (m_tcb, segsAcked, m_lastRtt);
               newSegsAcked = (ackNumber - m_recover) / m_tcb->m_segmentSize;
+              m_congestionControl->CongestionStateSet (m_tcb, TcpSocketState::CA_OPEN);
               m_tcb->m_congState = TcpSocketState::CA_OPEN;
 
               NS_LOG_INFO ("Received full ACK for seq " << ackNumber <<
@@ -1634,8 +1683,12 @@
           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(ackNumber >= m_recover + 1)
+            {
+              m_congestionControl->CongestionStateSet (m_tcb, TcpSocketState::CA_OPEN);
+              m_tcb->m_congState = TcpSocketState::CA_OPEN;
+              NS_LOG_DEBUG ("LOSS -> OPEN");
+            }
         }
 
       if (callCongestionControl)
@@ -1715,6 +1768,7 @@
   if (tcpflags == 0)
     { // Bare data, accept it and move to ESTABLISHED state. This is not a normal behaviour. Remove this?
       NS_LOG_DEBUG ("SYN_SENT -> ESTABLISHED");
+      m_congestionControl->CongestionStateSet (m_tcb, TcpSocketState::CA_OPEN);
       m_state = ESTABLISHED;
       m_connected = true;
       m_retxEvent.Cancel ();
@@ -1734,15 +1788,16 @@
       SendEmptyPacket (TcpHeader::SYN | TcpHeader::ACK);
     }
   else if (tcpflags == (TcpHeader::SYN | TcpHeader::ACK)
-           && m_nextTxSequence + SequenceNumber32 (1) == tcpHeader.GetAckNumber ())
+           && m_tcb->m_nextTxSequence + SequenceNumber32 (1) == tcpHeader.GetAckNumber ())
     { // Handshake completed
       NS_LOG_DEBUG ("SYN_SENT -> ESTABLISHED");
+      m_congestionControl->CongestionStateSet (m_tcb, TcpSocketState::CA_OPEN);
       m_state = ESTABLISHED;
       m_connected = true;
       m_retxEvent.Cancel ();
       m_rxBuffer->SetNextRxSequence (tcpHeader.GetSequenceNumber () + SequenceNumber32 (1));
-      m_highTxMark = ++m_nextTxSequence;
-      m_txBuffer->SetHeadSequence (m_nextTxSequence);
+      m_tcb->m_highTxMark = ++m_tcb->m_nextTxSequence;
+      m_txBuffer->SetHeadSequence (m_tcb->m_nextTxSequence);
       SendEmptyPacket (TcpHeader::ACK);
       SendPendingData (m_connected);
       Simulator::ScheduleNow (&TcpSocketBase::ConnectionSucceeded, this);
@@ -1774,16 +1829,17 @@
 
   if (tcpflags == 0
       || (tcpflags == TcpHeader::ACK
-          && m_nextTxSequence + SequenceNumber32 (1) == tcpHeader.GetAckNumber ()))
+          && m_tcb->m_nextTxSequence + SequenceNumber32 (1) == tcpHeader.GetAckNumber ()))
     { // 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_DEBUG ("SYN_RCVD -> ESTABLISHED");
+      m_congestionControl->CongestionStateSet (m_tcb, TcpSocketState::CA_OPEN);
       m_state = ESTABLISHED;
       m_connected = true;
       m_retxEvent.Cancel ();
-      m_highTxMark = ++m_nextTxSequence;
-      m_txBuffer->SetHeadSequence (m_nextTxSequence);
+      m_tcb->m_highTxMark = ++m_tcb->m_nextTxSequence;
+      m_txBuffer->SetHeadSequence (m_tcb->m_nextTxSequence);
       if (m_endPoint)
         {
           m_endPoint->SetPeer (InetSocketAddress::ConvertFrom (fromAddress).GetIpv4 (),
@@ -1816,8 +1872,8 @@
         { // In-sequence FIN before connection complete. Set up connection and close.
           m_connected = true;
           m_retxEvent.Cancel ();
-          m_highTxMark = ++m_nextTxSequence;
-          m_txBuffer->SetHeadSequence (m_nextTxSequence);
+          m_tcb->m_highTxMark = ++m_tcb->m_nextTxSequence;
+          m_txBuffer->SetHeadSequence (m_tcb->m_nextTxSequence);
           if (m_endPoint)
             {
               m_endPoint->SetPeer (InetSocketAddress::ConvertFrom (fromAddress).GetIpv4 (),
@@ -1870,7 +1926,7 @@
     { // Process the ACK, and if in FIN_WAIT_1, conditionally move to FIN_WAIT_2
       ReceivedAck (packet, tcpHeader);
       if (m_state == FIN_WAIT_1 && m_txBuffer->Size () == 0
-          && tcpHeader.GetAckNumber () == m_highTxMark + SequenceNumber32 (1))
+          && tcpHeader.GetAckNumber () == m_tcb->m_highTxMark + SequenceNumber32 (1))
         { // This ACK corresponds to the FIN sent
           NS_LOG_DEBUG ("FIN_WAIT_1 -> FIN_WAIT_2");
           m_state = FIN_WAIT_2;
@@ -1908,7 +1964,7 @@
           NS_LOG_DEBUG ("FIN_WAIT_1 -> CLOSING");
           m_state = CLOSING;
           if (m_txBuffer->Size () == 0
-              && tcpHeader.GetAckNumber () == m_highTxMark + SequenceNumber32 (1))
+              && tcpHeader.GetAckNumber () == m_tcb->m_highTxMark + SequenceNumber32 (1))
             { // This ACK corresponds to the FIN sent
               TimeWait ();
             }
@@ -2107,7 +2163,7 @@
   NS_LOG_FUNCTION (this << (uint32_t)flags);
   Ptr<Packet> p = Create<Packet> ();
   TcpHeader header;
-  SequenceNumber32 s = m_nextTxSequence;
+  SequenceNumber32 s = m_tcb->m_nextTxSequence;
 
   /*
    * Add tags for each socket option.
@@ -2115,7 +2171,7 @@
    * if both options are set. Once the packet got to layer three, only
    * the corresponding tags will be read.
    */
-  if (IsManualIpTos ())
+  if (GetIpTos ())
     {
       SocketIpTosTag ipTosTag;
       ipTosTag.SetTos (GetIpTos ());
@@ -2143,6 +2199,14 @@
       p->AddPacketTag (ipHopLimitTag);
     }
 
+  uint8_t priority = GetPriority ();
+  if (priority)
+    {
+      SocketPriorityTag priorityTag;
+      priorityTag.SetPriority (priority);
+      p->ReplacePacketTag (priorityTag);
+    }
+
   if (m_endPoint == 0 && m_endPoint6 == 0)
     {
       NS_LOG_WARN ("Failed to send empty packet due to null endpoint");
@@ -2171,16 +2235,21 @@
       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);
 
+  uint16_t windowSize = AdvertisedWindowSize ();
   bool hasSyn = flags & TcpHeader::SYN;
   bool hasFin = flags & TcpHeader::FIN;
   bool isAck = flags == TcpHeader::ACK;
   if (hasSyn)
     {
+      if (m_winScalingEnabled)
+        { // The window scaling option is set only on SYN packets
+          AddOptionWScale (header);
+        }
+
       if (m_synCount == 0)
         { // No more connection retries, give up
           NS_LOG_LOGIC ("Connection failed.");
@@ -2203,7 +2272,10 @@
         { // This is SYN retransmission
           UpdateRttHistory (s, 0, true);
         }
+
+      windowSize = AdvertisedWindowSize (false);
     }
+  header.SetWindowSize (windowSize);
 
   m_txTrace (p, header, this);
 
@@ -2389,7 +2461,7 @@
   NS_LOG_FUNCTION (this << seq << maxSize << withAck);
 
   bool isRetransmission = false;
-  if (seq != m_highTxMark)
+  if (seq != m_tcb->m_highTxMark)
     {
       isRetransmission = true;
     }
@@ -2411,7 +2483,7 @@
    * if both options are set. Once the packet got to layer three, only
    * the corresponding tags will be read.
    */
-  if (IsManualIpTos ())
+  if (GetIpTos ())
     {
       SocketIpTosTag ipTosTag;
       ipTosTag.SetTos (GetIpTos ());
@@ -2439,6 +2511,14 @@
       p->AddPacketTag (ipHopLimitTag);
     }
 
+  uint8_t priority = GetPriority ();
+  if (priority)
+    {
+      SocketPriorityTag priorityTag;
+      priorityTag.SetPriority (priority);
+      p->ReplacePacketTag (priorityTag);
+    }
+
   if (m_closeOnEmpty && (remainingData == 0))
     {
       flags |= TcpHeader::FIN;
@@ -2509,12 +2589,13 @@
   UpdateRttHistory (seq, sz, isRetransmission);
 
   // Notify the application of the data being sent unless this is a retransmit
-  if (seq + sz > m_highTxMark)
+  if (seq + sz > m_tcb->m_highTxMark)
     {
-      Simulator::ScheduleNow (&TcpSocketBase::NotifyDataSent, this, (seq + sz - m_highTxMark.Get ()));
+      Simulator::ScheduleNow (&TcpSocketBase::NotifyDataSent, this,
+                             (seq + sz - m_tcb->m_highTxMark.Get ()));
     }
   // Update highTxMark
-  m_highTxMark = std::max (seq + sz, m_highTxMark.Get ());
+  m_tcb->m_highTxMark = std::max (seq + sz, m_tcb->m_highTxMark.Get ());
   return sz;
 }
 
@@ -2560,11 +2641,11 @@
       return false; // Is this the right way to handle this condition?
     }
   uint32_t nPacketsSent = 0;
-  while (m_txBuffer->SizeFromSequence (m_nextTxSequence))
+  while (m_txBuffer->SizeFromSequence (m_tcb->m_nextTxSequence))
     {
       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_tcb->m_segmentSize && m_txBuffer->SizeFromSequence (m_nextTxSequence) > w)
+      if (w < m_tcb->m_segmentSize && m_txBuffer->SizeFromSequence (m_tcb->m_nextTxSequence) > w)
         {
           NS_LOG_LOGIC ("Preventing Silly Window Syndrome. Wait to send.");
           break; // No more
@@ -2572,7 +2653,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_tcb->m_segmentSize)
+          && m_txBuffer->SizeFromSequence (m_tcb->m_nextTxSequence) < m_tcb->m_segmentSize)
         {
           NS_LOG_LOGIC ("Invoking Nagle's algorithm. Wait to send.");
           break;
@@ -2581,19 +2662,19 @@
                     " w " << w <<
                     " rxwin " << m_rWnd <<
                     " segsize " << m_tcb->m_segmentSize <<
-                    " nextTxSeq " << m_nextTxSequence <<
+                    " nextTxSeq " << m_tcb->m_nextTxSequence <<
                     " highestRxAck " << m_txBuffer->HeadSequence () <<
                     " pd->Size " << m_txBuffer->Size () <<
-                    " pd->SFS " << m_txBuffer->SizeFromSequence (m_nextTxSequence));
+                    " pd->SFS " << m_txBuffer->SizeFromSequence (m_tcb->m_nextTxSequence));
 
       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);
+      uint32_t sz = SendDataPacket (m_tcb->m_nextTxSequence, s, withAck);
       nPacketsSent++;                             // Count sent this loop
-      m_nextTxSequence += sz;                     // Advance next tx sequence
+      m_tcb->m_nextTxSequence += sz;                     // Advance next tx sequence
     }
   if (nPacketsSent > 0)
     {
@@ -2606,7 +2687,7 @@
 TcpSocketBase::UnAckDataCount () const
 {
   NS_LOG_FUNCTION (this);
-  return m_nextTxSequence.Get () - m_txBuffer->HeadSequence ();
+  return m_tcb->m_nextTxSequence.Get () - m_txBuffer->HeadSequence ();
 }
 
 uint32_t
@@ -2619,7 +2700,7 @@
   // 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 flightSize = m_tcb->m_nextTxSequence.Get () - m_txBuffer->HeadSequence ();
   uint32_t duplicatedSize;
   uint32_t bytesInFlight;
 
@@ -2663,19 +2744,22 @@
 }
 
 uint16_t
-TcpSocketBase::AdvertisedWindowSize () const
+TcpSocketBase::AdvertisedWindowSize (bool scale) const
 {
+  NS_LOG_FUNCTION (this << scale);
   uint32_t w = m_rxBuffer->MaxBufferSize ();
 
-  w >>= m_rcvWindShift;
-
+  if (scale)
+    {
+      w >>= m_rcvWindShift;
+    }
   if (w > m_maxWinSize)
     {
-      NS_LOG_WARN ("There is a loss in the adv win size, wrt buffer size");
       w = m_maxWinSize;
+      NS_LOG_WARN ("Adv window size truncated to " << m_maxWinSize << "; possibly to avoid overflow of the 16-bit integer");
     }
-
-  return (uint16_t) w;
+  NS_LOG_DEBUG ("Returning AdvertisedWindowSize of " << static_cast<uint16_t> (w));
+  return static_cast<uint16_t> (w);
 }
 
 // Receipt of new packet, put into Rx buffer
@@ -2821,9 +2905,9 @@
     {
       NotifySend (GetTxAvailable ());
     }
-  if (ack > m_nextTxSequence)
+  if (ack > m_tcb->m_nextTxSequence)
     {
-      m_nextTxSequence = ack; // If advanced
+      m_tcb->m_nextTxSequence = ack; // If advanced
     }
   if (m_txBuffer->Size () == 0 && m_state != FIN_WAIT_1 && m_state != CLOSING)
     { // No retransmit timer if no data to retransmit
@@ -2845,12 +2929,12 @@
       return;
     }
   // If all data are received (non-closing socket and nothing to send), just return
-  if (m_state <= ESTABLISHED && m_txBuffer->HeadSequence () >= m_highTxMark)
+  if (m_state <= ESTABLISHED && m_txBuffer->HeadSequence () >= m_tcb->m_highTxMark)
     {
       return;
     }
 
-  m_recover = m_highTxMark;
+  m_recover = m_tcb->m_highTxMark;
   Retransmit ();
 }
 
@@ -2885,9 +2969,9 @@
 {
   NS_LOG_LOGIC ("PersistTimeout expired at " << Simulator::Now ().GetSeconds ());
   m_persistTimeout = std::min (Seconds (60), Time (2 * m_persistTimeout)); // max persist timeout = 60s
-  Ptr<Packet> p = m_txBuffer->CopyFromSequence (1, m_nextTxSequence);
+  Ptr<Packet> p = m_txBuffer->CopyFromSequence (1, m_tcb->m_nextTxSequence);
   TcpHeader tcpHeader;
-  tcpHeader.SetSequenceNumber (m_nextTxSequence);
+  tcpHeader.SetSequenceNumber (m_tcb->m_nextTxSequence);
   tcpHeader.SetAckNumber (m_rxBuffer->NextRxSequence ());
   tcpHeader.SetWindowSize (AdvertisedWindowSize ());
   if (m_endPoint != 0)
@@ -2930,7 +3014,7 @@
       return;
     }
   // If all data are received (non-closing socket and nothing to send), just return
-  if (m_state <= ESTABLISHED && m_txBuffer->HeadSequence () >= m_highTxMark)
+  if (m_state <= ESTABLISHED && m_txBuffer->HeadSequence () >= m_tcb->m_highTxMark)
     {
       return;
     }
@@ -2968,16 +3052,17 @@
 
   if (m_tcb->m_congState != TcpSocketState::CA_LOSS)
     {
+      m_congestionControl->CongestionStateSet (m_tcb, 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_tcb->m_nextTxSequence = m_txBuffer->HeadSequence (); // Restart from highest Ack
   m_dupAckCount = 0;
 
   NS_LOG_DEBUG ("RTO. Reset cwnd to " <<  m_tcb->m_cWnd << ", ssthresh to " <<
-                m_tcb->m_ssThresh << ", restart from seqnum " << m_nextTxSequence);
+                m_tcb->m_ssThresh << ", restart from seqnum " << m_tcb->m_nextTxSequence);
   DoRetransmit ();                          // Retransmit the packet
 }
 
@@ -3025,8 +3110,8 @@
   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);
+  // In case of RTO, advance m_tcb->m_nextTxSequence
+  m_tcb->m_nextTxSequence = std::max (m_tcb->m_nextTxSequence.Get (), m_txBuffer->HeadSequence () + sz);
 
   NS_LOG_DEBUG ("retxing seq " << m_txBuffer->HeadSequence ());
 }
@@ -3218,12 +3303,6 @@
 {
   NS_LOG_FUNCTION (this << header);
 
-  // The window scaling option is set only on SYN packets
-  if (m_winScalingEnabled && (header.GetFlags () & TcpHeader::SYN))
-    {
-      AddOptionWScale (header);
-    }
-
   if (m_timestampEnabled)
     {
       AddOptionTimestamp (header);
@@ -3429,6 +3508,20 @@
 }
 
 void
+TcpSocketBase::UpdateNextTxSequence (SequenceNumber32 oldValue,
+                                     SequenceNumber32 newValue)
+
+{
+  m_nextTxSequenceTrace (oldValue, newValue);
+}
+
+void
+TcpSocketBase::UpdateHighTxMark (SequenceNumber32 oldValue, SequenceNumber32 newValue)
+{
+  m_highTxMarkTrace (oldValue, newValue);
+}
+
+void
 TcpSocketBase::SetCongestionControlAlgorithm (Ptr<TcpCongestionOps> algo)
 {
   NS_LOG_FUNCTION (this << algo);
diff -Naur ns-3.25/src/internet/model/tcp-socket-base.h ns-3.26/src/internet/model/tcp-socket-base.h
--- ns-3.25/src/internet/model/tcp-socket-base.h	2016-10-03 20:57:08.379246607 -0700
+++ ns-3.26/src/internet/model/tcp-socket-base.h	2016-10-03 19:49:01.686387362 -0700
@@ -36,7 +36,6 @@
 #include "tcp-tx-buffer.h"
 #include "tcp-rx-buffer.h"
 #include "rtt-estimator.h"
-#include "tcp-congestion-ops.h"
 
 namespace ns3 {
 
@@ -46,6 +45,7 @@
 class Packet;
 class TcpL4Protocol;
 class TcpHeader;
+class TcpCongestionOps;
 
 /**
  * \ingroup tcp
@@ -100,6 +100,11 @@
   static TypeId GetTypeId (void);
 
   TcpSocketState ();
+
+  /**
+   * \brief Copy constructor.
+   * \param other object to copy.
+   */
   TcpSocketState (const TcpSocketState &other);
 
   /**
@@ -153,8 +158,11 @@
 
   // Segment
   uint32_t               m_segmentSize;     //!< Segment size
+  SequenceNumber32       m_lastAckedSeq;    //!< Last sequence ACKed
 
   TracedValue<TcpCongState_t> m_congState;    //!< State in the Congestion state machine
+  TracedValue<SequenceNumber32> m_highTxMark; //!< Highest seqno ever sent, regardless of ReTx
+  TracedValue<SequenceNumber32> m_nextTxSequence; //!< Next seqnum to be sent (SND.NXT), ReTx pushes it back
 
   /**
    * \brief Get cwnd in segments rather than bytes
@@ -165,6 +173,16 @@
   {
     return m_cWnd / m_segmentSize;
   }
+
+  /**
+   * \brief Get slow start thresh in segments rather than bytes
+   *
+   * \return Slow start threshold in segments
+   */
+  uint32_t GetSsThreshInSegments () const
+  {
+    return m_ssThresh / m_segmentSize;
+  }
 };
 
 /**
@@ -180,6 +198,15 @@
  * this class is modified from the original NS-3 TCP socket implementation
  * (TcpSocketImpl) by Raj Bhattacharjea <raj.b@gatech.edu> of Georgia Tech.
  *
+ * For IPv4 packets, the TOS set for the socket is used. The Bind and Connect
+ * operations set the TOS for the socket to the value specified in the provided
+ * address. A SocketIpTos tag is only added to the packet if the resulting
+ * TOS is non-null.
+ * Each packet is assigned the priority set for the socket. Setting a TOS
+ * for a socket also sets a priority for the socket (according to the
+ * Socket::IpTos2Priority function). A SocketPriority tag is only added to the
+ * packet if the priority is non-null.
+ *
  * Congestion state machine
  * ---------------------------
  *
@@ -342,6 +369,16 @@
   TracedCallback<TcpSocketState::TcpCongState_t, TcpSocketState::TcpCongState_t> m_congStateTrace;
 
   /**
+   * \brief Callback pointer for high tx mark chaining
+   */
+  TracedCallback <SequenceNumber32, SequenceNumber32> m_highTxMarkTrace;
+
+  /**
+   * \brief Callback pointer for next tx sequence chaining
+   */
+  TracedCallback<SequenceNumber32, SequenceNumber32> m_nextTxSequenceTrace;
+
+  /**
    * \brief Callback function to hook to TcpSocketState congestion window
    * \param oldValue old cWnd value
    * \param newValue new cWnd value
@@ -364,6 +401,20 @@
                         TcpSocketState::TcpCongState_t newValue);
 
   /**
+   * \brief Callback function to hook to TcpSocketState high tx mark
+   * \param oldValue old high tx mark
+   * \param newValue new high tx mark
+   */
+  void UpdateHighTxMark (SequenceNumber32 oldValue, SequenceNumber32 newValue);
+
+  /**
+   * \brief Callback function to hook to TcpSocketState next tx sequence
+   * \param oldValue old nextTxSeq value
+   * \param newValue new nextTxSeq value
+   */
+  void UpdateNextTxSequence (SequenceNumber32 oldValue, SequenceNumber32 newValue);
+
+  /**
    * \brief Install a congestion control algorithm on this socket
    *
    * \param algo Algorithm to be installed
@@ -741,9 +792,11 @@
 
   /**
    * \brief The amount of Rx window announced to the peer
+   * \param scale indicate if the window should be scaled. True for
+   * almost all cases, except when we are sending a SYN
    * \returns size of Rx window announced to the peer
    */
-  virtual uint16_t AdvertisedWindowSize (void) const;
+  virtual uint16_t AdvertisedWindowSize (bool scale = true) const;
 
   /**
    * \brief Update the receiver window (RWND) based on the value of the
@@ -807,6 +860,21 @@
   virtual void NewAck (SequenceNumber32 const& seq, bool resetRTO);
 
   /**
+   * \brief Dupack management
+   */
+  void DupAck ();
+
+  /**
+   * \brief Limited transmit algorithm
+   */
+  void LimitedTransmit ();
+
+  /**
+   * \brief Enter the FastRetransmit, and retransmit the head
+   */
+  void FastRetransmit ();
+
+  /**
    * \brief Call Retransmit() upon RTO event
    */
   virtual void ReTxTimeout (void);
@@ -941,8 +1009,6 @@
   Ptr<RttEstimator> m_rtt; //!< Round trip time estimator
 
   // Rx and Tx buffer management
-  TracedValue<SequenceNumber32> m_nextTxSequence; //!< Next seqnum to be sent (SND.NXT), ReTx pushes it back
-  TracedValue<SequenceNumber32> m_highTxMark;     //!< Highest seqno ever sent, regardless of ReTx
   Ptr<TcpRxBuffer>              m_rxBuffer;       //!< Rx buffer (reordering buffer)
   Ptr<TcpTxBuffer>              m_txBuffer;       //!< Tx buffer
 
diff -Naur ns-3.25/src/internet/model/tcp-socket-factory.h ns-3.26/src/internet/model/tcp-socket-factory.h
--- ns-3.25/src/internet/model/tcp-socket-factory.h	2016-10-03 20:57:08.380246600 -0700
+++ ns-3.26/src/internet/model/tcp-socket-factory.h	2016-10-03 19:49:01.687387355 -0700
@@ -28,6 +28,7 @@
 
 /**
  * \ingroup socket
+ * \ingroup tcp
  *
  * \brief API to create TCP socket instances 
  *
diff -Naur ns-3.25/src/internet/model/tcp-socket-factory-impl.h ns-3.26/src/internet/model/tcp-socket-factory-impl.h
--- ns-3.25/src/internet/model/tcp-socket-factory-impl.h	2016-10-03 20:57:08.380246600 -0700
+++ ns-3.26/src/internet/model/tcp-socket-factory-impl.h	2016-10-03 19:49:01.686387362 -0700
@@ -28,15 +28,7 @@
 class TcpL4Protocol;
 
 /**
- * \ingroup internet
- * \defgroup tcp Tcp
- *
- * Transmission Control Protocol
- *
- * See \RFC{793} and others.
- */
-
-/**
+ * \ingroup socket
  * \ingroup tcp
  *
  * \brief socket factory implementation for native ns-3 TCP
diff -Naur ns-3.25/src/internet/model/tcp-socket.h ns-3.26/src/internet/model/tcp-socket.h
--- ns-3.25/src/internet/model/tcp-socket.h	2016-10-03 20:57:08.381246592 -0700
+++ ns-3.26/src/internet/model/tcp-socket.h	2016-10-03 19:49:01.688387347 -0700
@@ -37,6 +37,7 @@
 
 /**
  * \ingroup socket
+ * \ingroup tcp
  *
  * \brief (abstract) base class of all TcpSockets
  *
@@ -181,7 +182,7 @@
 
   /**
    * \brief Set the number of data transmission retries before giving up.
-   * \param count the number of data transmission retries
+   * \param retries the number of data transmission retries
    */
   virtual void SetDataRetries (uint32_t retries) = 0;
 
diff -Naur ns-3.25/src/internet/model/tcp-vegas.cc ns-3.26/src/internet/model/tcp-vegas.cc
--- ns-3.25/src/internet/model/tcp-vegas.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/model/tcp-vegas.cc	2016-10-03 19:49:01.689387340 -0700
@@ -0,0 +1,295 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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 <annguyen@ittc.ku.edu>
+ *
+ * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
+ * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
+ * Information and Telecommunication Technology Center (ITTC)
+ * and Department of Electrical Engineering and Computer Science
+ * The University of Kansas Lawrence, KS USA.
+ */
+
+#include "tcp-vegas.h"
+#include "ns3/tcp-socket-base.h"
+#include "ns3/log.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpVegas");
+NS_OBJECT_ENSURE_REGISTERED (TcpVegas);
+
+TypeId
+TcpVegas::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::TcpVegas")
+    .SetParent<TcpNewReno> ()
+    .AddConstructor<TcpVegas> ()
+    .SetGroupName ("Internet")
+    .AddAttribute ("Alpha", "Lower bound of packets in network",
+                   UintegerValue (2),
+                   MakeUintegerAccessor (&TcpVegas::m_alpha),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("Beta", "Upper bound of packets in network",
+                   UintegerValue (4),
+                   MakeUintegerAccessor (&TcpVegas::m_beta),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("Gamma", "Limit on increase",
+                   UintegerValue (1),
+                   MakeUintegerAccessor (&TcpVegas::m_gamma),
+                   MakeUintegerChecker<uint32_t> ())
+  ;
+  return tid;
+}
+
+TcpVegas::TcpVegas (void)
+  : TcpNewReno (),
+    m_alpha (2),
+    m_beta (4),
+    m_gamma (1),
+    m_baseRtt (Time::Max ()),
+    m_minRtt (Time::Max ()),
+    m_cntRtt (0),
+    m_doingVegasNow (true),
+    m_begSndNxt (0)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+TcpVegas::TcpVegas (const TcpVegas& sock)
+  : TcpNewReno (sock),
+    m_alpha (sock.m_alpha),
+    m_beta (sock.m_beta),
+    m_gamma (sock.m_gamma),
+    m_baseRtt (sock.m_baseRtt),
+    m_minRtt (sock.m_minRtt),
+    m_cntRtt (sock.m_cntRtt),
+    m_doingVegasNow (true),
+    m_begSndNxt (0)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+TcpVegas::~TcpVegas (void)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+Ptr<TcpCongestionOps>
+TcpVegas::Fork (void)
+{
+  return CopyObject<TcpVegas> (this);
+}
+
+void
+TcpVegas::PktsAcked (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked,
+                     const Time& rtt)
+{
+  NS_LOG_FUNCTION (this << tcb << segmentsAcked << rtt);
+
+  if (rtt.IsZero ())
+    {
+      return;
+    }
+
+  m_minRtt = std::min (m_minRtt, rtt);
+  NS_LOG_DEBUG ("Updated m_minRtt = " << m_minRtt);
+
+  m_baseRtt = std::min (m_baseRtt, rtt);
+  NS_LOG_DEBUG ("Updated m_baseRtt = " << m_baseRtt);
+
+  // Update RTT counter
+  m_cntRtt++;
+  NS_LOG_DEBUG ("Updated m_cntRtt = " << m_cntRtt);
+}
+
+void
+TcpVegas::EnableVegas (Ptr<TcpSocketState> tcb)
+{
+  NS_LOG_FUNCTION (this << tcb);
+
+  m_doingVegasNow = true;
+  m_begSndNxt = tcb->m_nextTxSequence;
+  m_cntRtt = 0;
+  m_minRtt = Time::Max ();
+}
+
+void
+TcpVegas::DisableVegas ()
+{
+  NS_LOG_FUNCTION (this);
+
+  m_doingVegasNow = false;
+}
+
+void
+TcpVegas::CongestionStateSet (Ptr<TcpSocketState> tcb,
+                              const TcpSocketState::TcpCongState_t newState)
+{
+  NS_LOG_FUNCTION (this << tcb << newState);
+  if (newState == TcpSocketState::CA_OPEN)
+    {
+      EnableVegas (tcb);
+    }
+  else
+    {
+      DisableVegas ();
+    }
+}
+
+void
+TcpVegas::IncreaseWindow (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked)
+{
+  NS_LOG_FUNCTION (this << tcb << segmentsAcked);
+
+  if (!m_doingVegasNow)
+    {
+      // If Vegas is not on, we follow NewReno algorithm
+      NS_LOG_LOGIC ("Vegas is not turned on, we follow NewReno algorithm.");
+      TcpNewReno::IncreaseWindow (tcb, segmentsAcked);
+      return;
+    }
+
+  if (tcb->m_lastAckedSeq >= m_begSndNxt)
+    { // A Vegas cycle has finished, we do Vegas cwnd adjustment every RTT.
+
+      NS_LOG_LOGIC ("A Vegas cycle has finished, we adjust cwnd once per RTT.");
+
+      // Save the current right edge for next Vegas cycle
+      m_begSndNxt = tcb->m_nextTxSequence;
+
+      /*
+       * We perform Vegas calculations only if we got enough RTT samples to
+       * insure that at least 1 of those samples wasn't from a delayed ACK.
+       */
+      if (m_cntRtt <= 2)
+        {  // We do not have enough RTT samples, so we should behave like Reno
+          NS_LOG_LOGIC ("We do not have enough RTT samples to do Vegas, so we behave like NewReno.");
+          TcpNewReno::IncreaseWindow (tcb, segmentsAcked);
+        }
+      else
+        {
+          NS_LOG_LOGIC ("We have enough RTT samples to perform Vegas calculations");
+          /*
+           * We have enough RTT samples to perform Vegas algorithm.
+           * Now we need to determine if cwnd should be increased or decreased
+           * based on the calculated difference between the expected rate and actual sending
+           * rate and the predefined thresholds (alpha, beta, and gamma).
+           */
+          uint32_t diff;
+          uint32_t targetCwnd;
+          uint32_t segCwnd = tcb->GetCwndInSegments ();
+
+          /*
+           * Calculate the cwnd we should have. baseRtt is the minimum RTT
+           * per-connection, minRtt is the minimum RTT in this window
+           *
+           * little trick:
+           * desidered throughput is currentCwnd * baseRtt
+           * target cwnd is throughput / minRtt
+           */
+          double tmp = m_baseRtt.GetSeconds () / m_minRtt.GetSeconds ();
+          targetCwnd = segCwnd * tmp;
+          NS_LOG_DEBUG ("Calculated targetCwnd = " << targetCwnd);
+          NS_ASSERT (segCwnd >= targetCwnd); // implies baseRtt <= minRtt
+
+          /*
+           * Calculate the difference between the expected cWnd and
+           * the actual cWnd
+           */
+          diff = segCwnd - targetCwnd;
+          NS_LOG_DEBUG ("Calculated diff = " << diff);
+
+          if (diff > m_gamma && (tcb->m_cWnd < tcb->m_ssThresh))
+            {
+              /*
+               * We are going too fast. We need to slow down and change from
+               * slow-start to linear increase/decrease mode by setting cwnd
+               * to target cwnd. We add 1 because of the integer truncation.
+               */
+              NS_LOG_LOGIC ("We are going too fast. We need to slow down and "
+                            "change to linear increase/decrease mode.");
+              segCwnd = std::min (segCwnd, targetCwnd + 1);
+              tcb->m_cWnd = segCwnd * tcb->m_segmentSize;
+              tcb->m_ssThresh = GetSsThresh (tcb, 0);
+              NS_LOG_DEBUG ("Updated cwnd = " << tcb->m_cWnd <<
+                            " ssthresh=" << tcb->m_ssThresh);
+            }
+          else if (tcb->m_cWnd < tcb->m_ssThresh)
+            {     // Slow start mode
+              NS_LOG_LOGIC ("We are in slow start and diff < m_gamma, so we "
+                            "follow NewReno slow start");
+              segmentsAcked = TcpNewReno::SlowStart (tcb, segmentsAcked);
+            }
+          else
+            {     // Linear increase/decrease mode
+              NS_LOG_LOGIC ("We are in linear increase/decrease mode");
+              if (diff > m_beta)
+                {
+                  // We are going too fast, so we slow down
+                  NS_LOG_LOGIC ("We are going too fast, so we slow down by decrementing cwnd");
+                  segCwnd--;
+                  tcb->m_cWnd = segCwnd * tcb->m_segmentSize;
+                  tcb->m_ssThresh = GetSsThresh (tcb, 0);
+                  NS_LOG_DEBUG ("Updated cwnd = " << tcb->m_cWnd <<
+                                " ssthresh=" << tcb->m_ssThresh);
+                }
+              else if (diff < m_alpha)
+                {
+                  // We are going too slow (having too little data in the network),
+                  // so we speed up.
+                  NS_LOG_LOGIC ("We are going too slow, so we speed up by incrementing cwnd");
+                  segCwnd++;
+                  tcb->m_cWnd = segCwnd * tcb->m_segmentSize;
+                  NS_LOG_DEBUG ("Updated cwnd = " << tcb->m_cWnd <<
+                                " ssthresh=" << tcb->m_ssThresh);
+                }
+              else
+                {
+                  // We are going at the right speed
+                  NS_LOG_LOGIC ("We are sending at the right speed");
+                }
+            }
+          tcb->m_ssThresh = std::max (tcb->m_ssThresh, 3 * tcb->m_cWnd / 4);
+          NS_LOG_DEBUG ("Updated ssThresh = " << tcb->m_ssThresh);
+        }
+
+      // Reset cntRtt & minRtt every RTT
+      m_cntRtt = 0;
+      m_minRtt = Time::Max ();
+    }
+  else if (tcb->m_cWnd < tcb->m_ssThresh)
+    {
+      segmentsAcked = TcpNewReno::SlowStart (tcb, segmentsAcked);
+    }
+}
+
+std::string
+TcpVegas::GetName () const
+{
+  return "TcpVegas";
+}
+
+uint32_t
+TcpVegas::GetSsThresh (Ptr<const TcpSocketState> tcb,
+                       uint32_t bytesInFlight)
+{
+  NS_LOG_FUNCTION (this << tcb << bytesInFlight);
+  return std::max (std::min (tcb->m_ssThresh.Get (), tcb->m_cWnd.Get () - tcb->m_segmentSize), 2 * tcb->m_segmentSize);
+}
+
+} // namespace ns3
diff -Naur ns-3.25/src/internet/model/tcp-vegas.h ns-3.26/src/internet/model/tcp-vegas.h
--- ns-3.25/src/internet/model/tcp-vegas.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/model/tcp-vegas.h	2016-10-03 19:49:01.690387333 -0700
@@ -0,0 +1,169 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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 <annguyen@ittc.ku.edu>
+ *
+ * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
+ * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
+ * Information and Telecommunication Technology Center (ITTC)
+ * and Department of Electrical Engineering and Computer Science
+ * The University of Kansas Lawrence, KS USA.
+ */
+
+#ifndef TCPVEGAS_H
+#define TCPVEGAS_H
+
+#include "ns3/tcp-congestion-ops.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup congestionOps
+ *
+ * \brief An implementation of TCP Vegas
+ *
+ * TCP Vegas is a pure delay-based congestion control algorithm implementing a proactive
+ * scheme that tries to prevent packet drops by maintaining a small backlog at the
+ * bottleneck queue.
+ *
+ * Vegas continuously measures the actual throughput a connection achieves as shown in
+ * Equation (1) and compares it with the expected throughput calculated in Equation (2).
+ * The difference between these 2 sending rates in Equation (3) reflects the amount of
+ * extra packets being queued at the bottleneck.
+ *
+ *              actual = cwnd / RTT        (1)
+ *              expected = cwnd / BaseRTT  (2)
+ *              diff = expected - actual   (3)
+ *
+ * To avoid congestion, Vegas linearly increases/decreases its congestion window to ensure
+ * the diff value fall between the 2 predefined thresholds, alpha and beta.
+ * diff and another threshold, gamma, are used to determine when Vegas should change from
+ * its slow-start mode to linear increase/decrease mode.
+ *
+ * Following the implementation of Vegas in Linux, we use 2, 4, and 1 as the default values
+ * of alpha, beta, and gamma, respectively.
+ *
+ * More information: http://dx.doi.org/10.1109/49.464716
+ */
+
+class TcpVegas : public TcpNewReno
+{
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * Create an unbound tcp socket.
+   */
+  TcpVegas (void);
+
+  /**
+   * \brief Copy constructor
+   * \param sock the object to copy
+   */
+  TcpVegas (const TcpVegas& sock);
+  virtual ~TcpVegas (void);
+
+  virtual std::string GetName () const;
+
+  /**
+   * \brief Compute RTTs needed to execute Vegas algorithm
+   *
+   * The function filters RTT samples from the last RTT to find
+   * the current smallest propagation delay + queueing delay (minRtt).
+   * We take the minimum to avoid the effects of delayed ACKs.
+   *
+   * The function also min-filters all RTT measurements seen to find the
+   * propagation delay (baseRtt).
+   *
+   * \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);
+
+  /**
+   * \brief Enable/disable Vegas algorithm depending on the congestion state
+   *
+   * We only start a Vegas cycle when we are in normal congestion state (CA_OPEN state).
+   *
+   * \param tcb internal congestion state
+   * \param newState new congestion state to which the TCP is going to switch
+   */
+  virtual void CongestionStateSet (Ptr<TcpSocketState> tcb,
+                                   const TcpSocketState::TcpCongState_t newState);
+
+  /**
+   * \brief Adjust cwnd following Vegas linear increase/decrease algorithm
+   *
+   * \param tcb internal congestion state
+   * \param segmentsAcked count of segments ACKed
+   */
+  virtual void IncreaseWindow (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked);
+
+  /**
+   * \brief Get slow start threshold following Vegas principle
+   *
+   * \param tcb internal congestion state
+   * \param bytesInFlight bytes in flight
+   *
+   * \return the slow start threshold value
+   */
+  virtual uint32_t GetSsThresh (Ptr<const TcpSocketState> tcb,
+                                uint32_t bytesInFlight);
+
+  virtual Ptr<TcpCongestionOps> Fork ();
+
+protected:
+private:
+  /**
+   * \brief Enable Vegas algorithm to start taking Vegas samples
+   *
+   * Vegas algorithm is enabled in the following situations:
+   * 1. at the establishment of a connection
+   * 2. after an RTO
+   * 3. after fast recovery
+   * 4. when an idle connection is restarted
+   *
+   * \param tcb internal congestion state
+   */
+  void EnableVegas (Ptr<TcpSocketState> tcb);
+
+  /**
+   * \brief Stop taking Vegas samples
+   */
+  void DisableVegas ();
+
+private:
+  uint32_t m_alpha;                  //!< Alpha threshold, lower bound of packets in network
+  uint32_t m_beta;                   //!< Beta threshold, upper bound of packets in network
+  uint32_t m_gamma;                  //!< Gamma threshold, limit on increase
+  Time m_baseRtt;                    //!< Minimum of all Vegas RTT measurements seen during connection
+  Time m_minRtt;                     //!< Minimum of all RTT measurements within last RTT
+  uint32_t m_cntRtt;                 //!< Number of RTT measurements during last RTT
+  bool m_doingVegasNow;              //!< If true, do Vegas for this RTT
+  SequenceNumber32 m_begSndNxt;      //!< Right edge during last RTT
+};
+
+} // namespace ns3
+
+#endif // TCPVEGAS_H
diff -Naur ns-3.25/src/internet/model/tcp-veno.cc ns-3.26/src/internet/model/tcp-veno.cc
--- ns-3.25/src/internet/model/tcp-veno.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/model/tcp-veno.cc	2016-10-03 19:49:01.690387333 -0700
@@ -0,0 +1,266 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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 <annguyen@ittc.ku.edu>
+ *
+ * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
+ * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
+ * Information and Telecommunication Technology Center (ITTC)
+ * and Department of Electrical Engineering and Computer Science
+ * The University of Kansas Lawrence, KS USA.
+ */
+
+#include "tcp-veno.h"
+#include "ns3/tcp-socket-base.h"
+#include "ns3/log.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpVeno");
+NS_OBJECT_ENSURE_REGISTERED (TcpVeno);
+
+TypeId
+TcpVeno::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::TcpVeno")
+    .SetParent<TcpNewReno> ()
+    .AddConstructor<TcpVeno> ()
+    .SetGroupName ("Internet")
+    .AddAttribute ("Beta", "Threshold for congestion detection",
+                   UintegerValue (3),
+                   MakeUintegerAccessor (&TcpVeno::m_beta),
+                   MakeUintegerChecker<uint32_t> ())
+  ;
+  return tid;
+}
+
+TcpVeno::TcpVeno (void)
+  : TcpNewReno (),
+    m_baseRtt (Time::Max ()),
+    m_minRtt (Time::Max ()),
+    m_cntRtt (0),
+    m_doingVenoNow (true),
+    m_diff (0),
+    m_inc (true),
+    m_ackCnt (0),
+    m_beta (6)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+TcpVeno::TcpVeno (const TcpVeno& sock)
+  : TcpNewReno (sock),
+    m_baseRtt (sock.m_baseRtt),
+    m_minRtt (sock.m_minRtt),
+    m_cntRtt (sock.m_cntRtt),
+    m_doingVenoNow (true),
+    m_diff (0),
+    m_inc (true),
+    m_ackCnt (sock.m_ackCnt),
+    m_beta (sock.m_beta)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+TcpVeno::~TcpVeno (void)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+Ptr<TcpCongestionOps>
+TcpVeno::Fork (void)
+{
+  return CopyObject<TcpVeno> (this);
+}
+
+void
+TcpVeno::PktsAcked (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked,
+                    const Time& rtt)
+{
+  NS_LOG_FUNCTION (this << tcb << segmentsAcked << rtt);
+
+  if (rtt.IsZero ())
+    {
+      return;
+    }
+
+  m_minRtt = std::min (m_minRtt, rtt);
+  NS_LOG_DEBUG ("Updated m_minRtt= " << m_minRtt);
+
+
+  m_baseRtt = std::min (m_baseRtt, rtt);
+  NS_LOG_DEBUG ("Updated m_baseRtt= " << m_baseRtt);
+
+  // Update RTT counter
+  m_cntRtt++;
+  NS_LOG_DEBUG ("Updated m_cntRtt= " << m_cntRtt);
+}
+
+void
+TcpVeno::EnableVeno ()
+{
+  NS_LOG_FUNCTION (this);
+
+  m_doingVenoNow = true;
+  m_minRtt = Time::Max ();
+}
+
+void
+TcpVeno::DisableVeno ()
+{
+  NS_LOG_FUNCTION (this);
+
+  m_doingVenoNow = false;
+}
+
+void
+TcpVeno::CongestionStateSet (Ptr<TcpSocketState> tcb,
+                             const TcpSocketState::TcpCongState_t newState)
+{
+  NS_LOG_FUNCTION (this << tcb << newState);
+  if (newState == TcpSocketState::CA_OPEN)
+    {
+      EnableVeno ();
+      NS_LOG_LOGIC ("Veno is now on.");
+    }
+  else
+    {
+      DisableVeno ();
+      NS_LOG_LOGIC ("Veno is turned off.");
+    }
+}
+
+void
+TcpVeno::IncreaseWindow (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked)
+{
+  NS_LOG_FUNCTION (this << tcb << segmentsAcked);
+
+  // Always calculate m_diff, even if we are not doing Veno now
+  uint32_t targetCwnd;
+  uint32_t segCwnd = tcb->GetCwndInSegments ();
+
+  /*
+   * Calculate the cwnd we should have. baseRtt is the minimum RTT
+   * per-connection, minRtt is the minimum RTT in this window
+   *
+   * little trick:
+   * desidered throughput is currentCwnd * baseRtt
+   * target cwnd is throughput / minRtt
+   */
+  double tmp = m_baseRtt.GetSeconds () / m_minRtt.GetSeconds ();
+  targetCwnd = segCwnd * tmp;
+  NS_LOG_DEBUG ("Calculated targetCwnd = " << targetCwnd);
+  NS_ASSERT (segCwnd >= targetCwnd); // implies baseRtt <= minRtt
+
+  // Calculate the difference between actual and target cwnd
+  m_diff = segCwnd - targetCwnd;
+  NS_LOG_DEBUG ("Calculated m_diff = " << m_diff);
+
+  if (!m_doingVenoNow)
+    {
+      // If Veno is not on, we follow NewReno algorithm
+      NS_LOG_LOGIC ("Veno is not turned on, we follow NewReno algorithm.");
+      TcpNewReno::IncreaseWindow (tcb, segmentsAcked);
+      return;
+    }
+
+  // We do the Veno calculations only if we got enough RTT samples
+  if (m_cntRtt <= 2)
+    {    // We do not have enough RTT samples, so we should behave like NewReno
+      NS_LOG_LOGIC ("We do not have enough RTT samples to perform Veno "
+                    "calculations, we behave like NewReno.");
+      TcpNewReno::IncreaseWindow (tcb, segmentsAcked);
+    }
+  else
+    {
+      NS_LOG_LOGIC ("We have enough RTT samples to perform Veno calculations.");
+
+      if (tcb->m_cWnd < tcb->m_ssThresh)
+        { // Slow start mode. Veno employs same slow start algorithm as NewReno's.
+          NS_LOG_LOGIC ("We are in slow start, behave like NewReno.");
+          segmentsAcked = TcpNewReno::SlowStart (tcb, segmentsAcked);
+        }
+      else
+        { // Congestion avoidance mode
+          NS_LOG_LOGIC ("We are in congestion avoidance, execute Veno additive "
+                        "increase algo.");
+
+          if (m_diff < m_beta)
+            {
+              // Available bandwidth is not fully utilized,
+              // increase cwnd by 1 every RTT
+              NS_LOG_LOGIC ("Available bandwidth not fully utilized, increase "
+                            "cwnd by 1 every RTT");
+              TcpNewReno::CongestionAvoidance (tcb, segmentsAcked);
+            }
+          else
+            {
+              // Available bandwidth is fully utilized,
+              // increase cwnd by 1 every other RTT
+              NS_LOG_LOGIC ("Available bandwidth fully utilized, increase cwnd "
+                            "by 1 every other RTT");
+              if (m_inc)
+                {
+                  TcpNewReno::CongestionAvoidance (tcb, segmentsAcked);
+                  m_inc = false;
+                }
+              else
+                {
+                  m_inc = true;
+                }
+            }
+        }
+    }
+
+  // Reset cntRtt & minRtt every RTT
+  m_cntRtt = 0;
+  m_minRtt = Time::Max ();
+}
+
+std::string
+TcpVeno::GetName () const
+{
+  return "TcpVeno";
+}
+
+uint32_t
+TcpVeno::GetSsThresh (Ptr<const TcpSocketState> tcb,
+                      uint32_t bytesInFlight)
+{
+  NS_LOG_FUNCTION (this << tcb << bytesInFlight);
+
+  if (m_diff < m_beta)
+    {
+      // random loss due to bit errors is most likely to have occurred,
+      // we cut cwnd by 1/5
+      NS_LOG_LOGIC ("Random loss is most likely to have occurred, "
+                    "cwnd is reduced by 1/5");
+      static double tmp = 4.0/5.0;
+      return std::max (static_cast<uint32_t> (bytesInFlight * tmp),
+                       2 * tcb->m_segmentSize);
+    }
+  else
+    {
+      // congestion-based loss is most likely to have occurred,
+      // we reduce cwnd by 1/2 as in NewReno
+      NS_LOG_LOGIC ("Congestive loss is most likely to have occurred, "
+                    "cwnd is halved");
+      return TcpNewReno::GetSsThresh (tcb, bytesInFlight);
+    }
+}
+
+} // namespace ns3
diff -Naur ns-3.25/src/internet/model/tcp-veno.h ns-3.26/src/internet/model/tcp-veno.h
--- ns-3.25/src/internet/model/tcp-veno.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/model/tcp-veno.h	2016-10-03 19:49:01.690387333 -0700
@@ -0,0 +1,174 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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 <annguyen@ittc.ku.edu>
+ *
+ * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
+ * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
+ * Information and Telecommunication Technology Center (ITTC)
+ * and Department of Electrical Engineering and Computer Science
+ * The University of Kansas Lawrence, KS USA.
+ */
+
+#ifndef TCPVENO_H
+#define TCPVENO_H
+
+#include "ns3/tcp-congestion-ops.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup congestionOps
+ *
+ * \brief An implementation of TCP Veno
+ *
+ * TCP Veno enhances Reno algorithm for more effectively dealing with random
+ * packet loss in wireless access networks by employing Vegas's method in
+ * estimating the backlog at the bottleneck queue to distinguish between
+ * congestive and non-congestive states.
+ *
+ * The backlog (the number of packets accumulated at the bottleneck queue) is
+ * calculated using Equation (1):
+ *
+ *         N = Actual * (RTT - BaseRTT) = Diff * BaseRTT        (1)
+ * where
+ *         Diff = Expected - Actual = cwnd/BaseRTT - cwnd/RTT
+ *
+ * Veno makes decision on cwnd modification based on the calculated N and its
+ * predefined threshold beta.
+ *
+ * Specifically, it refines the additive increase algorithm of Reno so that the
+ * connection can stay longer in the stable state by incrementing cwnd by
+ * 1/cwnd for every other new ACK received after the available bandwidth has
+ * been fully utilized, i.e. when N exceeds beta.  Otherwise, Veno increases
+ * its cwnd by 1/cwnd upon every new ACK receipt as in Reno.
+ *
+ * In the multiplicative decrease algorithm, when Veno is in the non-congestive
+ * state, i.e. when N is less than beta, Veno decrements its cwnd by only 1/5
+ * because the loss encountered is more likely a corruption-based loss than a
+ * congestion-based.  Only when N is greater than beta, Veno halves its sending
+ * rate as in Reno.
+ *
+ * More information: http://dx.doi.org/10.1109/JSAC.2002.807336
+ */
+
+class TcpVeno : public TcpNewReno
+{
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * Create an unbound tcp socket.
+   */
+  TcpVeno (void);
+
+  /**
+   * \brief Copy constructor
+   * \param sock the object to copy
+   */
+  TcpVeno (const TcpVeno& sock);
+  virtual ~TcpVeno (void);
+
+  virtual std::string GetName () const;
+
+  /**
+   * \brief Perform RTT sampling needed to execute Veno algorithm
+   *
+   * The function filters RTT samples from the last RTT to find
+   * the current smallest propagation delay + queueing delay (m_minRtt).
+   * We take the minimum to avoid the effects of delayed ACKs.
+   *
+   * The function also min-filters all RTT measurements seen to find the
+   * propagation delay (m_baseRtt).
+   *
+   * \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);
+
+  /**
+   * \brief Enable/disable Veno depending on the congestion state
+   *
+   * We only start a Veno when we are in normal congestion state (CA_OPEN state).
+   *
+   * \param tcb internal congestion state
+   * \param newState new congestion state to which the TCP is going to switch
+   */
+  virtual void CongestionStateSet (Ptr<TcpSocketState> tcb,
+                                   const TcpSocketState::TcpCongState_t newState);
+
+  /**
+   * \brief Adjust cwnd following Veno additive increase algorithm
+   *
+   * \param tcb internal congestion state
+   * \param segmentsAcked count of segments ACKed
+   */
+  virtual void IncreaseWindow (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked);
+
+  /**
+   * \brief Get slow start threshold during Veno multiplicative-decrease phase
+   *
+   * \param tcb internal congestion state
+   * \param bytesInFlight bytes in flight
+   *
+   * \return the slow start threshold value
+   */
+  virtual uint32_t GetSsThresh (Ptr<const TcpSocketState> tcb,
+                                uint32_t bytesInFlight);
+
+  virtual Ptr<TcpCongestionOps> Fork ();
+
+protected:
+private:
+  /**
+   * \brief Enable Veno algorithm to start Veno sampling
+   *
+   * Veno algorithm is enabled in the following situations:
+   * 1. at the establishment of a connection
+   * 2. after an RTO
+   * 3. after fast recovery
+   * 4. when an idle connection is restarted
+   *
+   */
+  void EnableVeno ();
+
+  /**
+   * \brief Turn off Veno
+   */
+  void DisableVeno ();
+
+private:
+  Time m_baseRtt;                    //!< Minimum of all RTT measurements seen during connection
+  Time m_minRtt;                     //!< Minimum of RTTs measured within last RTT
+  uint32_t m_cntRtt;                 //!< Number of RTT measurements during last RTT
+  bool m_doingVenoNow;               //!< If true, do Veno for this RTT
+  uint32_t m_diff;                   //!< Difference between expected and actual throughput
+  bool m_inc;                        //!< If true, cwnd needs to be incremented
+  uint32_t m_ackCnt;                 //!< Number of received ACK
+  uint32_t m_beta;                   //!< Threshold for congestion detection
+};
+
+} // namespace ns3
+
+#endif // TCPVENO_H
diff -Naur ns-3.25/src/internet/model/tcp-westwood.h ns-3.26/src/internet/model/tcp-westwood.h
--- ns-3.25/src/internet/model/tcp-westwood.h	2016-10-03 20:57:08.383246576 -0700
+++ ns-3.26/src/internet/model/tcp-westwood.h	2016-10-03 19:49:01.691387325 -0700
@@ -45,12 +45,9 @@
 class EventId;
 
 /**
- * \ingroup socket
- * \ingroup tcp
+ * \ingroup congestionOps
  *
- * \brief An implementation of a stream socket using TCP.
- *
- * This class contains the implementation of TCP Westwood and Westwood+.
+ * \brief An implementation of TCP Westwood and Westwood+.
  *
  * Westwood and Westwood+ employ the AIAD (Additive Increase/Adaptive Decrease) 
  * congestion control paradigm. When a congestion episode happens, 
@@ -112,15 +109,15 @@
   /**
    * Update the total number of acknowledged packets during the current RTT
    *
-   * \param acked the number of packets the currently received ACK acknowledges
+   * \param [in] acked the number of packets the currently received ACK acknowledges
    */
   void UpdateAckedSegments (int acked);
 
   /**
    * Estimate the network's bandwidth
    *
-   * \param acked the number of acknowledged packets
-   * \param rtt the RTT estimation
+   * \param [in] rtt the RTT estimation.
+   * \param [in] tcb the socket state.
    */
   void EstimateBW (const Time& rtt, Ptr<TcpSocketState> tcb);
 
diff -Naur ns-3.25/src/internet/model/tcp-yeah.cc ns-3.26/src/internet/model/tcp-yeah.cc
--- ns-3.25/src/internet/model/tcp-yeah.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/model/tcp-yeah.cc	2016-10-03 19:49:01.692387318 -0700
@@ -0,0 +1,345 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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 <annguyen@ittc.ku.edu>
+ *
+ * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
+ * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
+ * Information and Telecommunication Technology Center (ITTC)
+ * and Department of Electrical Engineering and Computer Science
+ * The University of Kansas Lawrence, KS USA.
+ */
+
+#include "tcp-yeah.h"
+#include "ns3/tcp-socket-base.h"
+#include "ns3/log.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpYeah");
+NS_OBJECT_ENSURE_REGISTERED (TcpYeah);
+
+
+TypeId
+TcpYeah::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::TcpYeah")
+    .SetParent<TcpNewReno> ()
+    .AddConstructor<TcpYeah> ()
+    .SetGroupName ("Internet")
+    .AddAttribute ("Alpha", "Maximum backlog allowed at the bottleneck queue",
+                   UintegerValue (80),
+                   MakeUintegerAccessor (&TcpYeah::m_alpha),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("Gamma", "Fraction of queue to be removed per RTT",
+                   UintegerValue (1),
+                   MakeUintegerAccessor (&TcpYeah::m_gamma),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("Delta", "Log minimum fraction of cwnd to be removed on loss",
+                   UintegerValue (3),
+                   MakeUintegerAccessor (&TcpYeah::m_delta),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("Epsilon", "Log maximum fraction to be removed on early decongestion",
+                   UintegerValue (1),
+                   MakeUintegerAccessor (&TcpYeah::m_epsilon),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("Phy", "Maximum delta from base",
+                   UintegerValue (8),
+                   MakeUintegerAccessor (&TcpYeah::m_phy),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("Rho", "Minimum # of consecutive RTT to consider competition on loss",
+                   UintegerValue (16),
+                   MakeUintegerAccessor (&TcpYeah::m_rho),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("Zeta", "Minimum # of state switches to reset m_renoCount",
+                   UintegerValue (50),
+                   MakeUintegerAccessor (&TcpYeah::m_zeta),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("StcpAiFactor", "STCP additive increase factor",
+                   UintegerValue (100),
+                   MakeUintegerAccessor (&TcpYeah::m_stcpAiFactor),
+                   MakeUintegerChecker<uint32_t> ())
+  ;
+  return tid;
+}
+
+TcpYeah::TcpYeah (void)
+  : TcpNewReno (),
+    m_alpha (80),
+    m_gamma (1),
+    m_delta (3),
+    m_epsilon (1),
+    m_phy (8),
+    m_rho (16),
+    m_zeta (50),
+    m_stcpAiFactor (100),
+    m_stcp (0),
+    m_baseRtt (Time::Max ()),
+    m_minRtt (Time::Max ()),
+    m_cntRtt (0),
+    m_doingYeahNow (true),
+    m_begSndNxt (0),
+    m_lastQ (0),
+    m_doingRenoNow (0),
+    m_renoCount (2),
+    m_fastCount (0)
+{
+  NS_LOG_FUNCTION (this);
+  m_stcp = CreateObject <TcpScalable> ();
+  m_stcp->SetAttribute ("AIFactor", (UintegerValue) m_stcpAiFactor);
+}
+
+TcpYeah::TcpYeah (const TcpYeah& sock)
+  : TcpNewReno (sock),
+    m_alpha (sock.m_alpha),
+    m_gamma (sock.m_gamma),
+    m_delta (sock.m_delta),
+    m_epsilon (sock.m_epsilon),
+    m_phy (sock.m_phy),
+    m_rho (sock.m_rho),
+    m_zeta (sock.m_zeta),
+    m_stcpAiFactor (sock.m_stcpAiFactor),
+    m_baseRtt (sock.m_baseRtt),
+    m_minRtt (sock.m_minRtt),
+    m_cntRtt (sock.m_cntRtt),
+    m_doingYeahNow (sock.m_doingYeahNow),
+    m_begSndNxt (sock.m_begSndNxt),
+    m_lastQ (sock.m_lastQ),
+    m_doingRenoNow (sock.m_doingRenoNow),
+    m_renoCount (sock.m_renoCount),
+    m_fastCount (sock.m_fastCount)
+{
+  NS_LOG_FUNCTION (this);
+  m_stcp = CopyObject (sock.m_stcp);
+}
+
+TcpYeah::~TcpYeah (void)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+Ptr<TcpCongestionOps>
+TcpYeah::Fork (void)
+{
+  return CopyObject<TcpYeah> (this);
+}
+
+void
+TcpYeah::PktsAcked (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked,
+                    const Time& rtt)
+{
+  NS_LOG_FUNCTION (this << tcb << segmentsAcked << rtt);
+
+  if (rtt.IsZero ())
+    {
+      return;
+    }
+
+  m_minRtt = std::min (m_minRtt, rtt);
+  NS_LOG_DEBUG ("Updated m_minRtt = " << m_minRtt.GetMilliSeconds () << " ms");
+
+  m_baseRtt = std::min (m_baseRtt, rtt);
+  NS_LOG_DEBUG ("Updated m_baseRtt = " << m_baseRtt.GetMilliSeconds () << " ms");
+
+  // Update RTT counter
+  m_cntRtt++;
+  NS_LOG_DEBUG ("Updated m_cntRtt = " << m_cntRtt);
+}
+
+void
+TcpYeah::EnableYeah (const SequenceNumber32 &nextTxSequence)
+{
+  NS_LOG_FUNCTION (this << nextTxSequence);
+
+  m_doingYeahNow = true;
+  m_begSndNxt = nextTxSequence;
+  m_cntRtt = 0;
+  m_minRtt = Time::Max ();
+}
+
+void
+TcpYeah::DisableYeah ()
+{
+  NS_LOG_FUNCTION (this);
+
+  m_doingYeahNow = false;
+}
+
+void
+TcpYeah::CongestionStateSet (Ptr<TcpSocketState> tcb,
+                             const TcpSocketState::TcpCongState_t newState)
+{
+  NS_LOG_FUNCTION (this << tcb << newState);
+
+  if (newState == TcpSocketState::CA_OPEN)
+    {
+      EnableYeah (tcb->m_nextTxSequence);
+    }
+  else
+    {
+      DisableYeah ();
+    }
+}
+
+void
+TcpYeah::IncreaseWindow (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked)
+{
+  NS_LOG_FUNCTION (this << tcb << segmentsAcked);
+
+  if (tcb->m_cWnd < tcb->m_ssThresh)
+    {
+      NS_LOG_LOGIC ("In slow start, invoke NewReno slow start.");
+      segmentsAcked = TcpNewReno::SlowStart (tcb, segmentsAcked);
+    }
+  else if (!m_doingRenoNow)
+    { // Fast mode
+      NS_LOG_LOGIC ("In Fast mode, increment cwnd according to STCP rule.");
+      m_stcp->IncreaseWindow (tcb, segmentsAcked);
+      NS_LOG_INFO ("In Fast mode, updated to cwnd " << tcb->m_cWnd <<
+                   " ssthresh " << tcb->m_ssThresh);
+    }
+  else
+    { // Behave like NewReno
+      TcpNewReno::CongestionAvoidance (tcb, segmentsAcked);
+    }
+
+  if (tcb->m_lastAckedSeq >= m_begSndNxt)
+    { // A YeAH cycle has finished, we do YeAH cwnd adjustment every RTT.
+
+      NS_LOG_LOGIC ("A YeAH cycle has finished, check if enough RTT samples.");
+      /*
+       * We perform YeAH calculations only if we got enough RTT samples to
+       * insure that at least 1 of those samples wasn't from a delayed ACK.
+       */
+      if (m_cntRtt > 2)
+        {
+          NS_LOG_LOGIC ("Enough RTT samples to perform YeAH calculations");
+          /*
+           * We have enough RTT samples to perform YeAH algorithm.
+           * Now we need to determine if we should operate in Fast or Slow mode,
+           * and if we should execute the precautionary decongestion algorithm.
+           */
+
+          uint32_t segCwnd = tcb->GetCwndInSegments ();
+
+          // Calculate the extra number of packets in queue
+          // Naming convention: minRtt is the minimum RTT of this round,
+          // baseRtt is the minimum RTT of the entire transmission.
+          NS_ASSERT (m_minRtt >= m_baseRtt);
+          Time rttQueue =  m_minRtt - m_baseRtt;
+
+          // queue = rttQueue * bw = rttQueue * (cwnd/RTTmin)
+          double bw = segCwnd / m_minRtt.GetSeconds ();
+          uint32_t queue = bw * rttQueue.GetSeconds ();
+          NS_LOG_DEBUG ("Queue backlog = " << queue <<
+                        " given by cwnd = " << segCwnd <<
+                        ", minRtt = " << m_minRtt.GetMilliSeconds () <<
+                        " ms, baseRtt = " << m_baseRtt.GetMilliSeconds () <<
+                        " ms");
+
+          double L = rttQueue.GetSeconds () / m_baseRtt.GetSeconds ();
+          NS_LOG_DEBUG ("Network congestion level = " << L);
+
+          if (queue > m_alpha || L > (1 / m_phy) )
+            {  // Slow mode
+              if (queue > m_alpha && segCwnd > m_renoCount)
+                { // Precautionary decongestion
+                  NS_LOG_LOGIC ("Execute the precautionary decongestion.");
+                  uint32_t reduction = std::min (queue / m_gamma, segCwnd >> m_epsilon);
+                  segCwnd -= reduction;
+                  segCwnd = std::max (segCwnd, m_renoCount);
+                  tcb->m_cWnd = segCwnd * tcb->m_segmentSize;
+                  tcb->m_ssThresh = tcb->m_cWnd;
+
+                  NS_LOG_INFO ("In Slow mode, after precautionary decongestion, "
+                               "updated to cwnd " << tcb->m_cWnd <<
+                               " ssthresh " << tcb->m_ssThresh);
+                }
+
+              if (m_renoCount <= 2)
+                {
+                  m_renoCount = std::max (segCwnd >> 1, (uint32_t) 2);
+                }
+              else
+                {
+                  m_renoCount++;
+                }
+
+              m_doingRenoNow = m_doingRenoNow + 1;
+              NS_LOG_DEBUG ("In Slow mode, updated to m_renoCount = " <<
+                            m_renoCount << " m_doingRenoNow = " << m_doingRenoNow);
+            }
+          else
+            { // Fast mode
+              m_fastCount++;
+              if (m_fastCount > m_zeta)
+                { // Reset renoCount
+                  m_renoCount = 2;
+                  m_fastCount = 0;
+                }
+              m_doingRenoNow = 0;
+              NS_LOG_DEBUG ("In Fast mode, updated to m_renoCount = " <<
+                            m_renoCount << " m_doingRenoNow = " << m_doingRenoNow);
+            }
+          m_lastQ = queue;
+        }
+
+      // Save the current right edge for next Yeah cycle
+      m_begSndNxt = tcb->m_nextTxSequence;
+
+      // Reset cntRtt & minRtt
+      m_cntRtt = 0;
+      m_minRtt = Time::Max ();
+    }
+}
+
+std::string
+TcpYeah::GetName () const
+{
+  return "TcpYeah";
+}
+
+uint32_t
+TcpYeah::GetSsThresh (Ptr<const TcpSocketState> tcb,
+                      uint32_t bytesInFlight)
+{
+  NS_LOG_FUNCTION (this << tcb << bytesInFlight);
+  uint32_t reduction;
+  uint32_t segBytesInFlight = bytesInFlight / tcb->m_segmentSize;
+
+  if (m_doingRenoNow < m_rho)
+    { // Not competing with Reno flows
+      NS_LOG_LOGIC ("Not competing with Reno flows upon loss");
+      reduction = m_lastQ;
+      reduction = std::max (reduction, segBytesInFlight >> m_delta);
+      reduction = std::min (reduction, std::max (segBytesInFlight >> 1, (uint32_t) 2));
+    }
+  else
+    { // Competing with Reno flows
+      NS_LOG_LOGIC ("Competing with Reno flows upon loss");
+      reduction = std::max (segBytesInFlight >> 1, (uint32_t) 2);
+    }
+
+  NS_LOG_INFO ("Reduction amount upon loss = " << reduction);
+
+  m_fastCount = 0;
+  m_renoCount = std::max (m_renoCount >> 1, (uint32_t) 2);
+
+  return (bytesInFlight - (reduction * tcb->m_segmentSize));
+}
+
+} // namespace ns3
diff -Naur ns-3.25/src/internet/model/tcp-yeah.h ns-3.26/src/internet/model/tcp-yeah.h
--- ns-3.25/src/internet/model/tcp-yeah.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/model/tcp-yeah.h	2016-10-03 19:49:01.692387318 -0700
@@ -0,0 +1,189 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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 <annguyen@ittc.ku.edu>
+ *
+ * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
+ * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
+ * Information and Telecommunication Technology Center (ITTC)
+ * and Department of Electrical Engineering and Computer Science
+ * The University of Kansas Lawrence, KS USA.
+ */
+
+#ifndef TCPYEAH_H
+#define TCPYEAH_H
+
+#include "ns3/tcp-congestion-ops.h"
+#include "ns3/tcp-scalable.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup congestionOps
+ *
+ * \brief An implementation of TCP YeAH
+ *
+ *  YeAH-TCP (Yet Another HighSpeed TCP) is a heuristic designed to balance various
+ *  requirements of a state-of-the-art congestion control algorithm:
+ *  1) fully exploit the link capacity of high BDP networks while inducing a small
+ *  number of congestion events
+ *  2) compete friendly with Reno flows
+ *  3) achieve intra and RTT fairness
+ *  4) robust to random losses
+ *  5) achieve high performance regardless of buffer size
+ *
+ * YeAH operates between 2 modes: Fast and Slow mode.  In the Fast mode when the
+ * queue occupancy is small and the network congestion level is low, YeAH
+ * increments its congestion window according to the aggressive STCP rule.
+ * When the number of packets in the queue grows beyond a threshold and the
+ * network congestion level is high, YeAH enters its Slow mode, acting as Reno
+ * with a decongestion algorithm.  YeAH employs Vegas' mechanism for calculating
+ * the backlog as in Equation (1).  The estimation of the network congestion
+ * level is shown in Equation (2).
+ *
+ *                      Q = (RTT - BaseRTT) (cwnd / RTT)    (1)
+ *                      L = (RTT - BaseRTT) / BaseRTT       (2)
+ *
+ * To ensure TCP friendliness, YeAH also implements an algorithm to detect the
+ * presence of legacy Reno flows. Upon the receipt of 3 duplicate ACKs,
+ * YeAH decreases its slow start threshold according to Equation (3) if
+ * it's not competing with Reno flows.  Otherwise,  the ssthresh is halved
+ * as in Reno.
+ *
+ *                      ssthresh = min{max{cwnd/8, Q}, cwnd/2}
+ *
+ * More information: http://www.csc.lsu.edu/~sjpark/cs7601/4-YeAH_TCP.pdf
+ */
+
+class TcpYeah : public TcpNewReno
+{
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * Create an unbound tcp socket.
+   */
+  TcpYeah (void);
+
+  /**
+   * \brief Copy constructor
+   * \param sock the object to copy
+   */
+  TcpYeah (const TcpYeah& sock);
+  virtual ~TcpYeah (void);
+
+  virtual std::string GetName () const;
+
+  /**
+   * \brief Compute RTTs needed to execute YeAH algorithm
+   *
+   * The function filters RTT samples from the last RTT to find
+   * the current smallest propagation delay + queueing delay (minRtt).
+   * We take the minimum to avoid the effects of delayed ACKs.
+   *
+   * The function also min-filters all RTT measurements seen to find the
+   * propagation delay (baseRtt).
+   *
+   * \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);
+
+  /**
+   * \brief Enable/disable YeAH algorithm depending on the congestion state
+   *
+   * We only start a YeAH cycle when we are in normal congestion state (CA_OPEN state).
+   *
+   * \param tcb internal congestion state
+   * \param newState new congestion state to which the TCP is going to switch
+   */
+  virtual void CongestionStateSet (Ptr<TcpSocketState> tcb,
+                                   const TcpSocketState::TcpCongState_t newState);
+
+  /**
+   * \brief Adjust cwnd following YeAH dual-mode algorithm
+   *
+   * \param tcb internal congestion state
+   * \param segmentsAcked count of segments ACKed
+   */
+  virtual void IncreaseWindow (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked);
+
+  /**
+   * \brief Get slow start threshold upon the receipt of 3 dupACKs
+   *
+   * \param tcb internal congestion state
+   * \param bytesInFlight number of outstanding bytes
+   *
+   * \return the slow start threshold value
+   */
+  virtual uint32_t GetSsThresh (Ptr<const TcpSocketState> tcb,
+                                uint32_t bytesInFlight);
+
+  virtual Ptr<TcpCongestionOps> Fork ();
+
+protected:
+private:
+  /**
+   * \brief Enable YeAH algorithm to start taking YeAH samples
+   *
+   * YeAH algorithm is enabled in the following situations:
+   * 1. at the establishment of a connection
+   * 2. after an RTO
+   * 3. after fast recovery
+   * 4. when an idle connection is restarted
+   *
+   * \param nextTxSequence Sequence to transmit next
+   */
+  void EnableYeah (const SequenceNumber32 &nextTxSequence);
+
+  /**
+   * \brief Stop taking YeAH samples
+   */
+  void DisableYeah ();
+
+private:
+  uint32_t m_alpha;   //!< Maximum backlog allowed at the bottleneck queue; Q_max in the paper
+  uint32_t m_gamma;   //!< Fraction of queue to be removed per RTT when precautionary decongestion executed
+  uint32_t m_delta;   //!< Log minimum fraction of cwnd to be removed on loss
+  uint32_t m_epsilon; //!< Log maximum fraction to be removed on early decongestion
+  uint32_t m_phy;     //!< Maximum delta from base
+  uint32_t m_rho;     //!< Minimum number of consecutive RTT to consider competition with Reno flows on loss
+  uint32_t m_zeta;    //!< Minimum number of state switches to reset m_renoCount
+
+  uint32_t m_stcpAiFactor;  //!< STCP additive increase parameter
+  Ptr<TcpScalable> m_stcp;  //!< TcpScalable object
+  Time m_baseRtt;           //!< Minimum of all YeAH RTT measurements seen during connection
+  Time m_minRtt;            //!< Minimum of all RTTs measured within last RTT
+  uint32_t m_cntRtt;        //!< Number of RTT measurements during last RTT
+  bool m_doingYeahNow;          //!< If true, do YeAH for this RTT
+  SequenceNumber32 m_begSndNxt; //!< Right edge during last RTT
+  uint32_t m_lastQ;             //!< Last number of packets in the bottleneck queue
+  uint32_t m_doingRenoNow;      //!< Number of RTTs in "Slow" mode
+  uint32_t m_renoCount;         //!< Estimated cwnd of competing Reno flow
+  uint32_t m_fastCount;         //!< Number of RTTs in "Fast" mode
+};
+
+} // namespace ns3
+
+#endif // TCPYEAH_H
diff -Naur ns-3.25/src/internet/model/udp-l4-protocol.h ns-3.26/src/internet/model/udp-l4-protocol.h
--- ns-3.25/src/internet/model/udp-l4-protocol.h	2016-10-03 20:57:08.385246561 -0700
+++ ns-3.26/src/internet/model/udp-l4-protocol.h	2016-10-03 19:49:01.694387303 -0700
@@ -24,12 +24,8 @@
 #include <stdint.h>
 
 #include "ns3/packet.h"
-#include "ns3/ipv4-address.h"
-#include "ns3/ipv6-address.h"
 #include "ns3/ptr.h"
-#include "ns3/ip-l4-protocol.h"
-#include "ipv6-interface.h"
-#include "ipv6-header.h"
+#include "ip-l4-protocol.h"
 
 namespace ns3 {
 
@@ -42,6 +38,22 @@
 class UdpSocketImpl;
 
 /**
+ * \ingroup internet
+ * \defgroup udp UDP
+ *
+ * This  is  an  implementation of the User Datagram Protocol described in
+ * \RFC{768}.  It implements a connectionless,  unreliable  datagram  packet
+ * service.   Packets  may  be reordered or duplicated before they arrive.
+ * UDP generates and checks checksums to catch transmission errors.
+ *
+ * The following options are not presently part of this implementation:
+ * UDP_CORK, MSG_DONTROUTE, path MTU discovery control (e.g.
+ * IP_MTU_DISCOVER).  MTU handling is also weak in ns-3 for the moment;
+ * it is best to send datagrams that do not exceed 1500 byte MTU (e.g.
+ * 1472 byte UDP datagrams)
+ */
+
+/**
  * \ingroup udp
  * \brief Implementation of the UDP protocol
  */
diff -Naur ns-3.25/src/internet/model/udp-socket-factory.h ns-3.26/src/internet/model/udp-socket-factory.h
--- ns-3.25/src/internet/model/udp-socket-factory.h	2016-10-03 20:57:08.386246553 -0700
+++ ns-3.26/src/internet/model/udp-socket-factory.h	2016-10-03 19:49:01.695387295 -0700
@@ -28,6 +28,7 @@
 
 /**
  * \ingroup socket
+ * \ingroup udp
  *
  * \brief API to create UDP socket instances 
  *
diff -Naur ns-3.25/src/internet/model/udp-socket-factory-impl.h ns-3.26/src/internet/model/udp-socket-factory-impl.h
--- ns-3.25/src/internet/model/udp-socket-factory-impl.h	2016-10-03 20:57:08.385246561 -0700
+++ ns-3.26/src/internet/model/udp-socket-factory-impl.h	2016-10-03 19:49:01.695387295 -0700
@@ -28,23 +28,9 @@
 class UdpL4Protocol;
 
 /**
- * \ingroup internet
- * \defgroup udp Udp
- *
- * This  is  an  implementation of the User Datagram Protocol described in
- * \RFC{768}.  It implements a connectionless,  unreliable  datagram  packet
- * service.   Packets  may  be reordered or duplicated before they arrive.
- * UDP generates and checks checksums to catch transmission errors.
- *
- * The following options are not presently part of this implementation:
- * UDP_CORK, MSG_DONTROUTE, path MTU discovery control (e.g. 
- * IP_MTU_DISCOVER).  MTU handling is also weak in ns-3 for the moment;
- * it is best to send datagrams that do not exceed 1500 byte MTU (e.g.
- * 1472 byte UDP datagrams)
- */
-
-/**
+ * \ingroup socket
  * \ingroup udp
+ *
  * \brief Object to create UDP socket instances 
  *
  * This class implements the API for creating UDP sockets.
diff -Naur ns-3.25/src/internet/model/udp-socket.h ns-3.26/src/internet/model/udp-socket.h
--- ns-3.25/src/internet/model/udp-socket.h	2016-10-03 20:57:08.388246537 -0700
+++ ns-3.26/src/internet/model/udp-socket.h	2016-10-03 19:49:01.698387273 -0700
@@ -36,6 +36,7 @@
 
 /**
  * \ingroup socket
+ * \ingroup udp
  *
  * \brief (abstract) base class of all UdpSockets
  *
diff -Naur ns-3.25/src/internet/model/udp-socket-impl.cc ns-3.26/src/internet/model/udp-socket-impl.cc
--- ns-3.25/src/internet/model/udp-socket-impl.cc	2016-10-03 20:57:08.387246545 -0700
+++ ns-3.26/src/internet/model/udp-socket-impl.cc	2016-10-03 19:49:01.696387288 -0700
@@ -256,6 +256,7 @@
       InetSocketAddress transport = InetSocketAddress::ConvertFrom (address);
       Ipv4Address ipv4 = transport.GetIpv4 ();
       uint16_t port = transport.GetPort ();
+      SetIpTos (transport.GetTos ());
       if (ipv4 == Ipv4Address::GetAny () && port == 0)
         {
           m_endPoint = m_udp->Allocate ();
@@ -374,6 +375,7 @@
       InetSocketAddress transport = InetSocketAddress::ConvertFrom (address);
       m_defaultAddress = Address(transport.GetIpv4 ());
       m_defaultPort = transport.GetPort ();
+      SetIpTos (transport.GetTos ());
       m_connected = true;
       NotifyConnectionSucceeded ();
     }
@@ -387,6 +389,7 @@
     }
   else
     {
+      NotifyConnectionFailed ();
       return -1;
     }
 
@@ -418,7 +421,7 @@
 UdpSocketImpl::DoSend (Ptr<Packet> p)
 {
   NS_LOG_FUNCTION (this << p);
-  if ((m_endPoint == 0) && (InetSocketAddress::IsMatchingType(m_defaultAddress) == true))
+  if ((m_endPoint == 0) && (Ipv4Address::IsMatchingType(m_defaultAddress) == true))
     {
       if (Bind () == -1)
         {
@@ -427,7 +430,7 @@
         }
       NS_ASSERT (m_endPoint != 0);
     }
-  else if ((m_endPoint6 == 0) && (Inet6SocketAddress::IsMatchingType(m_defaultAddress) == true))
+  else if ((m_endPoint6 == 0) && (Ipv6Address::IsMatchingType(m_defaultAddress) == true))
     {
       if (Bind6 () == -1)
         {
@@ -442,57 +445,23 @@
       return -1;
     } 
 
-  return DoSendTo (p, (const Address)m_defaultAddress);
-}
-
-int
-UdpSocketImpl::DoSendTo (Ptr<Packet> p, const Address &address)
-{
-  NS_LOG_FUNCTION (this << p << address);
-
-  if (!m_connected)
+  if (Ipv4Address::IsMatchingType (m_defaultAddress))
     {
-      NS_LOG_LOGIC ("Not connected");
-      if (InetSocketAddress::IsMatchingType(address) == true)
-        {
-          InetSocketAddress transport = InetSocketAddress::ConvertFrom (address);
-          Ipv4Address ipv4 = transport.GetIpv4 ();
-          uint16_t port = transport.GetPort ();
-          return DoSendTo (p, ipv4, port);
-        }
-      else if (Inet6SocketAddress::IsMatchingType(address) == true)
-        {
-          Inet6SocketAddress transport = Inet6SocketAddress::ConvertFrom (address);
-          Ipv6Address ipv6 = transport.GetIpv6 ();
-          uint16_t port = transport.GetPort ();
-          return DoSendTo (p, ipv6, port);
-        }
-      else
-        {
-          return -1;
-        }
+      return DoSendTo (p, Ipv4Address::ConvertFrom (m_defaultAddress), m_defaultPort, GetIpTos ());
     }
-  else
+  else if (Ipv6Address::IsMatchingType (m_defaultAddress))
     {
-      // connected UDP socket must use default addresses
-      NS_LOG_LOGIC ("Connected");
-      if (Ipv4Address::IsMatchingType(m_defaultAddress))
-        {
-          return DoSendTo (p, Ipv4Address::ConvertFrom(m_defaultAddress), m_defaultPort);
-        }
-      else if (Ipv6Address::IsMatchingType(m_defaultAddress))
-        {
-          return DoSendTo (p, Ipv6Address::ConvertFrom(m_defaultAddress), m_defaultPort);
-        }
+      return DoSendTo (p, Ipv6Address::ConvertFrom (m_defaultAddress), m_defaultPort);
     }
+
   m_errno = ERROR_AFNOSUPPORT;
   return(-1);
 }
 
 int
-UdpSocketImpl::DoSendTo (Ptr<Packet> p, Ipv4Address dest, uint16_t port)
+UdpSocketImpl::DoSendTo (Ptr<Packet> p, Ipv4Address dest, uint16_t port, uint8_t tos)
 {
-  NS_LOG_FUNCTION (this << p << dest << port);
+  NS_LOG_FUNCTION (this << p << dest << port << (uint16_t) tos);
   if (m_boundnetdevice)
     {
       NS_LOG_LOGIC ("Bound interface number " << m_boundnetdevice->GetIfIndex ());
@@ -518,11 +487,21 @@
       return -1;
     }
 
-  if (IsManualIpTos ())
+  uint8_t priority = GetPriority ();
+  if (tos)
     {
       SocketIpTosTag ipTosTag;
-      ipTosTag.SetTos (GetIpTos ());
-      p->AddPacketTag (ipTosTag);
+      ipTosTag.SetTos (tos);
+      // This packet may already have a SocketIpTosTag (see BUG 2440)
+      p->ReplacePacketTag (ipTosTag);
+      priority = IpTos2Priority (tos);
+    }
+
+  if (priority)
+    {
+      SocketPriorityTag priorityTag;
+      priorityTag.SetPriority (priority);
+      p->ReplacePacketTag (priorityTag);
     }
 
   Ptr<Ipv4> ipv4 = m_node->GetObject<Ipv4> ();
@@ -686,7 +665,7 @@
 
   if (dest.IsIpv4MappedAddress ())
     {
-        return (DoSendTo(p, dest.GetIpv4MappedAddress (), port));
+        return (DoSendTo(p, dest.GetIpv4MappedAddress (), port, 0));
     }
   if (m_boundnetdevice)
     {
@@ -713,13 +692,21 @@
       return -1;
     }
 
-    if (IsManualIpv6Tclass ())
+  if (IsManualIpv6Tclass ())
     {
       SocketIpv6TclassTag ipTclassTag;
       ipTclassTag.SetTclass (GetIpv6Tclass ());
       p->AddPacketTag (ipTclassTag);
     }
 
+  uint8_t priority = GetPriority ();
+  if (priority)
+    {
+      SocketPriorityTag priorityTag;
+      priorityTag.SetPriority (priority);
+      p->ReplacePacketTag (priorityTag);
+    }
+
   Ptr<Ipv6> ipv6 = m_node->GetObject<Ipv6> ();
 
   // Locally override the IP TTL for this socket
@@ -812,27 +799,14 @@
   NS_LOG_FUNCTION (this << p << flags << address);
   if (InetSocketAddress::IsMatchingType (address))
     {
-      if (IsManualIpTos ())
-        {
-          SocketIpTosTag ipTosTag;
-          ipTosTag.SetTos (GetIpTos ());
-          p->AddPacketTag (ipTosTag);
-        }
-
       InetSocketAddress transport = InetSocketAddress::ConvertFrom (address);
       Ipv4Address ipv4 = transport.GetIpv4 ();
       uint16_t port = transport.GetPort ();
-      return DoSendTo (p, ipv4, port);
+      uint8_t tos = transport.GetTos ();
+      return DoSendTo (p, ipv4, port, tos);
     }
   else if (Inet6SocketAddress::IsMatchingType (address))
     {
-      if (IsManualIpv6Tclass ())
-        {
-          SocketIpv6TclassTag ipTclassTag;
-          ipTclassTag.SetTclass (GetIpv6Tclass ());
-          p->AddPacketTag (ipTclassTag);
-        }
-
       Inet6SocketAddress transport = Inet6SocketAddress::ConvertFrom (address);
       Ipv6Address ipv6 = transport.GetIpv6 ();
       uint16_t port = transport.GetPort ();
@@ -854,41 +828,38 @@
 UdpSocketImpl::Recv (uint32_t maxSize, uint32_t flags)
 {
   NS_LOG_FUNCTION (this << maxSize << flags);
+
+  Address fromAddress;
+  Ptr<Packet> packet = RecvFrom (maxSize, flags, fromAddress);
+  return packet;
+}
+
+Ptr<Packet>
+UdpSocketImpl::RecvFrom (uint32_t maxSize, uint32_t flags, 
+                         Address &fromAddress)
+{
+  NS_LOG_FUNCTION (this << maxSize << flags);
+
   if (m_deliveryQueue.empty () )
     {
       m_errno = ERROR_AGAIN;
       return 0;
     }
-  Ptr<Packet> p = m_deliveryQueue.front ();
-  if (p->GetSize () <= maxSize) 
+  Ptr<Packet> p = m_deliveryQueue.front ().first;
+  fromAddress = m_deliveryQueue.front ().second;
+
+  if (p->GetSize () <= maxSize)
     {
       m_deliveryQueue.pop ();
       m_rxAvailable -= p->GetSize ();
     }
   else
     {
-      p = 0; 
+      p = 0;
     }
   return p;
 }
 
-Ptr<Packet>
-UdpSocketImpl::RecvFrom (uint32_t maxSize, uint32_t flags, 
-                         Address &fromAddress)
-{
-  NS_LOG_FUNCTION (this << maxSize << flags);
-  Ptr<Packet> packet = Recv (maxSize, flags);
-  if (packet != 0)
-    {
-      SocketAddressTag tag;
-      bool found;
-      found = packet->PeekPacketTag (tag);
-      NS_ASSERT (found);
-      fromAddress = tag.GetAddress ();
-    }
-  return packet;
-}
-
 int
 UdpSocketImpl::GetSockName (Address &address) const
 {
@@ -924,7 +895,9 @@
   if (Ipv4Address::IsMatchingType (m_defaultAddress))
     {
       Ipv4Address addr = Ipv4Address::ConvertFrom (m_defaultAddress);
-      address = InetSocketAddress (addr, m_defaultPort);
+      InetSocketAddress inet (addr, m_defaultPort);
+      inet.SetTos (GetIpTos ());
+      address = inet;
     }
   else if (Ipv6Address::IsMatchingType (m_defaultAddress))
     {
@@ -1044,13 +1017,14 @@
       packet->AddPacketTag (ipTtlTag);
     }
 
+  // in case the packet still has a priority tag attached, remove it
+  SocketPriorityTag priorityTag;
+  packet->RemovePacketTag (priorityTag);
+
   if ((m_rxAvailable + packet->GetSize ()) <= m_rcvBufSize)
     {
       Address address = InetSocketAddress (header.GetSource (), port);
-      SocketAddressTag tag;
-      tag.SetAddress (address);
-      packet->AddPacketTag (tag);
-      m_deliveryQueue.push (packet);
+      m_deliveryQueue.push (std::make_pair (packet, address));
       m_rxAvailable += packet->GetSize ();
       NotifyDataRecv ();
     }
@@ -1076,7 +1050,7 @@
       return;
     }
 
-  // Should check via getsockopt ()..
+  // Should check via getsockopt ().
   if (IsRecvPktInfo ())
     {
       Ipv6PacketInfoTag tag;
@@ -1085,7 +1059,7 @@
       packet->AddPacketTag (tag);
     }
 
-  //Check only version 6 options
+  // Check only version 6 options
   if (IsIpv6RecvTclass ())
     {
       SocketIpv6TclassTag ipTclassTag;
@@ -1100,13 +1074,14 @@
       packet->AddPacketTag (ipHopLimitTag);
     }
 
+  // in case the packet still has a priority tag attached, remove it
+  SocketPriorityTag priorityTag;
+  packet->RemovePacketTag (priorityTag);
+
   if ((m_rxAvailable + packet->GetSize ()) <= m_rcvBufSize)
     {
       Address address = Inet6SocketAddress (header.GetSourceAddress (), port);
-      SocketAddressTag tag;
-      tag.SetAddress (address);
-      packet->AddPacketTag (tag);
-      m_deliveryQueue.push (packet);
+      m_deliveryQueue.push (std::make_pair (packet, address));
       m_rxAvailable += packet->GetSize ();
       NotifyDataRecv ();
     }
diff -Naur ns-3.25/src/internet/model/udp-socket-impl.h ns-3.26/src/internet/model/udp-socket-impl.h
--- ns-3.25/src/internet/model/udp-socket-impl.h	2016-10-03 20:57:08.387246545 -0700
+++ ns-3.26/src/internet/model/udp-socket-impl.h	2016-10-03 19:49:01.697387280 -0700
@@ -42,11 +42,28 @@
 class Ipv6Interface;
 
 /**
+ * \ingroup socket
  * \ingroup udp
+ *
  * \brief A sockets interface to UDP
  * 
  * This class subclasses ns3::UdpSocket, and provides a socket interface
  * to ns3's implementation of UDP.
+ *
+ * For IPv4 packets, the TOS is set according to the following rules:
+ * - if the socket is connected, the TOS set for the socket is used
+ * - if the socket is not connected, the TOS specified in the destination address
+ *   passed to SendTo is used, while the TOS set for the socket is ignored
+ * In both cases, a SocketIpTos tag is only added to the packet if the resulting
+ * TOS is non-null. The Bind and Connect operations set the TOS for the
+ * socket to the value specified in the provided address.
+ * If the TOS determined for a packet (as described above) is not null, the
+ * packet is assigned a priority based on that TOS value (according to the
+ * Socket::IpTos2Priority function). Otherwise, the priority set for the
+ * socket is assigned to the packet. Setting a TOS for a socket also sets a
+ * priority for the socket (according to the Socket::IpTos2Priority function).
+ * A SocketPriority tag is only added to the packet if the resulting priority
+ * is non-null.
  */
 
 class UdpSocketImpl : public UdpSocket
@@ -172,20 +189,14 @@
    */
   int DoSend (Ptr<Packet> p);
   /**
-   * \brief Send a packet to a specific destination
-   * \param p packet
-   * \param daddr destination address
-   * \returns 0 on success, -1 on failure
-   */
-  int DoSendTo (Ptr<Packet> p, const Address &daddr);
-  /**
    * \brief Send a packet to a specific destination and port (IPv4)
    * \param p packet
    * \param daddr destination address
    * \param dport destination port
+   * \param tos ToS
    * \returns 0 on success, -1 on failure
    */
-  int DoSendTo (Ptr<Packet> p, Ipv4Address daddr, uint16_t dport);
+  int DoSendTo (Ptr<Packet> p, Ipv4Address daddr, uint16_t dport, uint8_t tos);
   /**
    * \brief Send a packet to a specific destination and port (IPv6)
    * \param p packet
@@ -235,7 +246,7 @@
   bool                     m_connected;       //!< Connection established
   bool                     m_allowBroadcast;  //!< Allow send broadcast packets
 
-  std::queue<Ptr<Packet> > m_deliveryQueue; //!< Queue for incoming packets
+  std::queue<std::pair<Ptr<Packet>, Address> > m_deliveryQueue; //!< Queue for incoming packets
   uint32_t m_rxAvailable;                   //!< Number of available bytes to be received
 
   // Socket attributes
diff -Naur ns-3.25/src/internet/test/ipv4-global-routing-test-suite.cc ns-3.26/src/internet/test/ipv4-global-routing-test-suite.cc
--- ns-3.25/src/internet/test/ipv4-global-routing-test-suite.cc	2016-10-03 20:57:08.392246506 -0700
+++ ns-3.26/src/internet/test/ipv4-global-routing-test-suite.cc	2016-10-03 19:49:01.702387243 -0700
@@ -23,6 +23,7 @@
 #include "ns3/ipv4-global-routing-helper.h"
 #include "ns3/ipv4-static-routing-helper.h"
 #include "ns3/node.h"
+#include "ns3/log.h"
 #include "ns3/node-container.h"
 #include "ns3/packet.h"
 #include "ns3/simple-net-device-helper.h"
@@ -36,9 +37,756 @@
 #include "ns3/simple-channel.h"
 #include "ns3/socket-factory.h"
 #include "ns3/udp-socket-factory.h"
+#include "ns3/ipv4-l3-protocol.h"
+#include "ns3/ipv4-routing-protocol.h"
+#include "ns3/ipv4-routing-table-entry.h"
+#include "ns3/ipv4-global-routing.h"
+#include "ns3/bridge-helper.h"
 
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4GlobalRoutingTestSuite");
+
+// This test suite tests the operation of global routing on a few sample
+// networks to ensure that routes are built correctly
+//
+//  Link test:
+//      n0 <--------> n1  (point-to-point link)
+//  10.1.1.1        10.1.1.2
+//      Expected routes:
+//         n0:  route to 0.0.0.0 gw 10.1.1.2
+//         n1:  route to 0.0.0.0 gw 10.1.1.1
+//      Note:  These default routes to 0.0.0.0 are generated by the extension
+//             in the global route manager to install default routes via the
+//             peer node on a point-to-point link, when the node is on a 
+//             stub link
+//
+//  LAN test:
+//      n0 <--------> n1  (broadcast link on subnet 10.1.1.0/24)
+//      Expected routes:
+//         n0:  route to 10.1.1.0 gw 0.0.0.0
+//         n1:  route to 10.1.1.0 gw 0.0.0.0
+//  Two link test:
+//      n0 <--------> n1 <--------> n2  (point-to-point links)
+//  10.1.1.1       10.1.1.2/     10.1.2.2
+//                 10.1.2.1        
+//      Expected routes:
+//         n0:  route to 0.0.0.0 gw 10.1.1.2
+//         n1:  route to 10.1.1.1 gw 10.1.1.1
+//              route to 10.1.2.2 gw 10.1.2.2
+//              route to 10.1.1.0 gw 10.1.1.1
+//              route to 10.1.2.0 gw 10.1.2.2
+//         n2:  route to 0.0.0.0 gw 10.1.2.1
+//      Note:  These default routes to 0.0.0.0 are generated by the extension
+//             in the global route manager to install default routes via the
+//             peer node on a point-to-point link, when the node is on a
+//             stub link
+//  Two LANs test:
+//      n0 <--------> n1 <--------> n2  (broadcast links)
+//      Expected routes:
+//         n0:  route to 10.1.1.0 gw 0.0.0.0
+//              route to 0.0.0.0 gw 10.1.1.2
+//         n1:  route to 10.1.1.1 gw 10.1.1.1
+//              route to 10.1.2.2 gw 10.1.2.2
+//              route to 10.1.1.0 gw 10.1.1.1
+//              route to 10.1.2.0 gw 10.1.2.2
+//         n2:  route to 0.0.0.0 gw 10.1.2.1
+//  Bridge test:
+//      n0 <--------> n1 <---> Bridge-n2 <---> n3 <-------> n4 (broadcast links)
+//         10.1.1.0/24        10.1.2.0/24        10.1.3.0/24
+//      Expected routes:
+//         n0:  route to 10.1.1.0 gw 0.0.0.0
+//              route to 10.1.2.0 gw 10.1.1.2
+//              route to 10.1.3.0 gw 10.1.1.2
+//         n1:  route to 10.1.1.0 gw 0.0.0.0
+//              route to 10.1.2.0 gw 0.0.0.0
+//              route to 10.1.3.0 gw 10.1.2.2
+//         n3:  route to 10.1.1.0 gw 10.1.2.1
+//              route to 10.1.2.0 gw 0.0.0.0
+//              route to 10.1.3.0 gw 0.0.0.0
+//         n4:  route to 10.1.3.0 gw 0.0.0.0
+//              route to 10.1.2.0 gw 10.1.3.1
+//              route to 10.1.1.0 gw 10.1.3.1
+//  Two Bridge test:
+//      n0 <------> n1 <---> Bridge-n2 <---> Bridge-n3 <---> n4 (broadcast links)
+//         10.1.1.0/24        10.1.2.0/24        
+//      Expected routes:
+//         n0:  route to 10.1.1.0 gw 0.0.0.0
+//              route to 10.1.2.0 gw 10.1.1.2
+//         n4:  route to 10.1.2.0 gw 0.0.0.0
+//              route to 10.1.1.0 gw 10.1.2.1
+
+
+class LinkTest : public TestCase
+{
+public:
+  virtual void DoSetup (void);
+  virtual void DoRun (void);
+  LinkTest ();
+private:
+  NodeContainer m_nodes;
+};
+
+LinkTest::LinkTest ()
+  : TestCase ("Global routing on point-to-point link")
+{
+}
+
+void
+LinkTest::DoSetup ()
+{
+  m_nodes.Create (2);
+
+  Ptr<SimpleChannel> channel = CreateObject <SimpleChannel> ();
+  SimpleNetDeviceHelper simpleHelper;
+  simpleHelper.SetNetDevicePointToPointMode (true);
+  NetDeviceContainer net = simpleHelper.Install (m_nodes, channel);
+
+  InternetStackHelper internet;
+  // By default, InternetStackHelper adds a static and global routing
+  // implementation.  We just want the global for this test.
+  Ipv4GlobalRoutingHelper ipv4RoutingHelper;
+  internet.SetRoutingHelper (ipv4RoutingHelper);
+  internet.Install (m_nodes);
+
+  Ipv4AddressHelper ipv4;
+  ipv4.SetBase ("10.1.1.0", "255.255.255.252");
+  Ipv4InterfaceContainer i = ipv4.Assign (net);
+}
+
+void
+LinkTest::DoRun ()
+{
+  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+  Ptr<Ipv4L3Protocol> ip0 = m_nodes.Get (0)->GetObject<Ipv4L3Protocol> ();
+  NS_TEST_ASSERT_MSG_NE (ip0, 0, "Error-- no Ipv4 object");  
+  Ptr<Ipv4L3Protocol> ip1 = m_nodes.Get (1)->GetObject<Ipv4L3Protocol> ();
+  NS_TEST_ASSERT_MSG_NE (ip1, 0, "Error-- no Ipv4 object");  
+  Ptr<Ipv4RoutingProtocol> routing0 = ip0->GetRoutingProtocol ();
+  Ptr<Ipv4GlobalRouting> globalRouting0 = routing0->GetObject <Ipv4GlobalRouting> ();
+  NS_TEST_ASSERT_MSG_NE (globalRouting0, 0, "Error-- no Ipv4GlobalRouting object");  
+  Ptr<Ipv4RoutingProtocol> routing1 = ip1->GetRoutingProtocol ();
+  Ptr<Ipv4GlobalRouting> globalRouting1 = routing1->GetObject <Ipv4GlobalRouting> ();
+  NS_TEST_ASSERT_MSG_NE (globalRouting1, 0, "Error-- no Ipv4GlobalRouting object");  
+
+  // Test that the right number of routes found
+  uint32_t nRoutes0 = globalRouting0->GetNRoutes ();
+  NS_LOG_DEBUG ("LinkTest nRoutes0 " << nRoutes0);
+  NS_TEST_ASSERT_MSG_EQ (nRoutes0, 1, "Error-- not one route");
+  Ipv4RoutingTableEntry* route = globalRouting0->GetRoute (0);
+  NS_LOG_DEBUG ("entry dest " << route->GetDest () << " gw " << route->GetGateway ());
+  NS_TEST_ASSERT_MSG_EQ (route->GetDest (), Ipv4Address ("0.0.0.0"), "Error-- wrong destination");
+  NS_TEST_ASSERT_MSG_EQ (route->GetGateway (), Ipv4Address ("10.1.1.2"), "Error-- wrong gateway");
+
+  // Test that the right number of routes found
+  uint32_t nRoutes1 = globalRouting1->GetNRoutes ();
+  NS_TEST_ASSERT_MSG_EQ (nRoutes1, 1, "Error-- not one route");
+  NS_LOG_DEBUG ("LinkTest nRoutes1 " << nRoutes1);
+  route = globalRouting1->GetRoute (0);
+  NS_LOG_DEBUG ("entry dest " << route->GetDest () << " gw " << route->GetGateway ());
+  NS_TEST_ASSERT_MSG_EQ (route->GetDest (), Ipv4Address ("0.0.0.0"), "Error-- wrong destination");
+  NS_TEST_ASSERT_MSG_EQ (route->GetGateway (), Ipv4Address ("10.1.1.1"), "Error-- wrong gateway");
+
+  bool result = true;
+
+  NS_TEST_ASSERT_MSG_EQ (result, true, "Message");
+  Simulator::Run ();
+  Simulator::Destroy ();
+}
+
+class LanTest : public TestCase
+{
+public:
+  virtual void DoSetup (void);
+  virtual void DoRun (void);
+  LanTest ();
+private:
+  NodeContainer m_nodes;
+};
+
+LanTest::LanTest ()
+  : TestCase ("Global routing on broadcast link")
+{
+}
+
+void
+LanTest::DoSetup ()
+{
+  m_nodes.Create (2);
+
+  Ptr<SimpleChannel> channel = CreateObject <SimpleChannel> ();
+  SimpleNetDeviceHelper simpleHelper;
+  NetDeviceContainer net = simpleHelper.Install (m_nodes, channel);
+
+  InternetStackHelper internet;
+  // By default, InternetStackHelper adds a static and global routing
+  // implementation.  We just want the global for this test.
+  Ipv4GlobalRoutingHelper ipv4RoutingHelper;
+  internet.SetRoutingHelper (ipv4RoutingHelper);
+  internet.Install (m_nodes);
+
+  Ipv4AddressHelper ipv4;
+  ipv4.SetBase ("10.1.1.0", "255.255.255.0");
+  Ipv4InterfaceContainer i = ipv4.Assign (net);
+}
+
+void
+LanTest::DoRun ()
+{
+  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+  Ptr<Ipv4L3Protocol> ip0 = m_nodes.Get (0)->GetObject<Ipv4L3Protocol> ();
+  NS_TEST_ASSERT_MSG_NE (ip0, 0, "Error-- no Ipv4 object");  
+  Ptr<Ipv4L3Protocol> ip1 = m_nodes.Get (1)->GetObject<Ipv4L3Protocol> ();
+  NS_TEST_ASSERT_MSG_NE (ip1, 0, "Error-- no Ipv4 object");  
+  Ptr<Ipv4RoutingProtocol> routing0 = ip0->GetRoutingProtocol ();
+  Ptr<Ipv4GlobalRouting> globalRouting0 = routing0->GetObject <Ipv4GlobalRouting> ();
+  NS_TEST_ASSERT_MSG_NE (globalRouting0, 0, "Error-- no Ipv4GlobalRouting object");  
+  Ptr<Ipv4RoutingProtocol> routing1 = ip1->GetRoutingProtocol ();
+  Ptr<Ipv4GlobalRouting> globalRouting1 = routing1->GetObject <Ipv4GlobalRouting> ();
+  NS_TEST_ASSERT_MSG_NE (globalRouting1, 0, "Error-- no Ipv4GlobalRouting object");  
+
+  // Test that the right number of routes found
+  uint32_t nRoutes0 = globalRouting0->GetNRoutes ();
+  NS_LOG_DEBUG ("LanTest nRoutes0 " << nRoutes0);
+  NS_TEST_ASSERT_MSG_EQ (nRoutes0, 1, "Error-- more than one entry");
+  for (uint32_t i = 0; i < globalRouting0->GetNRoutes (); i++)
+    {
+      Ipv4RoutingTableEntry* route = globalRouting0->GetRoute (i);
+      NS_LOG_DEBUG ("entry dest " << route->GetDest () << " gw " << route->GetGateway ());
+    }
+
+  // Test that the right number of routes found
+  uint32_t nRoutes1 = globalRouting1->GetNRoutes ();
+  NS_LOG_DEBUG ("LanTest nRoutes1 " << nRoutes1);
+  NS_TEST_ASSERT_MSG_EQ (nRoutes1, 1, "Error-- more than one entry");
+  for (uint32_t i = 0; i < globalRouting0->GetNRoutes (); i++)
+    {
+      Ipv4RoutingTableEntry* route = globalRouting1->GetRoute (i);
+      NS_LOG_DEBUG ("entry dest " << route->GetDest () << " gw " << route->GetGateway ());
+    }
+
+  Simulator::Destroy ();
+}
+
+class TwoLinkTest : public TestCase
+{
+public:
+  virtual void DoSetup (void);
+  virtual void DoRun (void);
+  TwoLinkTest ();
+private:
+  NodeContainer m_nodes;
+};
+
+TwoLinkTest::TwoLinkTest ()
+  : TestCase ("Global routing across two hops (point-to-point links)")
+{
+}
+
+void
+TwoLinkTest::DoSetup ()
+{
+  m_nodes.Create (3);
+
+  Ptr<SimpleChannel> channel = CreateObject <SimpleChannel> ();
+  SimpleNetDeviceHelper simpleHelper;
+  simpleHelper.SetNetDevicePointToPointMode (true);
+  NetDeviceContainer net = simpleHelper.Install (m_nodes.Get (0), channel);
+  net.Add (simpleHelper.Install (m_nodes.Get (1), channel));
+
+  Ptr<SimpleChannel> channel2 = CreateObject <SimpleChannel> ();
+  SimpleNetDeviceHelper simpleHelper2;
+  simpleHelper2.SetNetDevicePointToPointMode (true);
+  NetDeviceContainer net2 = simpleHelper.Install (m_nodes.Get (1), channel2);
+  net2.Add (simpleHelper2.Install (m_nodes.Get (2), channel2));
+
+  InternetStackHelper internet;
+  // By default, InternetStackHelper adds a static and global routing
+  // implementation.  We just want the global for this test.
+  Ipv4GlobalRoutingHelper ipv4RoutingHelper;
+  internet.SetRoutingHelper (ipv4RoutingHelper);
+  internet.Install (m_nodes);
+
+  Ipv4AddressHelper ipv4;
+  ipv4.SetBase ("10.1.1.0", "255.255.255.252");
+  Ipv4InterfaceContainer i = ipv4.Assign (net);
+  ipv4.SetBase ("10.1.2.0", "255.255.255.252");
+  Ipv4InterfaceContainer i2 = ipv4.Assign (net2);
+}
+
+void
+TwoLinkTest::DoRun ()
+{
+  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+  Ptr<Ipv4L3Protocol> ip0 = m_nodes.Get (0)->GetObject<Ipv4L3Protocol> ();
+  NS_TEST_ASSERT_MSG_NE (ip0, 0, "Error-- no Ipv4 object");  
+  Ptr<Ipv4L3Protocol> ip1 = m_nodes.Get (1)->GetObject<Ipv4L3Protocol> ();
+  NS_TEST_ASSERT_MSG_NE (ip1, 0, "Error-- no Ipv4 object");  
+  Ptr<Ipv4L3Protocol> ip2 = m_nodes.Get (2)->GetObject<Ipv4L3Protocol> ();
+  NS_TEST_ASSERT_MSG_NE (ip2, 0, "Error-- no Ipv4 object");  
+  Ptr<Ipv4RoutingProtocol> routing0 = ip0->GetRoutingProtocol ();
+  Ptr<Ipv4GlobalRouting> globalRouting0 = routing0->GetObject <Ipv4GlobalRouting> ();
+  NS_TEST_ASSERT_MSG_NE (globalRouting0, 0, "Error-- no Ipv4GlobalRouting object");  
+  Ptr<Ipv4RoutingProtocol> routing1 = ip1->GetRoutingProtocol ();
+  Ptr<Ipv4GlobalRouting> globalRouting1 = routing1->GetObject <Ipv4GlobalRouting> ();
+  NS_TEST_ASSERT_MSG_NE (globalRouting1, 0, "Error-- no Ipv4GlobalRouting object");  
+  Ptr<Ipv4RoutingProtocol> routing2 = ip2->GetRoutingProtocol ();
+  Ptr<Ipv4GlobalRouting> globalRouting2 = routing2->GetObject <Ipv4GlobalRouting> ();
+  NS_TEST_ASSERT_MSG_NE (globalRouting2, 0, "Error-- no Ipv4GlobalRouting object");  
+
+  // node n0
+  // Test that the right number of routes found
+  uint32_t nRoutes0 = globalRouting0->GetNRoutes ();
+  NS_LOG_DEBUG ("TwoLinkTest nRoutes0 " << nRoutes0);
+  NS_TEST_ASSERT_MSG_EQ (nRoutes0, 1, "Error-- wrong number of links");
+
+  Ipv4RoutingTableEntry* route = globalRouting0->GetRoute (0);
+  NS_LOG_DEBUG ("entry dest " << route->GetDest () << " gw " << route->GetGateway ());
+  NS_TEST_ASSERT_MSG_EQ (route->GetDest (), Ipv4Address ("0.0.0.0"), "Error-- wrong destination");
+  NS_TEST_ASSERT_MSG_EQ (route->GetGateway (), Ipv4Address ("10.1.1.2"), "Error-- wrong gateway");
+
+  // node n1
+  // Test that the right number of routes found
+  uint32_t nRoutes1 = globalRouting1->GetNRoutes ();
+  NS_LOG_DEBUG ("TwoLinkTest nRoutes1 " << nRoutes1);
+  route = globalRouting1->GetRoute (0);
+  NS_LOG_DEBUG ("TwoLinkTest entry dest " << route->GetDest () << " gw " << route->GetGateway ());
+  NS_TEST_ASSERT_MSG_EQ (route->GetDest (), Ipv4Address ("10.1.1.1"), "Error-- wrong destination");
+  NS_TEST_ASSERT_MSG_EQ (route->GetGateway (), Ipv4Address ("10.1.1.1"), "Error-- wrong gateway");
+  route = globalRouting1->GetRoute (1);
+  NS_LOG_DEBUG ("TwoLinkTest entry dest " << route->GetDest () << " gw " << route->GetGateway ());
+  NS_TEST_ASSERT_MSG_EQ (route->GetDest (), Ipv4Address ("10.1.2.2"), "Error-- wrong destination");
+  NS_TEST_ASSERT_MSG_EQ (route->GetGateway (), Ipv4Address ("10.1.2.2"), "Error-- wrong gateway");
+  route = globalRouting1->GetRoute (2);
+  NS_LOG_DEBUG ("TwoLinkTest entry dest " << route->GetDest () << " gw " << route->GetGateway ());
+  NS_TEST_ASSERT_MSG_EQ (route->GetDest (), Ipv4Address ("10.1.1.0"), "Error-- wrong destination");
+  NS_TEST_ASSERT_MSG_EQ (route->GetGateway (), Ipv4Address ("10.1.1.1"), "Error-- wrong gateway");
+  route = globalRouting1->GetRoute (3);
+  NS_LOG_DEBUG ("TwoLinkTest entry dest " << route->GetDest () << " gw " << route->GetGateway ());
+  NS_TEST_ASSERT_MSG_EQ (route->GetDest (), Ipv4Address ("10.1.2.0"), "Error-- wrong destination");
+  NS_TEST_ASSERT_MSG_EQ (route->GetGateway (), Ipv4Address ("10.1.2.2"), "Error-- wrong gateway");
+
+  // node n2
+  // Test that the right number of routes found
+  uint32_t nRoutes2 = globalRouting2->GetNRoutes ();
+  NS_LOG_DEBUG ("TwoLinkTest nRoutes2 " << nRoutes2);
+  NS_TEST_ASSERT_MSG_EQ (nRoutes2, 1, "Error-- wrong number of links");
+
+  route = globalRouting2->GetRoute (0);
+  NS_LOG_DEBUG ("entry dest " << route->GetDest () << " gw " << route->GetGateway ());
+  NS_TEST_ASSERT_MSG_EQ (route->GetDest (), Ipv4Address ("0.0.0.0"), "Error-- wrong destination");
+  NS_TEST_ASSERT_MSG_EQ (route->GetGateway (), Ipv4Address ("10.1.2.1"), "Error-- wrong gateway");
+
+  Simulator::Destroy ();
+}
+
+class TwoLanTest : public TestCase
+{
+public:
+  virtual void DoSetup (void);
+  virtual void DoRun (void);
+  TwoLanTest ();
+private:
+  NodeContainer m_nodes;
+};
+
+TwoLanTest::TwoLanTest ()
+  : TestCase ("Global routing across two hops (broadcast links)")
+{
+}
+
+void
+TwoLanTest::DoSetup ()
+{
+  m_nodes.Create (3);
+
+  Ptr<SimpleChannel> channel = CreateObject <SimpleChannel> ();
+  SimpleNetDeviceHelper simpleHelper;
+  NetDeviceContainer net = simpleHelper.Install (m_nodes.Get (0), channel);
+  net.Add (simpleHelper.Install (m_nodes.Get (1), channel));
+
+  Ptr<SimpleChannel> channel2 = CreateObject <SimpleChannel> ();
+  SimpleNetDeviceHelper simpleHelper2;
+  NetDeviceContainer net2 = simpleHelper.Install (m_nodes.Get (1), channel2);
+  net2.Add (simpleHelper2.Install (m_nodes.Get (2), channel2));
+
+  InternetStackHelper internet;
+  // By default, InternetStackHelper adds a static and global routing
+  // implementation.  We just want the global for this test.
+  Ipv4GlobalRoutingHelper ipv4RoutingHelper;
+  internet.SetRoutingHelper (ipv4RoutingHelper);
+  internet.Install (m_nodes);
+
+  Ipv4AddressHelper ipv4;
+  ipv4.SetBase ("10.1.1.0", "255.255.255.0");
+  Ipv4InterfaceContainer i = ipv4.Assign (net);
+  ipv4.SetBase ("10.1.2.0", "255.255.255.0");
+  Ipv4InterfaceContainer i2 = ipv4.Assign (net2);
+}
+
+void
+TwoLanTest::DoRun ()
+{
+  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+  Ptr<Ipv4L3Protocol> ip0 = m_nodes.Get (0)->GetObject<Ipv4L3Protocol> ();
+  NS_TEST_ASSERT_MSG_NE (ip0, 0, "Error-- no Ipv4 object");  
+  Ptr<Ipv4L3Protocol> ip1 = m_nodes.Get (1)->GetObject<Ipv4L3Protocol> ();
+  NS_TEST_ASSERT_MSG_NE (ip1, 0, "Error-- no Ipv4 object");  
+  Ptr<Ipv4L3Protocol> ip2 = m_nodes.Get (2)->GetObject<Ipv4L3Protocol> ();
+  NS_TEST_ASSERT_MSG_NE (ip2, 0, "Error-- no Ipv4 object");  
+  Ptr<Ipv4RoutingProtocol> routing0 = ip0->GetRoutingProtocol ();
+  Ptr<Ipv4GlobalRouting> globalRouting0 = routing0->GetObject <Ipv4GlobalRouting> ();
+  NS_TEST_ASSERT_MSG_NE (globalRouting0, 0, "Error-- no Ipv4GlobalRouting object");  
+  Ptr<Ipv4RoutingProtocol> routing1 = ip1->GetRoutingProtocol ();
+  Ptr<Ipv4GlobalRouting> globalRouting1 = routing1->GetObject <Ipv4GlobalRouting> ();
+  NS_TEST_ASSERT_MSG_NE (globalRouting1, 0, "Error-- no Ipv4GlobalRouting object");  
+  Ptr<Ipv4RoutingProtocol> routing2 = ip2->GetRoutingProtocol ();
+  Ptr<Ipv4GlobalRouting> globalRouting2 = routing2->GetObject <Ipv4GlobalRouting> ();
+  NS_TEST_ASSERT_MSG_NE (globalRouting2, 0, "Error-- no Ipv4GlobalRouting object");  
+
+  // Test that the right number of routes found
+  uint32_t nRoutes0 = globalRouting0->GetNRoutes ();
+  NS_LOG_DEBUG ("TwoLanTest nRoutes0 " << nRoutes0);
+  NS_TEST_ASSERT_MSG_EQ (nRoutes0, 2, "Error-- not two entries");
+  Ipv4RoutingTableEntry* route = globalRouting0->GetRoute (0);
+  NS_LOG_DEBUG ("entry dest " << route->GetDest () << " gw " << route->GetGateway ());
+  NS_TEST_ASSERT_MSG_EQ (route->GetDest (), Ipv4Address ("10.1.1.0"), "Error-- wrong destination");
+  NS_TEST_ASSERT_MSG_EQ (route->GetGateway (), Ipv4Address ("0.0.0.0"), "Error-- wrong gateway");
+  route = globalRouting0->GetRoute (1);
+  NS_LOG_DEBUG ("entry dest " << route->GetDest () << " gw " << route->GetGateway ());
+  NS_TEST_ASSERT_MSG_EQ (route->GetDest (), Ipv4Address ("10.1.2.0"), "Error-- wrong destination");
+  NS_TEST_ASSERT_MSG_EQ (route->GetGateway (), Ipv4Address ("10.1.1.2"), "Error-- wrong gateway");
+
+  // Test that the right number of routes found
+  uint32_t nRoutes1 = globalRouting1->GetNRoutes ();
+  NS_LOG_DEBUG ("TwoLanTest nRoutes1 " << nRoutes1);
+  NS_TEST_ASSERT_MSG_EQ (nRoutes1, 2, "Error-- not two entries");
+  route = globalRouting1->GetRoute (0);
+  NS_LOG_DEBUG ("TwoLanTest entry dest " << route->GetDest () << " gw " << route->GetGateway ());
+  NS_TEST_ASSERT_MSG_EQ (route->GetDest (), Ipv4Address ("10.1.1.0"), "Error-- wrong destination");
+  NS_TEST_ASSERT_MSG_EQ (route->GetGateway (), Ipv4Address ("0.0.0.0"), "Error-- wrong gateway");
+  route = globalRouting1->GetRoute (1);
+  NS_LOG_DEBUG ("TwoLanTest entry dest " << route->GetDest () << " gw " << route->GetGateway ());
+  NS_TEST_ASSERT_MSG_EQ (route->GetDest (), Ipv4Address ("10.1.2.0"), "Error-- wrong destination");
+  NS_TEST_ASSERT_MSG_EQ (route->GetGateway (), Ipv4Address ("0.0.0.0"), "Error-- wrong gateway");
+
+  Simulator::Destroy ();
+}
+
+class BridgeTest : public TestCase
+{
+public:
+  virtual void DoSetup (void);
+  virtual void DoRun (void);
+  BridgeTest ();
+private:
+  NodeContainer m_nodes;
+};
+
+BridgeTest::BridgeTest ()
+  : TestCase ("Global routing across bridging topology (bug 2102)")
+{
+}
+
+void
+BridgeTest::DoSetup ()
+{
+  m_nodes.Create (5);
+
+  //connect node0 to node1
+  Ptr<SimpleChannel> channel = CreateObject <SimpleChannel> ();
+  SimpleNetDeviceHelper simpleHelper;
+  NetDeviceContainer net = simpleHelper.Install (m_nodes.Get (0), channel);
+  net.Add (simpleHelper.Install (m_nodes.Get (1), channel));
+
+  NetDeviceContainer bridgeFacingDevices;
+  NetDeviceContainer switchDevices;
+
+  //connect node1 to node2 (switch)
+  Ptr<SimpleChannel> channel2 = CreateObject <SimpleChannel> ();
+  SimpleNetDeviceHelper simpleHelper2;
+  NetDeviceContainer net2 = simpleHelper2.Install (m_nodes.Get (1), channel2);
+  net2.Add (simpleHelper2.Install (m_nodes.Get (2), channel2));
+  bridgeFacingDevices.Add (net2.Get (0));
+  switchDevices.Add (net2.Get (1));
+
+  //connect node2 (switch) to node3
+  Ptr<SimpleChannel> channel3 = CreateObject <SimpleChannel> ();
+  SimpleNetDeviceHelper simpleHelper3;
+  NetDeviceContainer net3 = simpleHelper3.Install (m_nodes.Get (2), channel3);
+  net3.Add (simpleHelper3.Install (m_nodes.Get (3), channel3));
+  bridgeFacingDevices.Add (net3.Get (1));
+  switchDevices.Add (net3.Get (0));
+
+  //connect node3 to node4
+  Ptr<SimpleChannel> channel4 = CreateObject <SimpleChannel> ();
+  SimpleNetDeviceHelper simpleHelper4;
+  NetDeviceContainer net4 = simpleHelper4.Install (m_nodes.Get (3), channel4);
+  net4.Add (simpleHelper4.Install (m_nodes.Get (4), channel4));
+
+  Ptr<Node> switchNode = m_nodes.Get (2);
+  BridgeHelper bridge;
+  bridge.Install (switchNode, switchDevices);
+
+  InternetStackHelper internet;
+  // By default, InternetStackHelper adds a static and global routing
+  // implementation.  We just want the global for this test.
+  Ipv4GlobalRoutingHelper ipv4RoutingHelper;
+  internet.SetRoutingHelper (ipv4RoutingHelper);
+
+  internet.Install (m_nodes.Get (0));
+  internet.Install (m_nodes.Get (1));
+  // m_nodes.Get (2) is bridge node
+  internet.Install (m_nodes.Get (3));
+  internet.Install (m_nodes.Get (4));
+
+  Ipv4AddressHelper address;
+  address.SetBase ("10.1.1.0", "255.255.255.0");
+  address.Assign (net);
+
+  address.SetBase ("10.1.2.0", "255.255.255.0");
+  address.Assign (bridgeFacingDevices);
+
+  address.SetBase ("10.1.3.0", "255.255.255.0");
+  address.Assign (net4);
+
+}
+
+void
+BridgeTest::DoRun ()
+{
+  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+  Ptr<Ipv4L3Protocol> ip0 = m_nodes.Get (0)->GetObject<Ipv4L3Protocol> ();
+  NS_TEST_ASSERT_MSG_NE (ip0, 0, "Error-- no Ipv4 object");  
+  Ptr<Ipv4RoutingProtocol> routing0 = ip0->GetRoutingProtocol ();
+  NS_TEST_ASSERT_MSG_NE (routing0, 0, "Error-- no Ipv4 routing protocol object");  
+  Ptr<Ipv4GlobalRouting> globalRouting0 = routing0->GetObject <Ipv4GlobalRouting> ();
+  NS_TEST_ASSERT_MSG_NE (globalRouting0, 0, "Error-- no Ipv4GlobalRouting object");  
+
+  Ptr<Ipv4L3Protocol> ip1 = m_nodes.Get (1)->GetObject<Ipv4L3Protocol> ();
+  NS_TEST_ASSERT_MSG_NE (ip1, 0, "Error-- no Ipv4 object");  
+  Ptr<Ipv4RoutingProtocol> routing1 = ip1->GetRoutingProtocol ();
+  NS_TEST_ASSERT_MSG_NE (routing1, 0, "Error-- no Ipv4 routing protocol object");  
+  Ptr<Ipv4GlobalRouting> globalRouting1 = routing1->GetObject <Ipv4GlobalRouting> ();
+  NS_TEST_ASSERT_MSG_NE (globalRouting1, 0, "Error-- no Ipv4GlobalRouting object");  
+
+  // Skip to n4
+  Ptr<Ipv4L3Protocol> ip4 = m_nodes.Get (4)->GetObject<Ipv4L3Protocol> ();
+  NS_TEST_ASSERT_MSG_NE (ip4, 0, "Error-- no Ipv4 object");  
+  Ptr<Ipv4RoutingProtocol> routing4 = ip4->GetRoutingProtocol ();
+  NS_TEST_ASSERT_MSG_NE (routing4, 0, "Error-- no Ipv4 routing protocol object");  
+  Ptr<Ipv4GlobalRouting> globalRouting4 = routing4->GetObject <Ipv4GlobalRouting> ();
+  NS_TEST_ASSERT_MSG_NE (globalRouting4, 0, "Error-- no Ipv4GlobalRouting object");  
+
+  Ipv4RoutingTableEntry* route = 0;
+  // n0
+  // Test that the right number of routes found
+  uint32_t nRoutes0 = globalRouting0->GetNRoutes ();
+  NS_LOG_DEBUG ("BridgeTest nRoutes0 " << nRoutes0);
+  NS_TEST_ASSERT_MSG_EQ (nRoutes0, 3, "Error-- not three entries");
+  for (uint32_t i = 0; i < globalRouting0->GetNRoutes (); i++)
+    {
+      route = globalRouting0->GetRoute (i);
+      NS_LOG_DEBUG ("entry dest " << route->GetDest () << " gw " << route->GetGateway ());
+    }
+  // Spot check the last route
+  if (route)
+    {
+      NS_TEST_ASSERT_MSG_EQ (route->GetDest (), Ipv4Address ("10.1.3.0"), "Error-- wrong destination");
+      NS_TEST_ASSERT_MSG_EQ (route->GetGateway (), Ipv4Address ("10.1.1.2"), "Error-- wrong gateway");
+    }
+
+  // n1
+  // Test that the right number of routes found
+  route = 0;
+  uint32_t nRoutes1 = globalRouting1->GetNRoutes ();
+  NS_LOG_DEBUG ("BridgeTest nRoutes1 " << nRoutes1);
+  NS_TEST_ASSERT_MSG_EQ (nRoutes1, 3, "Error-- not three entries");
+  for (uint32_t i = 0; i < globalRouting1->GetNRoutes (); i++)
+    {
+      route = globalRouting1->GetRoute (i);
+      NS_LOG_DEBUG ("entry dest " << route->GetDest () << " gw " << route->GetGateway ());
+    }
+  // Spot check the last route
+  if (route)
+    {
+      NS_TEST_ASSERT_MSG_EQ (route->GetDest (), Ipv4Address ("10.1.3.0"), "Error-- wrong destination");
+      NS_TEST_ASSERT_MSG_EQ (route->GetGateway (), Ipv4Address ("10.1.2.2"), "Error-- wrong gateway");
+    }
+
+  // skip n2 and n3, just verify n4
+  NS_LOG_DEBUG ("BridgeTest skip print out of n2 and n3, go next to node n4");
+
+  // n4
+  route = 0;
+  // Test that the right number of routes found
+  uint32_t nRoutes4 = globalRouting4->GetNRoutes ();
+  NS_LOG_DEBUG ("BridgeTest nRoutes4 " << nRoutes4);
+  NS_TEST_ASSERT_MSG_EQ (nRoutes4, 3, "Error-- not three entries");
+  for (uint32_t i = 0; i < globalRouting4->GetNRoutes (); i++)
+    {
+      route = globalRouting4->GetRoute (i);
+      NS_LOG_DEBUG ("entry dest " << route->GetDest () << " gw " << route->GetGateway ());
+    }
+  // Spot check the last route
+  if (route)
+    {
+      NS_TEST_ASSERT_MSG_EQ (route->GetDest (), Ipv4Address ("10.1.1.0"), "Error-- wrong destination");
+      NS_TEST_ASSERT_MSG_EQ (route->GetGateway (), Ipv4Address ("10.1.3.1"), "Error-- wrong gateway");
+    }
+
+  Simulator::Destroy ();
+}
+
+class TwoBridgeTest : public TestCase
+{
+public:
+  virtual void DoSetup (void);
+  virtual void DoRun (void);
+  TwoBridgeTest ();
+private:
+  NodeContainer m_nodes;
+};
+
+TwoBridgeTest::TwoBridgeTest ()
+  : TestCase ("Global routing across two bridges")
+{
+}
+
+void
+TwoBridgeTest::DoSetup ()
+{
+  m_nodes.Create (5);
+
+  //connect node0 to node1
+  Ptr<SimpleChannel> channel = CreateObject <SimpleChannel> ();
+  SimpleNetDeviceHelper simpleHelper;
+  NetDeviceContainer net = simpleHelper.Install (m_nodes.Get (0), channel);
+  net.Add (simpleHelper.Install (m_nodes.Get (1), channel));
+
+  NetDeviceContainer bridgeFacingDevices;
+  NetDeviceContainer switchn2Devices;
+  NetDeviceContainer switchn3Devices;
+
+  //connect node1 to node2 (switch)
+  Ptr<SimpleChannel> channel2 = CreateObject <SimpleChannel> ();
+  SimpleNetDeviceHelper simpleHelper2;
+  NetDeviceContainer net2 = simpleHelper2.Install (m_nodes.Get (1), channel2);
+  net2.Add (simpleHelper2.Install (m_nodes.Get (2), channel2));
+  bridgeFacingDevices.Add (net2.Get (0));
+  switchn2Devices.Add (net2.Get (1));
+
+  //connect node2 (switch) to node3
+  Ptr<SimpleChannel> channel3 = CreateObject <SimpleChannel> ();
+  SimpleNetDeviceHelper simpleHelper3;
+  NetDeviceContainer net3 = simpleHelper3.Install (m_nodes.Get (2), channel3);
+  net3.Add (simpleHelper3.Install (m_nodes.Get (3), channel3));
+  switchn2Devices.Add (net3.Get (0));
+  switchn3Devices.Add (net3.Get (1));
+
+  //connect node3 to node4
+  Ptr<SimpleChannel> channel4 = CreateObject <SimpleChannel> ();
+  SimpleNetDeviceHelper simpleHelper4;
+  NetDeviceContainer net4 = simpleHelper4.Install (m_nodes.Get (3), channel4);
+  net4.Add (simpleHelper4.Install (m_nodes.Get (4), channel4));
+  switchn3Devices.Add (net4.Get (0));
+  bridgeFacingDevices.Add (net4.Get (1));
+
+  Ptr<Node> switchn2Node = m_nodes.Get (2);
+  BridgeHelper bridgen2Helper;
+  bridgen2Helper.Install (switchn2Node, switchn2Devices);
+
+  Ptr<Node> switchn3Node = m_nodes.Get (3);
+  BridgeHelper bridgen3Helper;
+  bridgen3Helper.Install (switchn3Node, switchn3Devices);
+
+  InternetStackHelper internet;
+  // By default, InternetStackHelper adds a static and global routing
+  // implementation.  We just want the global for this test.
+  Ipv4GlobalRoutingHelper ipv4RoutingHelper;
+  internet.SetRoutingHelper (ipv4RoutingHelper);
+
+  internet.Install (m_nodes.Get (0));
+  internet.Install (m_nodes.Get (1));
+  // m_nodes.Get (2) is bridge node
+  // m_nodes.Get (3) is bridge node
+  internet.Install (m_nodes.Get (4));
+
+  Ipv4AddressHelper address;
+  address.SetBase ("10.1.1.0", "255.255.255.0");
+  address.Assign (net);
+
+  address.SetBase ("10.1.2.0", "255.255.255.0");
+  address.Assign (bridgeFacingDevices);
+
+}
+
+void
+TwoBridgeTest::DoRun ()
+{
+  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+  Ptr<Ipv4L3Protocol> ip0 = m_nodes.Get (0)->GetObject<Ipv4L3Protocol> ();
+  NS_TEST_ASSERT_MSG_NE (ip0, 0, "Error-- no Ipv4 object");  
+  Ptr<Ipv4RoutingProtocol> routing0 = ip0->GetRoutingProtocol ();
+  NS_TEST_ASSERT_MSG_NE (routing0, 0, "Error-- no Ipv4 routing protocol object");  
+  Ptr<Ipv4GlobalRouting> globalRouting0 = routing0->GetObject <Ipv4GlobalRouting> ();
+  NS_TEST_ASSERT_MSG_NE (globalRouting0, 0, "Error-- no Ipv4GlobalRouting object");  
+
+  // Skip to n4
+  Ptr<Ipv4L3Protocol> ip4 = m_nodes.Get (4)->GetObject<Ipv4L3Protocol> ();
+  NS_TEST_ASSERT_MSG_NE (ip4, 0, "Error-- no Ipv4 object");  
+  Ptr<Ipv4RoutingProtocol> routing4 = ip4->GetRoutingProtocol ();
+  NS_TEST_ASSERT_MSG_NE (routing4, 0, "Error-- no Ipv4 routing protocol object");  
+  Ptr<Ipv4GlobalRouting> globalRouting4 = routing4->GetObject <Ipv4GlobalRouting> ();
+  NS_TEST_ASSERT_MSG_NE (globalRouting4, 0, "Error-- no Ipv4GlobalRouting object");  
+
+  Ipv4RoutingTableEntry* route = 0;
+  // n0
+  // Test that the right number of routes found
+  uint32_t nRoutes0 = globalRouting0->GetNRoutes ();
+  NS_LOG_DEBUG ("BridgeTest nRoutes0 " << nRoutes0);
+  NS_TEST_ASSERT_MSG_EQ (nRoutes0, 2, "Error-- not two entries");
+  for (uint32_t i = 0; i < globalRouting0->GetNRoutes (); i++)
+    {
+      route = globalRouting0->GetRoute (i);
+      NS_LOG_DEBUG ("entry dest " << route->GetDest () << " gw " << route->GetGateway ());
+    }
+  // Spot check the last route
+  if (route)
+    {
+      NS_TEST_ASSERT_MSG_EQ (route->GetDest (), Ipv4Address ("10.1.2.0"), "Error-- wrong destination");
+      NS_TEST_ASSERT_MSG_EQ (route->GetGateway (), Ipv4Address ("10.1.1.2"), "Error-- wrong gateway");
+    }
+  // skip n2 and n3, just verify n4
+  NS_LOG_DEBUG ("BridgeTest skip print out of n1-n3, go next to node n4");
+
+  // n4
+  // Test that the right number of routes found
+  route = 0;
+  uint32_t nRoutes4 = globalRouting4->GetNRoutes ();
+  NS_LOG_DEBUG ("BridgeTest nRoutes4 " << nRoutes4);
+  NS_TEST_ASSERT_MSG_EQ (nRoutes4, 2, "Error-- not two entries");
+  for (uint32_t i = 0; i < globalRouting4->GetNRoutes (); i++)
+    {
+      route = globalRouting4->GetRoute (i);
+      NS_LOG_DEBUG ("entry dest " << route->GetDest () << " gw " << route->GetGateway ());
+    }
+  // Spot check the last route
+  if (route)
+    {
+      NS_TEST_ASSERT_MSG_EQ (route->GetDest (), Ipv4Address ("10.1.1.0"), "Error-- wrong destination");
+      NS_TEST_ASSERT_MSG_EQ (route->GetGateway (), Ipv4Address ("10.1.2.1"), "Error-- wrong gateway");
+    }
+
+  Simulator::Destroy ();
+}
+
 class Ipv4DynamicGlobalRoutingTestCase : public TestCase
 {
 public:
@@ -419,7 +1167,6 @@
   Simulator::Destroy ();
 }
 
-
 class Ipv4GlobalRoutingTestSuite : public TestSuite
 {
 public:
@@ -428,10 +1175,16 @@
 
 Ipv4GlobalRoutingTestSuite::Ipv4GlobalRoutingTestSuite ()
   : TestSuite ("ipv4-global-routing", UNIT)
-{
-  AddTestCase (new Ipv4DynamicGlobalRoutingTestCase, TestCase::QUICK);
-  AddTestCase (new Ipv4GlobalRoutingSlash32TestCase, TestCase::QUICK);
-}
+  {
+    AddTestCase (new LinkTest, TestCase::QUICK);
+    AddTestCase (new LanTest, TestCase::QUICK);
+    AddTestCase (new TwoLinkTest, TestCase::QUICK);
+    AddTestCase (new TwoLanTest, TestCase::QUICK);
+    AddTestCase (new BridgeTest, TestCase::QUICK);
+    AddTestCase (new TwoBridgeTest, TestCase::QUICK);
+    AddTestCase (new Ipv4DynamicGlobalRoutingTestCase, TestCase::QUICK);
+    AddTestCase (new Ipv4GlobalRoutingSlash32TestCase, TestCase::QUICK);
+  }
 
 // Do not forget to allocate an instance of this TestSuite
 static Ipv4GlobalRoutingTestSuite globalRoutingTestSuite;
diff -Naur ns-3.25/src/internet/test/ipv4-rip-test.cc ns-3.26/src/internet/test/ipv4-rip-test.cc
--- ns-3.25/src/internet/test/ipv4-rip-test.cc	2016-10-03 20:57:08.394246491 -0700
+++ ns-3.26/src/internet/test/ipv4-rip-test.cc	2016-10-03 19:49:01.704387228 -0700
@@ -481,11 +481,10 @@
 {
   uint32_t availableData;
   availableData = socket->GetRxAvailable ();
-  Ptr<Packet> receivedPacketProbe = socket->Recv (std::numeric_limits<uint32_t>::max (), 0);
+  Address srcAddr;
+  Ptr<Packet> receivedPacketProbe = socket->RecvFrom (std::numeric_limits<uint32_t>::max (), 0, srcAddr);
   NS_ASSERT (availableData == receivedPacketProbe->GetSize ());
-  SocketAddressTag tag;
-  receivedPacketProbe->RemovePacketTag (tag);
-  Ipv4Address senderAddress = InetSocketAddress::ConvertFrom (tag.GetAddress ()).GetIpv4 ();
+  Ipv4Address senderAddress = InetSocketAddress::ConvertFrom (srcAddr).GetIpv4 ();
 
   if (senderAddress == "192.168.0.2")
     {
diff -Naur ns-3.25/src/internet/test/ipv6-ripng-test.cc ns-3.26/src/internet/test/ipv6-ripng-test.cc
--- ns-3.25/src/internet/test/ipv6-ripng-test.cc	2016-10-03 20:57:08.399246452 -0700
+++ ns-3.26/src/internet/test/ipv6-ripng-test.cc	2016-10-03 19:49:01.709387191 -0700
@@ -479,11 +479,10 @@
 {
   uint32_t availableData;
   availableData = socket->GetRxAvailable ();
-  Ptr<Packet> receivedPacketProbe = socket->Recv (std::numeric_limits<uint32_t>::max (), 0);
+  Address srcAddr;
+  Ptr<Packet> receivedPacketProbe = socket->RecvFrom (std::numeric_limits<uint32_t>::max (), 0, srcAddr);
   NS_ASSERT (availableData == receivedPacketProbe->GetSize ());
-  SocketAddressTag tag;
-  receivedPacketProbe->RemovePacketTag (tag);
-  Ipv6Address senderAddress = Inet6SocketAddress::ConvertFrom (tag.GetAddress ()).GetIpv6 ();
+  Ipv6Address senderAddress = Inet6SocketAddress::ConvertFrom (srcAddr).GetIpv6 ();
 
   if (senderAddress == "fe80::200:ff:fe00:4")
     {
diff -Naur ns-3.25/src/internet/test/pfifo-fast-queue-disc-test-suite.cc ns-3.26/src/internet/test/pfifo-fast-queue-disc-test-suite.cc
--- ns-3.25/src/internet/test/pfifo-fast-queue-disc-test-suite.cc	2016-10-03 20:57:08.400246444 -0700
+++ ns-3.26/src/internet/test/pfifo-fast-queue-disc-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,364 +0,0 @@
-/* -*- 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.25/src/internet/test/tcp-bic-test.cc ns-3.26/src/internet/test/tcp-bic-test.cc
--- ns-3.25/src/internet/test/tcp-bic-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/test/tcp-bic-test.cc	2016-10-03 19:49:01.710387183 -0700
@@ -0,0 +1,309 @@
+/* -*- 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-bic.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpBicTestSuite");
+
+/**
+ * \brief Testing the congestion avoidance increment on TcpBic
+ */
+class TcpBicIncrementTest : public TestCase
+{
+public:
+  TcpBicIncrementTest (uint32_t cWnd,
+                       uint32_t segmentSize,
+                       uint32_t ssThresh,
+                       uint32_t segmentsAcked,
+                       uint32_t lastMaxCwnd,
+                       const std::string &name);
+
+private:
+  virtual void DoRun (void);
+  uint32_t Update (Ptr<TcpSocketState> tcb);
+  void ExecuteTest (void);
+
+  uint32_t m_cWnd;
+  uint32_t m_segmentSize;
+  uint32_t m_ssThresh;
+  uint32_t m_segmentsAcked;
+  uint32_t m_lastMaxCwnd;
+  Ptr<TcpSocketState> m_state;
+};
+
+TcpBicIncrementTest::TcpBicIncrementTest (uint32_t cWnd,
+                                          uint32_t segmentSize,
+                                          uint32_t ssThresh,
+                                          uint32_t segmentsAcked,
+                                          uint32_t lastMaxCwnd,
+                                          const std::string &name)
+  : TestCase (name),
+    m_cWnd (cWnd),
+    m_segmentSize (segmentSize),
+    m_ssThresh (ssThresh),
+    m_segmentsAcked (segmentsAcked),
+    m_lastMaxCwnd (lastMaxCwnd)
+{
+}
+
+void
+TcpBicIncrementTest::DoRun ()
+{
+  m_state = CreateObject<TcpSocketState> ();
+
+  m_state->m_cWnd = m_cWnd;
+  m_state->m_segmentSize = m_segmentSize;
+  m_state->m_ssThresh = m_ssThresh;
+
+  Simulator::Schedule (Seconds (0.0), &TcpBicIncrementTest::ExecuteTest, this);
+  Simulator::Run ();
+  Simulator::Destroy ();
+}
+
+void
+TcpBicIncrementTest::ExecuteTest ()
+{
+  uint32_t segCwnd = m_cWnd / m_segmentSize;
+
+  uint32_t ackCnt = Update (m_state);
+
+  if (m_segmentsAcked > ackCnt)
+    {
+      NS_TEST_ASSERT_MSG_EQ (m_state->m_cWnd.Get (), segCwnd * m_segmentSize + m_segmentSize,
+                             "Bic has not increment cWnd");
+      /*  NS_TEST_ASSERT_MSG_EQ (m_state->m_cWnd.Get (), 27000,
+                               "Bic has not increment cWnd");*/
+    }
+  else
+    {
+      NS_TEST_ASSERT_MSG_EQ (m_state->m_cWnd.Get (), segCwnd * m_segmentSize,
+                             "Bic has modified cWnd");
+    }
+}
+
+uint32_t
+TcpBicIncrementTest::Update (Ptr<TcpSocketState> tcb)
+{
+  uint32_t segCwnd = tcb->m_cWnd / tcb->m_segmentSize;
+  Ptr<TcpBic> cong = CreateObject <TcpBic> ();
+  cong->m_lastMaxCwnd = m_lastMaxCwnd;
+  UintegerValue lowWindow, bsCoeff, wMax;
+  IntegerValue smoothPart;
+  cong->GetAttribute ("LowWnd", lowWindow);
+  cong->GetAttribute ("BinarySearchCoefficient", bsCoeff);
+  cong->GetAttribute ("MaxIncr", wMax);
+  cong->GetAttribute ("SmoothPart", smoothPart);
+
+  cong->IncreaseWindow (m_state, m_segmentsAcked);
+
+  uint32_t ackCnt = 0;
+
+  if (segCwnd < lowWindow.Get ())
+    {
+      ackCnt = segCwnd;
+      return ackCnt;
+    }
+  if (segCwnd < m_lastMaxCwnd)
+    {
+      double midPt = (m_lastMaxCwnd - segCwnd) / bsCoeff.Get ();
+      if (midPt > wMax.Get ())
+        {
+          //Linear increase
+          ackCnt = segCwnd / wMax.Get ();
+        }
+      else if (midPt <= 1)
+        {
+          ackCnt = (segCwnd * smoothPart.Get ()) / bsCoeff.Get ();
+        }
+      else
+        {
+          //Binary search increase
+          ackCnt = segCwnd / midPt;
+        }
+    }
+  else
+    {
+      if (segCwnd < m_lastMaxCwnd + bsCoeff.Get ())
+        {
+          /* slow start AMD linear increase */
+          ackCnt = (segCwnd * smoothPart.Get ()) / bsCoeff.Get ();
+        }
+      else if (segCwnd < m_lastMaxCwnd + wMax.Get () * (bsCoeff.Get () - 1))
+        {
+          /* slow start */
+          ackCnt = (segCwnd * (bsCoeff.Get () - 1)) / (segCwnd - m_lastMaxCwnd);
+        }
+      else
+        {
+          /* linear increase */
+          ackCnt = segCwnd / wMax.Get ();
+
+        }
+    }
+  return ackCnt;
+
+}
+
+/**
+ * \brief Testing the congestion avoidance increment on TcpBic
+ */
+class TcpBicDecrementTest : public TestCase
+{
+public:
+  TcpBicDecrementTest (uint32_t cWnd,
+                       uint32_t segmentSize,
+                       BooleanValue fastConvergence,
+                       uint32_t lastMaxCwnd,
+                       const std::string &name);
+
+private:
+  virtual void DoRun (void);
+  void ExecuteTest (void);
+
+  uint32_t m_cWnd;
+  uint32_t m_segmentSize;
+  BooleanValue m_fastConvergence;
+  uint32_t m_lastMaxCwnd;
+  Ptr<TcpSocketState> m_state;
+};
+
+TcpBicDecrementTest::TcpBicDecrementTest (uint32_t cWnd,
+                                          uint32_t segmentSize,
+                                          BooleanValue fastConvergence,
+                                          uint32_t lastMaxCwnd,
+                                          const std::string &name)
+  : TestCase (name),
+    m_cWnd (cWnd),
+    m_segmentSize (segmentSize),
+    m_fastConvergence (fastConvergence),
+    m_lastMaxCwnd (lastMaxCwnd)
+{
+}
+
+void
+TcpBicDecrementTest::DoRun ()
+{
+  m_state = CreateObject<TcpSocketState> ();
+
+  m_state->m_cWnd = m_cWnd;
+  m_state->m_segmentSize = m_segmentSize;
+
+  Simulator::Schedule (Seconds (0.0), &TcpBicDecrementTest::ExecuteTest, this);
+  Simulator::Run ();
+  Simulator::Destroy ();
+}
+
+void
+TcpBicDecrementTest::ExecuteTest ()
+{
+  Ptr<TcpBic> cong = CreateObject <TcpBic> ();
+  cong->m_lastMaxCwnd = m_lastMaxCwnd;
+  cong->SetAttribute ("FastConvergence", m_fastConvergence);
+
+  uint32_t segCwnd = m_cWnd / m_segmentSize;
+  uint32_t retSsThresh = cong->GetSsThresh (m_state, m_state->m_cWnd);
+  uint32_t retLastMaxCwnd = cong->m_lastMaxCwnd;
+
+  DoubleValue beta;
+  UintegerValue lowWindow;
+  cong->GetAttribute ("Beta", beta);
+  cong->GetAttribute ("LowWnd", lowWindow);
+
+  uint32_t lastMaxCwnd, ssThresh;
+
+  if (segCwnd < m_lastMaxCwnd && m_fastConvergence.Get ())
+    {
+      lastMaxCwnd = beta.Get () * segCwnd;
+      NS_TEST_ASSERT_MSG_EQ (retLastMaxCwnd, lastMaxCwnd,
+                             "Bic has not updated lastMaxCwnd during fast convergence");
+    }
+  else
+    {
+      lastMaxCwnd = segCwnd;
+      NS_TEST_ASSERT_MSG_EQ (retLastMaxCwnd, lastMaxCwnd,
+                             "Bic has not reset lastMaxCwnd to current cwnd (in segments)");
+    }
+
+
+  if (segCwnd < lowWindow.Get ())
+    {
+      ssThresh = std::max (2 * m_segmentSize,  m_cWnd / 2);
+      NS_TEST_ASSERT_MSG_EQ (retSsThresh, ssThresh,
+                             "Bic has not updated ssThresh when cWnd less than lowWindow");
+    }
+  else
+    {
+      ssThresh = std::max (segCwnd * beta.Get (), 2.0) * m_segmentSize;
+      NS_TEST_ASSERT_MSG_EQ (retSsThresh, ssThresh,
+                             "Bic has not updated ssThresh when cWnd greater than lowWindow");
+    }
+}
+
+
+// -------------------------------------------------------------------
+
+static class TcpBicTestSuite : public TestSuite
+{
+public:
+  TcpBicTestSuite () : TestSuite ("tcp-bic-test", UNIT)
+  {
+    AddTestCase (new TcpBicIncrementTest (10 * 536, 536, 9 * 536, 11, 0,
+                                          "Bic increment test: under lowCwnd & enough ACKs received"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpBicIncrementTest (10 * 536, 536, 9 * 536, 8, 0,
+                                          "Bic increment test: under lowCwnd but not enough ACKs received"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpBicIncrementTest (18 * 1446, 1446, 15 * 1446, 5, 90,
+                                          "Bic increment test: linear increase when distance exceeds S_max"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpBicIncrementTest (18 * 1446, 1446, 15 * 1446, 24, 20,
+                                          "Bic increment test: binary search increase with smooth part"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpBicIncrementTest (19 * 1, 1, 17 * 1, 2, 83,
+                                          "Bic increment test: binary search increase"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpBicIncrementTest (15 * 536, 536, 9 * 536, 19, 13,
+                                          "Bic increment test: slow start AMD linear increase"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpBicIncrementTest (22 * 1000, 1000, 9 * 1000, 9, 16,
+                                          "Bic increment test: slow start but not enough ACKs received"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpBicIncrementTest (65 * 1000, 1000, 9 * 1000, 2, 16,
+                                          "Bic increment test: linear incrase but not enough ACKs received"),
+                 TestCase::QUICK);
+
+    AddTestCase (new TcpBicDecrementTest (5 * 1446, 1446, true, 10,
+                                          "Bic decrement test: fast convergence & cwnd less than lowWindow"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpBicDecrementTest (5 * 1446, 1446, false, 10,
+                                          "Bic decrement test: not in fast convergence & cwnd less than lowWindow"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpBicDecrementTest (15 * 1446, 1446, false, 10,
+                                          "Bic decrement test: not in fast convergence & cwnd greater than lowWindow"),
+                 TestCase::QUICK);
+  }
+} g_tcpBicTest;
+
+} // namespace ns3
diff -Naur ns-3.25/src/internet/test/tcp-general-test.cc ns-3.26/src/internet/test/tcp-general-test.cc
--- ns-3.25/src/internet/test/tcp-general-test.cc	2016-10-03 20:57:08.404246413 -0700
+++ ns-3.26/src/internet/test/tcp-general-test.cc	2016-10-03 19:49:01.713387161 -0700
@@ -181,7 +181,8 @@
   m_receiverSocket->TraceConnectWithoutContext ("Rx",
                                                 MakeCallback (&TcpGeneralTest::RxPacketCb, this));
 
-  InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 4477);  m_receiverSocket->Bind (local);
+  InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 4477);
+  m_receiverSocket->Bind (local);
 
   m_senderSocket = CreateSenderSocket (nodes.Get (0));
   m_senderSocket->SetCloseCallbacks (MakeCallback (&TcpGeneralTest::NormalCloseCb, this),
@@ -600,18 +601,7 @@
 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");
-    }
+  return GetTcb (who)->m_highTxMark;
 }
 
 uint32_t
@@ -823,6 +813,24 @@
     }
 }
 
+Ptr<TcpRxBuffer>
+TcpGeneralTest::GetRxBuffer (SocketWho who)
+{
+  if (who == SENDER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_senderSocket)->m_rxBuffer;
+    }
+  else if (who == RECEIVER)
+    {
+
+      return DynamicCast<TcpSocketMsgBase> (m_receiverSocket)->m_rxBuffer;
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
 void
 TcpGeneralTest::SetRcvBufSize (SocketWho who, uint32_t size)
 {
@@ -1012,7 +1020,7 @@
 {
   Ptr<Packet> p = Create<Packet> ();
   TcpHeader header;
-  SequenceNumber32 s = m_nextTxSequence;
+  SequenceNumber32 s = m_tcb->m_nextTxSequence;
 
   /*
    * Add tags for each socket option.
@@ -1020,7 +1028,7 @@
    * if both options are set. Once the packet got to layer three, only
    * the corresponding tags will be read.
    */
-  if (IsManualIpTos ())
+  if (GetIpTos ())
     {
       SocketIpTosTag ipTosTag;
       ipTosTag.SetTos (GetIpTos ());
diff -Naur ns-3.25/src/internet/test/tcp-general-test.h ns-3.26/src/internet/test/tcp-general-test.h
--- ns-3.25/src/internet/test/tcp-general-test.h	2016-10-03 20:57:08.404246413 -0700
+++ ns-3.26/src/internet/test/tcp-general-test.h	2016-10-03 19:49:01.714387154 -0700
@@ -22,6 +22,7 @@
 #include "ns3/simple-net-device.h"
 #include "ns3/error-model.h"
 #include "ns3/tcp-socket-base.h"
+#include "ns3/tcp-congestion-ops.h"
 #include "ns3/test.h"
 
 namespace ns3 {
@@ -467,6 +468,14 @@
   Ptr<TcpSocketState> GetTcb (SocketWho who);
 
   /**
+   * \brief Get the Rx buffer from selected socket
+   *
+   * \param who socket where get the TCB
+   * \return the rx buffer
+   */
+  Ptr<TcpRxBuffer> GetRxBuffer (SocketWho who);
+
+  /**
    * \brief Get the rWnd of the selected socket
    *
    * \param who socket where check the parameter
diff -Naur ns-3.25/src/internet/test/tcp-header-test.cc ns-3.26/src/internet/test/tcp-header-test.cc
--- ns-3.25/src/internet/test/tcp-header-test.cc	2016-10-03 20:57:08.405246405 -0700
+++ ns-3.26/src/internet/test/tcp-header-test.cc	2016-10-03 19:49:01.714387154 -0700
@@ -23,7 +23,7 @@
 #include "ns3/core-module.h"
 #include "ns3/tcp-header.h"
 #include "ns3/buffer.h"
-#include "../model/tcp-option-rfc793.h"
+#include "ns3/private/tcp-option-rfc793.h"
 
 namespace ns3 {
 
@@ -85,47 +85,47 @@
       header.SetUrgentPointer (urgentPointer);
 
       NS_TEST_ASSERT_MSG_EQ (header.GetLength (), 5, "TcpHeader without option is"
-                         " not 5 word");
+                             " not 5 word");
 
       buffer.AddAtStart (header.GetSerializedSize ());
       header.Serialize (buffer.Begin ());
 
       NS_TEST_ASSERT_MSG_EQ (sourcePort, header.GetSourcePort (),
-                         "Different source port found");
+                             "Different source port found");
       NS_TEST_ASSERT_MSG_EQ (destinationPort, header.GetDestinationPort (),
-                         "Different destination port found");
+                             "Different destination port found");
       NS_TEST_ASSERT_MSG_EQ (sequenceNumber, header.GetSequenceNumber (),
-                         "Different sequence number found");
+                             "Different sequence number found");
       NS_TEST_ASSERT_MSG_EQ (ackNumber, header.GetAckNumber (),
-                         "Different ack number found");
+                             "Different ack number found");
       NS_TEST_ASSERT_MSG_EQ (flags, header.GetFlags (),
-                         "Different flags found");
+                             "Different flags found");
       NS_TEST_ASSERT_MSG_EQ (windowSize, header.GetWindowSize (),
-                         "Different window size found");
+                             "Different window size found");
       NS_TEST_ASSERT_MSG_EQ (urgentPointer, header.GetUrgentPointer (),
-                         "Different urgent pointer found");
+                             "Different urgent pointer found");
 
       NS_TEST_ASSERT_MSG_EQ (header.GetLength (), 5, "TcpHeader without option is"
-                         " not 5 word");
+                             " not 5 word");
 
       TcpHeader copyHeader;
 
       copyHeader.Deserialize (buffer.Begin ());
 
       NS_TEST_ASSERT_MSG_EQ (sourcePort, copyHeader.GetSourcePort (),
-                         "Different source port found in deserialized header");
+                             "Different source port found in deserialized header");
       NS_TEST_ASSERT_MSG_EQ (destinationPort, copyHeader.GetDestinationPort (),
-                         "Different destination port found in deserialized header");
+                             "Different destination port found in deserialized header");
       NS_TEST_ASSERT_MSG_EQ (sequenceNumber, copyHeader.GetSequenceNumber (),
-                         "Different sequence number found in deserialized header");
+                             "Different sequence number found in deserialized header");
       NS_TEST_ASSERT_MSG_EQ (ackNumber, copyHeader.GetAckNumber (),
-                         "Different ack number found in deserialized header");
+                             "Different ack number found in deserialized header");
       NS_TEST_ASSERT_MSG_EQ (flags, copyHeader.GetFlags (),
-                         "Different flags found in deserialized header");
+                             "Different flags found in deserialized header");
       NS_TEST_ASSERT_MSG_EQ (windowSize, copyHeader.GetWindowSize (),
-                         "Different window size found in deserialized header");
+                             "Different window size found in deserialized header");
       NS_TEST_ASSERT_MSG_EQ (urgentPointer, copyHeader.GetUrgentPointer (),
-                         "Different urgent pointer found in deserialized header");
+                             "Different urgent pointer found in deserialized header");
     }
 }
 
@@ -309,6 +309,8 @@
     dest.Deserialize (buffer.Begin ());
     NS_TEST_ASSERT_MSG_EQ (header.HasOption (TcpOption::MSS),
                            true, "MSS option not correctly serialized");
+    NS_TEST_ASSERT_MSG_EQ (header.GetOptionLength (), oMSS.GetSerializedSize (),
+                           "MSS Option not counted in the total");
   }
 }
 
diff -Naur ns-3.25/src/internet/test/tcp-htcp-test.cc ns-3.26/src/internet/test/tcp-htcp-test.cc
--- ns-3.25/src/internet/test/tcp-htcp-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/test/tcp-htcp-test.cc	2016-10-03 19:49:01.715387146 -0700
@@ -0,0 +1,149 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 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
+ *
+ * Authors: Amir Modarresi <amodarresi@ittc.ku.edu>
+
+ * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
+ * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
+ * Information and Telecommunication Technology Center (ITTC)
+ * and Department of Electrical Engineering and Computer Science
+ * The University of Kansas Lawrence, KS USA.
+ *
+ */
+
+#include "ns3/test.h"
+#include "ns3/log.h"
+#include "ns3/tcp-congestion-ops.h"
+#include "ns3/tcp-socket-base.h"
+#include "ns3/tcp-htcp.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpHtcpTestSuite");
+
+/**
+ * \brief Testing the congestion avoidance increment on TcpHtcp
+ */
+class TcpHtcpIncrementTest : public TestCase
+{
+public:
+  TcpHtcpIncrementTest (uint32_t cWnd, uint32_t segmentSize,
+                     uint32_t segmentsAcked, Time lastCongestion, Time firstAck,
+                     Time secondAck, uint32_t expectedCwnd, const std::string &name);
+
+private:
+  virtual void DoRun (void);
+
+  uint32_t m_cWnd;
+  uint32_t m_segmentSize;
+  uint32_t m_segmentsAcked;
+  Time m_lastCongestion;
+  Time m_firstAck;
+  Time m_secondAck;
+  uint32_t m_expectedCwnd;
+  Ptr<TcpSocketState> m_state;
+};
+
+TcpHtcpIncrementTest::TcpHtcpIncrementTest (uint32_t cWnd, uint32_t segmentSize,
+                                      uint32_t segmentsAcked, Time lastCongestion, Time firstAck,
+                                      Time secondAck, uint32_t expectedCwnd, const std::string &name)
+  : TestCase (name),
+    m_cWnd (cWnd),
+    m_segmentSize (segmentSize),
+    m_segmentsAcked (segmentsAcked),
+    m_lastCongestion (lastCongestion),
+    m_firstAck (firstAck),
+    m_secondAck (secondAck),
+    m_expectedCwnd (expectedCwnd)
+{
+}
+
+/**
+ * \brief Since the calculation depends on the throughput and its associated
+ * timing, we schedule a few exact events. We get the value from HTCP methods
+ * during the simulation and compare them with their associated expected
+ * values calculated from the algorithm by hand.
+ */
+void
+TcpHtcpIncrementTest::DoRun ()
+{
+  NS_LOG_FUNCTION (this);
+  m_state = CreateObject<TcpSocketState> ();
+
+  m_state->m_cWnd = m_cWnd;
+  m_state->m_segmentSize = m_segmentSize;
+
+  Ptr<TcpHtcp> cong = CreateObject<TcpHtcp> ();
+  Time lastCongestion;
+
+  NS_LOG_DEBUG ("m_cWnd: " << m_cWnd << " m_segmentSize: " << m_segmentSize <<
+                " m_segmentsAcked: " << m_segmentsAcked << " m_lastCongestion" << m_lastCongestion);
+  Simulator::Schedule (Time (m_lastCongestion), &TcpHtcp::GetSsThresh, cong,
+                       m_state, m_state->m_cWnd);
+  lastCongestion = m_lastCongestion;
+  Simulator::Schedule (Time (m_firstAck), &TcpHtcp::PktsAcked, cong, m_state,
+                       m_segmentsAcked, Time (ns3::MilliSeconds (80)));
+  Simulator::Schedule (Time (m_secondAck), &TcpHtcp::PktsAcked, cong, m_state,
+                       m_segmentsAcked, Time (ns3::MilliSeconds (100)));
+
+  Simulator::Run ();
+  NS_LOG_DEBUG ("Simulation ran for the scheduled events");
+
+  cong->IncreaseWindow (m_state, m_segmentsAcked);
+  NS_LOG_DEBUG ( "m_cwnd from function: " << m_state->m_cWnd << " expected cWnd calculated: " << m_expectedCwnd);
+
+  NS_TEST_ASSERT_MSG_EQ (m_state->m_cWnd.Get (), m_expectedCwnd,
+                         "CWnd has not updated correctly");
+
+  Simulator::Destroy ();
+}
+
+/* The following tests simulate conditions after a congestion event and 
+ * return to 1/2 ssthresh. After that, two acks are scheduled and the 
+ * value of the cWnd is compared at the end of the event.
+ * The values in each test have been chosen randomly. The first test 
+ * simulates receiving acks for 38 packets with segmentSize=536, 
+ * the second one receives ack for 100 packets with segmentSize=1 and
+ * the third one receives ack for 50 segment with segmentSize=1446. 
+ * The resulting cWnd values of 20383, 40 and 76671 have been
+ * calculated by hand from the algorithm for their expected values.
+ */
+
+static class TcpHtcpTestSuite : public TestSuite
+{
+public:
+  TcpHtcpTestSuite ()
+    : TestSuite ("tcp-htcp-test", UNIT)
+  {
+
+    AddTestCase (
+      new TcpHtcpIncrementTest (38 * 536, 536, 38, ns3::MilliSeconds (1),
+                             ns3::MilliSeconds (900), ns3::MilliSeconds (1000),
+                             20383,"TcpHtcp increment test on cWnd "), TestCase::QUICK);
+    AddTestCase (
+      new TcpHtcpIncrementTest (38, 1, 100, ns3::MilliSeconds (1),
+                             ns3::MilliSeconds (900), ns3::MilliSeconds (1100),
+                             40,"TcpHtcp increment test on cWnd "), TestCase::QUICK);
+    AddTestCase (
+      new TcpHtcpIncrementTest (53 * 1446, 1446, 50, ns3::MilliSeconds (1),
+                             ns3::MilliSeconds (900), ns3::MilliSeconds (1500),
+                             76671,"TcpHtcp increment test on cWnd "), TestCase::QUICK);
+
+  }
+} g_TcpHtcpTest;
+
+} // namespace ns3
diff -Naur ns-3.25/src/internet/test/tcp-illinois-test.cc ns-3.26/src/internet/test/tcp-illinois-test.cc
--- ns-3.25/src/internet/test/tcp-illinois-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/test/tcp-illinois-test.cc	2016-10-03 19:49:01.716387139 -0700
@@ -0,0 +1,327 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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 <annguyen@ittc.ku.edu>
+ *
+ * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
+ * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
+ * Information and Telecommunication Technology Center (ITTC)
+ * and Department of Electrical Engineering and Computer Science
+ * The University of Kansas Lawrence, KS USA.
+ */
+
+#include "ns3/test.h"
+#include "ns3/log.h"
+#include "ns3/tcp-congestion-ops.h"
+#include "ns3/tcp-socket-base.h"
+#include "ns3/tcp-illinois.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpIllinoisTestSuite");
+
+/**
+ * \brief Testing TcpIllinois C-AIMD algorithm
+ */
+class TcpIllinoisTest : public TestCase
+{
+public:
+  TcpIllinoisTest (uint32_t cWnd,
+                   uint32_t ssThresh,
+                   uint32_t segmentSize,
+                   uint32_t cntRtt,
+                   Time maxRtt,
+                   uint32_t segmentsAcked,
+                   SequenceNumber32 nextTxSeq,
+                   SequenceNumber32 lastAckedSeq,
+                   const std::string &name);
+
+private:
+  virtual void DoRun ();
+  void IncreaseWindow (Ptr<TcpIllinois> cong);
+  void RecalcParam (Ptr<TcpIllinois> cong);
+  Time CalculateMaxDelay ();
+  Time CalculateAvgDelay ();
+  void CalculateAlpha (Ptr<TcpIllinois> cong, double da, double dm);
+  void CalculateBeta (Ptr<TcpIllinois> cong, double da, double dm);
+  void GetSsThresh ();
+
+  uint32_t m_cWnd;
+  uint32_t m_ssThresh;
+  uint32_t m_segmentSize;
+  Time m_baseRtt;
+  Time m_maxRtt;
+  uint32_t m_segmentsAcked;
+  SequenceNumber32 m_nextTxSeq;
+  SequenceNumber32 m_lastAckedSeq;
+  double m_alpha;
+  double m_beta;
+  uint32_t m_cntRtt;
+  Time m_sumRtt;
+  bool m_rttAbove;
+  uint8_t m_rttLow;
+  uint32_t m_ackCnt;
+};
+
+TcpIllinoisTest::TcpIllinoisTest (uint32_t cWnd,
+                                  uint32_t ssThresh,
+                                  uint32_t segmentSize,
+                                  uint32_t cntRtt,
+                                  Time maxRtt,
+                                  uint32_t segmentsAcked,
+                                  SequenceNumber32 nextTxSeq,
+                                  SequenceNumber32 lastAckedSeq,
+                                  const std::string & name)
+  : TestCase (name),
+    m_cWnd (cWnd),
+    m_ssThresh (ssThresh),
+    m_segmentSize (segmentSize),
+    m_baseRtt (MilliSeconds (100)),
+    m_maxRtt (maxRtt),
+    m_segmentsAcked (segmentsAcked),
+    m_nextTxSeq (nextTxSeq),
+    m_lastAckedSeq (lastAckedSeq),
+    m_alpha (0.0),
+    m_beta (0.0),
+    m_cntRtt (cntRtt),
+    m_sumRtt (0),
+    m_rttAbove (false),
+    m_rttLow (0),
+    m_ackCnt (0)
+{
+}
+
+void
+TcpIllinoisTest::DoRun ()
+{
+  Ptr<TcpSocketState> state = CreateObject <TcpSocketState> ();
+  state->m_cWnd = m_cWnd;
+  state->m_ssThresh = m_ssThresh;
+  state->m_segmentSize = m_segmentSize;
+  state->m_nextTxSequence = m_nextTxSeq;
+  state->m_lastAckedSeq = m_lastAckedSeq;
+
+  Ptr<TcpIllinois> cong = CreateObject <TcpIllinois> ();
+
+  // Set baseRtt to 100 ms
+  cong->PktsAcked (state, m_segmentsAcked, m_baseRtt);
+
+  m_sumRtt += m_baseRtt;
+
+  // Set maxRtt and update sumRtt based on cntRtt value
+  for (uint32_t count = 1; count < m_cntRtt; ++count)
+    {
+      cong->PktsAcked (state, m_segmentsAcked, m_maxRtt);
+      m_sumRtt += m_maxRtt;
+    }
+
+  /*
+   * Test cWnd modification during additive increase
+   */
+  cong->IncreaseWindow (state, m_segmentsAcked);
+  IncreaseWindow (cong);
+  NS_TEST_ASSERT_MSG_EQ (state->m_cWnd.Get (), m_cWnd,
+                         "CWnd has not updated correctly");
+
+  /*
+   * Test ssThresh modification during multiplicative decrease
+   */
+  uint32_t ssThresh = cong->GetSsThresh (state, m_cWnd);
+  GetSsThresh ();
+  NS_TEST_ASSERT_MSG_EQ (ssThresh, m_ssThresh,
+                         "SsThresh has not updated correctly");
+
+
+}
+
+void
+TcpIllinoisTest::IncreaseWindow (Ptr<TcpIllinois> cong)
+{
+  uint32_t segCwnd = m_cWnd / m_segmentSize;
+
+  if (m_lastAckedSeq >= m_nextTxSeq)
+    {
+      RecalcParam (cong);
+    }
+  if (m_cWnd < m_ssThresh)
+    { // NewReno slow start
+      if (m_segmentsAcked >= 1)
+        {
+          m_cWnd += m_segmentSize;
+          m_segmentsAcked -= 1;
+        }
+      NS_LOG_INFO ("In SlowStart, updated to cwnd " << m_cWnd <<
+                   " ssthresh " << m_ssThresh);
+    }
+  else
+    {
+      uint32_t oldCwnd = segCwnd;
+
+      if (m_segmentsAcked > 0)
+        {
+          m_ackCnt += m_segmentsAcked * m_alpha;
+        }
+
+      while (m_ackCnt >= segCwnd)
+        {
+          m_ackCnt -= segCwnd;
+          segCwnd += 1;
+        }
+
+      if (segCwnd != oldCwnd)
+        {
+          m_cWnd = segCwnd * m_segmentSize;
+          NS_LOG_INFO ("In CongAvoid, updated to cwnd " << m_cWnd <<
+                       " ssthresh " << m_ssThresh);
+        }
+    }
+
+}
+
+void
+TcpIllinoisTest::RecalcParam (Ptr<TcpIllinois> cong)
+{
+  DoubleValue alphaBase;
+  cong->GetAttribute ("AlphaBase", alphaBase);
+  UintegerValue winThresh;
+  cong->GetAttribute ("WinThresh", winThresh);
+
+  if (m_cWnd < winThresh.Get ())
+    {
+      NS_LOG_INFO ("cWnd < winThresh, set alpha & beta to base values");
+      m_alpha = alphaBase.Get ();
+    }
+  else if (m_cntRtt > 0)
+    {
+      double dm = (double) CalculateMaxDelay ().GetMilliSeconds ();
+      double da = (double) CalculateAvgDelay ().GetMilliSeconds ();
+
+      NS_LOG_INFO ("Updated to dm = " << dm << " da = " << da);
+
+      CalculateAlpha (cong, da, dm);
+      CalculateBeta (cong, da, dm);
+    }
+}
+
+Time
+TcpIllinoisTest::CalculateMaxDelay ()
+{
+  return (m_maxRtt - m_baseRtt);
+}
+
+Time
+TcpIllinoisTest::CalculateAvgDelay ()
+{
+  return (m_sumRtt / m_cntRtt - m_baseRtt);
+}
+
+void
+TcpIllinoisTest::CalculateAlpha (Ptr<TcpIllinois> cong, double da, double dm)
+{
+  DoubleValue alphaMax;
+  cong->GetAttribute ("AlphaMax", alphaMax);
+  UintegerValue theta;
+  cong->GetAttribute ("Theta", theta);
+  DoubleValue alphaMin;
+  cong->GetAttribute ("AlphaMin", alphaMin);
+
+  double d1 = dm / 100;
+
+  if (da <= d1)
+    {
+      if (!m_rttAbove)
+        {
+          m_alpha = alphaMax.Get ();
+        }
+      if (++m_rttLow >= theta.Get ())
+        {
+          m_rttLow = 0;
+          m_rttAbove = false;
+          m_alpha = alphaMax.Get ();
+        }
+    }
+  else
+    {
+      m_rttAbove = true;
+      dm -= d1;
+      da -= d1;
+      m_alpha = (dm * alphaMax.Get ()) / (dm + (da * (alphaMax.Get () - alphaMin.Get ())) / alphaMin.Get ());
+    }
+  NS_LOG_INFO ("Updated to alpha = " << m_alpha);
+}
+
+void
+TcpIllinoisTest::CalculateBeta (Ptr<TcpIllinois> cong, double da, double dm)
+{
+  DoubleValue betaMin;
+  cong->GetAttribute ("BetaMin", betaMin);
+  DoubleValue betaMax;
+  cong->GetAttribute ("BetaMax", betaMax);
+
+  double d2, d3;
+  d2 = dm / 10;
+  d3 = (8 * dm) / 10;
+
+  if (da <= d2)
+    {
+      m_beta = betaMin.Get ();
+    }
+  else if (da > d2 && da < d3)
+    {
+      m_beta = (betaMin.Get () * d3 - betaMax.Get () * d2 + (betaMax.Get () - betaMin.Get ()) * da) / (d3 - d2);
+    }
+
+  else if (da >= d3 || d3 <= d2)
+    {
+      m_beta = betaMax.Get ();
+    }
+  NS_LOG_INFO ("Updated to beta = " << m_beta);
+}
+
+void
+TcpIllinoisTest::GetSsThresh ()
+{
+  uint32_t segCwnd = m_cWnd / m_segmentSize;
+  uint32_t ssThresh = std::max (2.0, (1.0 - m_beta) * segCwnd);
+
+  NS_LOG_DEBUG ("Calculated ssThresh (in segments) = " << ssThresh);
+
+  m_ssThresh = ssThresh * m_segmentSize;
+}
+
+// -------------------------------------------------------------------
+static class TcpIllinoisTestSuite : public TestSuite
+{
+public:
+  TcpIllinoisTestSuite () : TestSuite ("tcp-illinois-test", UNIT)
+  {
+    AddTestCase (new TcpIllinoisTest (38 * 1446, 40 * 1446, 1446, 2, MilliSeconds (105), 2, SequenceNumber32 (2893), SequenceNumber32 (5785),
+                                      "Illinois test on cWnd and ssThresh when in slow start"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpIllinoisTest (60 * 346, 40 * 346, 346, 2, MilliSeconds (100), 2, SequenceNumber32 (2893), SequenceNumber32 (5785),
+                                      "Illinois test on cWnd and ssThresh when avg queueing delay is at minimum"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpIllinoisTest (38 * 1446, 40 * 1446, 1446, 5, MilliSeconds (110), 2, SequenceNumber32 (2893), SequenceNumber32 (5785),
+                                      "Illinois test on cWnd and ssThresh when avg queueing delay is at maximum"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpIllinoisTest (40 * 1446, 38 * 1446, 1446, 2, MilliSeconds (105), 55, SequenceNumber32 (2893), SequenceNumber32 (5785),
+                                      "Illinois test on cWnd and ssThresh when avg queueing delay is in between its min & max"),
+                 TestCase::QUICK);
+  }
+} g_tcpIllinoisTest;
+
+} // namespace ns3
diff -Naur ns-3.25/src/internet/test/tcp-scalable-test.cc ns-3.26/src/internet/test/tcp-scalable-test.cc
--- ns-3.25/src/internet/test/tcp-scalable-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/test/tcp-scalable-test.cc	2016-10-03 19:49:01.718387124 -0700
@@ -0,0 +1,179 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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
+ *
+ * Authors: Truc Anh N. Nguyen <annguyen@ittc.ku.edu>
+
+ * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
+ * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
+ * Information and Telecommunication Technology Center (ITTC)
+ * and Department of Electrical Engineering and Computer Science
+ * The University of Kansas Lawrence, KS USA.
+ *
+ */
+
+#include "ns3/test.h"
+#include "ns3/log.h"
+#include "ns3/tcp-congestion-ops.h"
+#include "ns3/tcp-socket-base.h"
+#include "ns3/tcp-scalable.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpScalableTestSuite");
+
+/**
+ * \brief Testing the congestion avoidance increment on TcpScalable
+ */
+class TcpScalableIncrementTest : public TestCase
+{
+public:
+  TcpScalableIncrementTest (uint32_t cWnd, uint32_t segmentSize,
+                            uint32_t segmentsAcked,
+                            const std::string &name);
+
+private:
+  virtual void DoRun (void);
+
+  uint32_t m_cWnd;
+  uint32_t m_segmentSize;
+  uint32_t m_segmentsAcked;
+  Ptr<TcpSocketState> m_state;
+};
+
+TcpScalableIncrementTest::TcpScalableIncrementTest (uint32_t cWnd,
+                                                    uint32_t segmentSize,
+                                                    uint32_t segmentsAcked,
+                                                    const std::string &name)
+  : TestCase (name),
+    m_cWnd (cWnd),
+    m_segmentSize (segmentSize),
+    m_segmentsAcked (segmentsAcked)
+{
+}
+
+void
+TcpScalableIncrementTest::DoRun ()
+{
+  m_state = CreateObject<TcpSocketState> ();
+
+  m_state->m_cWnd = m_cWnd;
+  m_state->m_segmentSize = m_segmentSize;
+
+  Ptr<TcpScalable> cong = CreateObject <TcpScalable> ();
+
+  uint32_t segCwnd = m_cWnd / m_segmentSize;
+
+  // Get default value of additive increase factor
+  UintegerValue aiFactor;
+  cong->GetAttribute ("AIFactor", aiFactor);
+
+  // To see an increase of 1 MSS, the number of segments ACKed has to be at least
+  // min (segCwnd, aiFactor).
+
+  uint32_t w = std::min (segCwnd, (uint32_t) aiFactor.Get ());
+  uint32_t delta = m_segmentsAcked / w;
+
+  cong->IncreaseWindow (m_state, m_segmentsAcked);
+
+  NS_TEST_ASSERT_MSG_EQ (m_state->m_cWnd.Get (), m_cWnd + delta * m_segmentSize,
+                         "CWnd has not increased");
+}
+
+/**
+ * \brief Testing the multiplicative decrease on TcpScalable
+ */
+class TcpScalableDecrementTest : public TestCase
+{
+public:
+  TcpScalableDecrementTest (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;
+};
+
+TcpScalableDecrementTest::TcpScalableDecrementTest (uint32_t cWnd,
+                                                    uint32_t segmentSize,
+                                                    const std::string &name)
+  : TestCase (name),
+    m_cWnd (cWnd),
+    m_segmentSize (segmentSize)
+{
+}
+
+void
+TcpScalableDecrementTest::DoRun ()
+{
+  m_state = CreateObject<TcpSocketState> ();
+
+  m_state->m_cWnd = m_cWnd;
+  m_state->m_segmentSize = m_segmentSize;
+
+  Ptr<TcpScalable> cong = CreateObject <TcpScalable> ();
+
+  uint32_t segCwnd = m_cWnd / m_segmentSize;
+
+  // Get default value of multiplicative decrease factor
+  DoubleValue mdFactor;
+  cong->GetAttribute ("MDFactor", mdFactor);
+
+  double b = 1.0 - mdFactor.Get ();
+
+  uint32_t ssThresh = std::max (2.0, segCwnd * b);
+
+  uint32_t ssThreshInSegments = cong->GetSsThresh (m_state, m_state->m_cWnd) / m_segmentSize;
+
+  NS_TEST_ASSERT_MSG_EQ (ssThreshInSegments, ssThresh,
+                         "Scalable decrement fn not used");
+}
+
+
+// -------------------------------------------------------------------
+
+static class TcpScalableTestSuite : public TestSuite
+{
+public:
+  TcpScalableTestSuite () : TestSuite ("tcp-scalable-test", UNIT)
+  {
+    AddTestCase (new TcpScalableIncrementTest (38 * 536, 536, 38,
+                                               "Scalable increment test on cWnd = 38 segments and segmentSize = 536 bytes"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpScalableIncrementTest (38, 1, 100,
+                                               "Scalable increment test on cWnd = 38 segments and segmentSize = 1 byte"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpScalableIncrementTest (53 * 1446, 1446, 50,
+                                               "Scalable increment test on cWnd = 53 segments and segmentSize = 1446 bytes"),
+                 TestCase::QUICK);
+
+    AddTestCase (new TcpScalableDecrementTest (38, 1,
+                                               "Scalable decrement test on cWnd = 38 segments and segmentSize = 1 byte"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpScalableDecrementTest (100 * 536, 536,
+                                               "Scalable decrement test on cWnd = 100 segments and segmentSize = 536 bytes"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpScalableDecrementTest (40 * 1446, 1446,
+                                               "Scalable decrement test on cWnd = 40 segments and segmentSize = 1446 bytes"),
+                 TestCase::QUICK);
+
+  }
+} g_tcpScalableTest;
+
+} // namespace ns3
diff -Naur ns-3.25/src/internet/test/tcp-vegas-test.cc ns-3.26/src/internet/test/tcp-vegas-test.cc
--- ns-3.25/src/internet/test/tcp-vegas-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/test/tcp-vegas-test.cc	2016-10-03 19:49:01.720387109 -0700
@@ -0,0 +1,204 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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 <annguyen@ittc.ku.edu>
+ *
+ * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
+ * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
+ * Information and Telecommunication Technology Center (ITTC)
+ * and Department of Electrical Engineering and Computer Science
+ * The University of Kansas Lawrence, KS USA.
+ */
+
+#include "ns3/test.h"
+#include "ns3/log.h"
+#include "ns3/tcp-congestion-ops.h"
+#include "ns3/tcp-socket-base.h"
+#include "ns3/tcp-vegas.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpVegasTestSuite");
+
+/**
+ * \brief Testing TcpVegas congestion control algorithm
+ */
+class TcpVegasTest : public TestCase
+{
+public:
+  TcpVegasTest (uint32_t cWnd,
+                uint32_t segmentSize,
+                uint32_t ssThresh,
+                Time rtt,
+                uint32_t segmentsAcked,
+                SequenceNumber32 nextTxSeq,
+                SequenceNumber32 lastAckedSeq,
+                const std::string &name);
+
+private:
+  virtual void DoRun (void);
+  void IncreaseWindow (Ptr<TcpVegas> cong);
+  void GetSsThresh (Ptr<TcpVegas> cong);
+
+  uint32_t m_cWnd;
+  uint32_t m_segmentSize;
+  uint32_t m_ssThresh;
+  Time m_rtt;
+  uint32_t m_segmentsAcked;
+  SequenceNumber32 m_nextTxSeq;
+  SequenceNumber32 m_lastAckedSeq;
+  Ptr<TcpSocketState> m_state;
+};
+
+TcpVegasTest::TcpVegasTest (uint32_t cWnd,
+                            uint32_t segmentSize,
+                            uint32_t ssThresh,
+                            Time rtt,
+                            uint32_t segmentsAcked,
+                            SequenceNumber32 nextTxSeq,
+                            SequenceNumber32 lastAckedSeq,
+                            const std::string &name)
+  : TestCase (name),
+    m_cWnd (cWnd),
+    m_segmentSize (segmentSize),
+    m_ssThresh (ssThresh),
+    m_rtt (rtt),
+    m_segmentsAcked (segmentsAcked),
+    m_nextTxSeq (nextTxSeq),
+    m_lastAckedSeq (lastAckedSeq)
+{
+}
+
+void
+TcpVegasTest::DoRun ()
+{
+  m_state = CreateObject<TcpSocketState> ();
+
+  m_state->m_cWnd = m_cWnd;
+  m_state->m_segmentSize = m_segmentSize;
+  m_state->m_ssThresh = m_ssThresh;
+  m_state->m_nextTxSequence = m_nextTxSeq;
+  m_state->m_lastAckedSeq = m_lastAckedSeq;
+
+  Ptr<TcpVegas> cong = CreateObject <TcpVegas> ();
+
+  // Set baseRtt to 100 ms
+  cong->PktsAcked (m_state, m_segmentsAcked, MilliSeconds (100));
+
+  // Re-set Vegas to assign a new value of minRtt
+  cong->CongestionStateSet (m_state, TcpSocketState::CA_OPEN);
+  cong->PktsAcked (m_state, m_segmentsAcked, m_rtt);
+
+  // 2 more calls to PktsAcked to increment cntRtt beyond 2
+  cong->PktsAcked (m_state, m_segmentsAcked, m_rtt);
+  cong->PktsAcked (m_state, m_segmentsAcked, m_rtt);
+
+  // Update cwnd using Vegas algorithm
+  cong->IncreaseWindow (m_state, m_segmentsAcked);
+
+  // Our calculation of cwnd
+  IncreaseWindow (cong);
+
+  NS_TEST_ASSERT_MSG_EQ (m_state->m_cWnd.Get (), m_cWnd,
+                         "CWnd has not updated correctly");
+  NS_TEST_ASSERT_MSG_EQ (m_state->m_ssThresh.Get (), m_ssThresh,
+                         "SsThresh has not updated correctly");
+}
+
+void
+TcpVegasTest::IncreaseWindow (Ptr<TcpVegas> cong)
+{
+  Time baseRtt = MilliSeconds (100);
+  uint32_t segCwnd = m_cWnd / m_segmentSize;
+
+  // Calculate expected throughput
+  uint64_t expectedCwnd;
+  expectedCwnd = (uint64_t) segCwnd * (double) baseRtt.GetMilliSeconds () / (double) m_rtt.GetMilliSeconds ();
+
+  // Calculate the difference between actual and expected throughput
+  uint32_t diff;
+  diff = segCwnd - expectedCwnd;
+
+  // Get the alpha,beta, and gamma attributes
+  UintegerValue alpha, beta, gamma;
+  cong->GetAttribute ("Alpha", alpha);
+  cong->GetAttribute ("Beta", beta);
+  cong->GetAttribute ("Gamma", gamma);
+
+  if (diff > gamma.Get () && (m_cWnd < m_ssThresh))
+    { // Change from slow-start to linear increase/decrease mode
+      segCwnd = std::min (segCwnd, (uint32_t) expectedCwnd + 1);
+      m_cWnd = segCwnd * m_segmentSize;
+      GetSsThresh (cong);
+    }
+  else if (m_cWnd < m_ssThresh)
+    { // Execute Reno slow start
+      if (m_segmentsAcked >= 1)
+        {
+          m_cWnd += m_segmentSize;
+          m_segmentsAcked--;
+        }
+    }
+  else
+    { // Linear increase/decrease mode
+      if (diff > beta.Get ())
+        {
+          m_cWnd = (segCwnd - 1) * m_segmentSize;
+          GetSsThresh (cong);
+        }
+      else if (diff < alpha.Get ())
+        {
+          m_cWnd = (segCwnd + 1) * m_segmentSize;
+        }
+      else
+        {
+        }
+    }
+  m_ssThresh = std::max (m_ssThresh, 3 * m_cWnd / 4);
+}
+
+void
+TcpVegasTest::GetSsThresh (Ptr<TcpVegas> cong)
+{
+  m_ssThresh = std::max (std::min (m_ssThresh, m_cWnd - m_segmentSize), 2 * m_segmentSize);
+}
+
+// -------------------------------------------------------------------
+static class TcpVegasTestSuite : public TestSuite
+{
+public:
+  TcpVegasTestSuite () : TestSuite ("tcp-vegas-test", UNIT)
+  {
+    AddTestCase (new TcpVegasTest (38 * 1446, 1446, 40 * 1446, MilliSeconds (106), 1, SequenceNumber32 (2893), SequenceNumber32 (5785),
+                                   "Vegas test on cWnd and ssThresh when in slow start and diff > gamma"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpVegasTest (5 * 536, 536, 10 * 536, MilliSeconds (118), 1, SequenceNumber32 (3216), SequenceNumber32 (3753),
+                                   "Vegas test on cWnd and ssThresh when in slow start and diff < gamma"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpVegasTest (60 * 346, 346, 40 * 346, MilliSeconds (206), 1, SequenceNumber32 (20761), SequenceNumber32 (21107),
+                                   "Vegas test on cWnd and ssThresh when diff > beta"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpVegasTest (15 * 1446, 1446, 10 * 1446, MilliSeconds (106), 1, SequenceNumber32 (21691), SequenceNumber32 (24583),
+                                   "Vegas test on cWnd and ssThresh when diff < alpha"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpVegasTest (20 * 746, 746, 10 * 746, MilliSeconds (109), 1, SequenceNumber32 (14921), SequenceNumber32 (15667),
+                                   "Vegas test on cWnd and ssThresh when alpha <= diff <= beta"),
+                 TestCase::QUICK);
+  }
+} g_tcpVegasTest;
+
+} // namespace ns3
diff -Naur ns-3.25/src/internet/test/tcp-veno-test.cc ns-3.26/src/internet/test/tcp-veno-test.cc
--- ns-3.25/src/internet/test/tcp-veno-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/test/tcp-veno-test.cc	2016-10-03 19:49:01.720387109 -0700
@@ -0,0 +1,262 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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 <annguyen@ittc.ku.edu>
+ *
+ * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
+ * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
+ * Information and Telecommunication Technology Center (ITTC)
+ * and Department of Electrical Engineering and Computer Science
+ * The University of Kansas Lawrence, KS USA.
+ */
+
+#include "ns3/test.h"
+#include "ns3/log.h"
+#include "ns3/tcp-congestion-ops.h"
+#include "ns3/tcp-socket-base.h"
+#include "ns3/tcp-veno.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpVenoTestSuite");
+
+static uint32_t
+NewReno_SlowStart (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked)
+{
+  if (segmentsAcked >= 1)
+    {
+      tcb->m_cWnd += tcb->m_segmentSize;
+      return segmentsAcked - 1;
+    }
+
+  return 0;
+}
+
+static void
+NewReno_CongestionAvoidance (Ptr<TcpSocketState> tcb, uint32_t 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);
+    }
+}
+
+static void
+NewReno_IncreaseWindow (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked)
+{
+  if (tcb->m_cWnd < tcb->m_ssThresh)
+    {
+      segmentsAcked = NewReno_SlowStart (tcb, segmentsAcked);
+    }
+
+  if (tcb->m_cWnd >= tcb->m_ssThresh)
+    {
+      NewReno_CongestionAvoidance (tcb, segmentsAcked);
+    }
+}
+
+/**
+ * \brief Testing the additive increase and multiplicative decrease of TcpVeno
+ */
+class TcpVenoTest : public TestCase
+{
+public:
+  TcpVenoTest (uint32_t cWnd,
+               uint32_t segmentSize,
+               uint32_t ssThresh,
+               Time rtt,
+               uint32_t segmentsAcked,
+               uint32_t numRtt,
+               const std::string &name);
+
+private:
+  virtual void DoRun (void);
+  void AdditiveIncrease (Ptr<TcpSocketState> state, uint32_t diff, UintegerValue beta);
+  uint32_t MultiplicativeDecrease (uint32_t diff, const UintegerValue &beta, uint32_t bytesInFlight);
+
+  uint32_t m_cWnd;
+  uint32_t m_segmentSize;
+  uint32_t m_ssThresh;
+  Time m_rtt;
+  uint32_t m_segmentsAcked;
+  uint32_t m_numRtt;
+  bool m_inc;
+  Ptr<TcpSocketState> m_state;
+};
+
+TcpVenoTest::TcpVenoTest (uint32_t cWnd,
+                          uint32_t segmentSize,
+                          uint32_t ssThresh,
+                          Time rtt,
+                          uint32_t segmentsAcked,
+                          uint32_t numRtt,
+                          const std::string &name)
+  : TestCase (name),
+    m_cWnd (cWnd),
+    m_segmentSize (segmentSize),
+    m_ssThresh (ssThresh),
+    m_rtt (rtt),
+    m_segmentsAcked (segmentsAcked),
+    m_numRtt (numRtt),
+    m_inc (true)
+{
+}
+
+void
+TcpVenoTest::DoRun ()
+{
+  m_state = CreateObject<TcpSocketState> ();
+
+  m_state->m_cWnd = m_cWnd;
+  m_state->m_segmentSize = m_segmentSize;
+  m_state->m_ssThresh = m_ssThresh;
+
+  Ptr<TcpVeno> cong = CreateObject <TcpVeno> ();
+
+  // Set baseRtt to 100 ms
+  Time baseRtt = MilliSeconds (100);
+  cong->PktsAcked (m_state, m_segmentsAcked, baseRtt);
+
+  // Re-set Veno to assign a new value of minRtt
+  cong->CongestionStateSet (m_state, TcpSocketState::CA_OPEN);
+
+  uint32_t segCwnd = m_cWnd / m_segmentSize;
+
+  // Calculate expected throughput
+  uint32_t expectedCwnd;
+  double tmp = baseRtt.GetSeconds () / m_rtt.GetSeconds ();
+  expectedCwnd = segCwnd * tmp;
+
+  // Calculate the difference between actual and expected throughput
+  uint32_t diff;
+  diff = segCwnd - expectedCwnd;
+
+  // Get the beta attribute
+  UintegerValue beta;
+  cong->GetAttribute ("Beta", beta);
+
+  uint32_t cntRtt = 0;
+
+  TcpSocketState state;
+  state.m_cWnd = m_cWnd;
+  state.m_ssThresh = m_ssThresh;
+  state.m_segmentSize = m_segmentSize;
+
+  while (m_numRtt != 0)
+    {
+      // Update cwnd using Veno's additive increase algorithm
+      cong->PktsAcked (m_state, m_segmentsAcked, m_rtt);
+      cong->IncreaseWindow (m_state, m_segmentsAcked);
+
+      // The first round the internal m_diff of cong will be 4, just like us
+      if (cntRtt == 0)
+        {
+          // Update ssthresh using Veno's multiplicative decrease algorithm
+          uint32_t ssThresh = cong->GetSsThresh (m_state, m_state->m_cWnd);
+
+          // Our calculation of ssthresh
+          uint32_t calculatedSsThresh = MultiplicativeDecrease (diff, beta, m_state->m_cWnd.Get ());
+
+          NS_TEST_ASSERT_MSG_EQ (ssThresh, calculatedSsThresh,
+                                 "Veno has not decremented cWnd correctly based on its"
+                                 "multiplicative decrease algo.");
+        }
+
+      // Our calculation of cwnd
+      if (cntRtt <= 2)
+        {
+          NewReno_IncreaseWindow (&state, 1);
+        }
+      else
+        {
+          AdditiveIncrease (&state, diff, beta);
+        }
+
+      NS_TEST_ASSERT_MSG_EQ (m_state->m_cWnd.Get (), state.m_cWnd.Get (),
+                             "CWnd has not updated correctly based on Veno linear increase algorithm");
+      m_numRtt--;
+      cntRtt++;
+    }
+}
+
+void
+TcpVenoTest::AdditiveIncrease (Ptr<TcpSocketState> state, uint32_t diff, UintegerValue beta)
+{
+  if (m_cWnd < m_ssThresh)
+    { // Slow start
+      NewReno_SlowStart (state, 1);
+    }
+  else
+    { // Congestion avoidance
+      if (diff < beta.Get ())
+        { // Increase cwnd by 1 every RTT when bandwidth is not fully utilized
+          NewReno_CongestionAvoidance (state, 1);
+        }
+      else
+        { // Increase cwnd by 1 every other RTT when bandwidth is fully utilized
+          if (m_inc)
+            {
+              NewReno_CongestionAvoidance (state, 1);
+              m_inc = false;
+            }
+          else
+            {
+              m_inc = true;
+            }
+        }
+    }
+}
+
+uint32_t
+TcpVenoTest::MultiplicativeDecrease (uint32_t diff, const UintegerValue &beta,
+                                     uint32_t bytesInFlight)
+{
+  uint32_t calculatedSsThresh;
+  if (diff < beta.Get ())
+    {
+      static double tmp = 4.0 / 5.0;
+      calculatedSsThresh = std::max (2 * m_segmentSize, static_cast<uint32_t> (bytesInFlight * tmp));
+    }
+  else
+    {
+      calculatedSsThresh = std::max (2 * m_segmentSize, bytesInFlight / 2);
+    }
+  return calculatedSsThresh;
+}
+
+
+// -------------------------------------------------------------------
+static class TcpVenoTestSuite : public TestSuite
+{
+public:
+  TcpVenoTestSuite () : TestSuite ("tcp-veno-test", UNIT)
+  {
+    AddTestCase (new TcpVenoTest (38 * 1446, 1446, 40 * 1446, MilliSeconds (100), 1, 1,
+                                  "Veno test on cWnd in slow start and non-congestive loss"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpVenoTest (30 * 536, 536, 20 * 536, MilliSeconds (106), 1, 1,
+                                  "Veno test on cWnd with diff < beta"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpVenoTest (60 * 536, 536, 40 * 536, MilliSeconds (106), 1, 3,
+                                  "Veno increment test on cWnd with diff > beta"),
+                 TestCase::QUICK);
+  }
+} g_tcpVenoTest;
+
+} // namespace ns3
diff -Naur ns-3.25/src/internet/test/tcp-wscaling-test.cc ns-3.26/src/internet/test/tcp-wscaling-test.cc
--- ns-3.25/src/internet/test/tcp-wscaling-test.cc	2016-10-03 20:57:08.410246367 -0700
+++ ns-3.26/src/internet/test/tcp-wscaling-test.cc	2016-10-03 19:49:01.721387102 -0700
@@ -138,6 +138,21 @@
         {
           NS_TEST_ASSERT_MSG_EQ (h.HasOption (TcpOption::WINSCALE), true,
                                  "wscale enabled but option disabled");
+
+          if (who == RECEIVER)
+            {
+              uint16_t advWin = h.GetWindowSize ();
+              uint32_t maxSize = GetRxBuffer (RECEIVER)->MaxBufferSize ();
+
+              if (maxSize > 65535)
+                {
+                  NS_TEST_ASSERT_MSG_EQ (advWin, 65535, "Scaling SYN segment");
+                }
+              else
+                {
+                  NS_TEST_ASSERT_MSG_EQ (advWin, maxSize, "Not advertising all window");
+                }
+            }
         }
 
       if (who == SENDER)
@@ -151,6 +166,18 @@
             {
               NS_TEST_ASSERT_MSG_EQ (h.HasOption (TcpOption::WINSCALE), true,
                                      "wscale enabled but option disabled");
+
+              uint16_t advWin = h.GetWindowSize ();
+              uint32_t maxSize = GetRxBuffer (SENDER)->MaxBufferSize ();
+
+              if (maxSize > 65535)
+                {
+                  NS_TEST_ASSERT_MSG_EQ (advWin, 65535, "Scaling SYN segment");
+                }
+              else
+                {
+                  NS_TEST_ASSERT_MSG_EQ (advWin, maxSize, "Not advertising all window");
+                }
             }
         }
       else if (who == RECEIVER)
@@ -184,6 +211,8 @@
     AddTestCase (new WScalingTestCase (WScalingTestCase::ENABLED, 65535, 200000, "WS only client"), TestCase::QUICK);
     AddTestCase (new WScalingTestCase (WScalingTestCase::ENABLED, 131072, 65535, "WS only server"), TestCase::QUICK);
     AddTestCase (new WScalingTestCase (WScalingTestCase::ENABLED, 65535, 131072, "WS only client"), TestCase::QUICK);
+    AddTestCase (new WScalingTestCase (WScalingTestCase::ENABLED, 4000, 4000, "WS small window, all"), TestCase::QUICK);
+    AddTestCase (new WScalingTestCase (WScalingTestCase::ENABLED_SENDER, 4000, 4000, "WS small window, sender"), TestCase::QUICK);
   }
 
 } g_tcpWScalingTestSuite;
diff -Naur ns-3.25/src/internet/test/tcp-yeah-test.cc ns-3.26/src/internet/test/tcp-yeah-test.cc
--- ns-3.25/src/internet/test/tcp-yeah-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/internet/test/tcp-yeah-test.cc	2016-10-03 19:49:01.721387102 -0700
@@ -0,0 +1,365 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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 <annguyen@ittc.ku.edu>
+ *
+ * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
+ * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
+ * Information and Telecommunication Technology Center (ITTC)
+ * and Department of Electrical Engineering and Computer Science
+ * The University of Kansas Lawrence, KS USA.
+ */
+
+#include "ns3/test.h"
+#include "ns3/log.h"
+#include "ns3/tcp-congestion-ops.h"
+#include "ns3/tcp-socket-base.h"
+#include "ns3/tcp-yeah.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpYeahTestSuite");
+
+/**
+ * \brief Testing TcpYeah additive increase algorithm
+ */
+class TcpYeahIncrementTest : public TestCase
+{
+public:
+  TcpYeahIncrementTest (uint32_t cWnd,
+                        uint32_t ssThresh,
+                        uint32_t segmentSize,
+                        SequenceNumber32 nextTxSeq,
+                        SequenceNumber32 lastAckedSeq,
+                        uint32_t segmentsAcked,
+                        Time minRtt,
+                        const std::string &name);
+
+private:
+  virtual void DoRun ();
+  void IncreaseWindow (Ptr<TcpYeah> cong);
+
+  uint32_t m_cWnd;
+  uint32_t m_ssThresh;
+  uint32_t m_segmentSize;
+  SequenceNumber32 m_nextTxSeq;
+  SequenceNumber32 m_lastAckedSeq;
+  uint32_t m_segmentsAcked;
+  Time m_baseRtt;
+  Time m_minRtt;
+  uint32_t m_doingRenoNow;
+  uint32_t m_cntRtt;
+  uint32_t m_renoCount;
+};
+
+TcpYeahIncrementTest::TcpYeahIncrementTest (uint32_t cWnd,
+                                            uint32_t ssThresh,
+                                            uint32_t segmentSize,
+                                            SequenceNumber32 nextTxSeq,
+                                            SequenceNumber32 lastAckedSeq,
+                                            uint32_t segmentsAcked,
+                                            Time minRtt,
+                                            const std::string &name)
+  : TestCase (name),
+    m_cWnd (cWnd),
+    m_ssThresh (ssThresh),
+    m_segmentSize (segmentSize),
+    m_nextTxSeq (nextTxSeq),
+    m_lastAckedSeq (lastAckedSeq),
+    m_segmentsAcked (segmentsAcked),
+    m_baseRtt (MilliSeconds (100)),
+    m_minRtt (minRtt),
+    m_doingRenoNow (0),
+    m_cntRtt (4),
+    m_renoCount (2)
+{
+}
+
+void
+TcpYeahIncrementTest::DoRun ()
+{
+  Ptr<TcpSocketState> state = CreateObject <TcpSocketState> ();
+  state->m_cWnd = m_cWnd;
+  state->m_ssThresh = m_ssThresh;
+  state->m_segmentSize = m_segmentSize;
+  state->m_nextTxSequence = m_nextTxSeq;
+  state->m_lastAckedSeq = m_lastAckedSeq;
+
+  Ptr<TcpYeah> cong = CreateObject <TcpYeah> ();
+
+  // Set baseRtt to 100 ms
+  cong->PktsAcked (state, m_segmentsAcked, m_baseRtt);
+
+  // Reset YeAH to assign a new value of minRtt
+  cong->CongestionStateSet (state, TcpSocketState::CA_OPEN);
+  cong->PktsAcked (state, m_segmentsAcked, m_minRtt);
+
+  // 2 more calls to PktsAcked to increment cntRtt beyond 2
+  cong->PktsAcked (state, m_segmentsAcked, m_minRtt);
+  cong->PktsAcked (state, m_segmentsAcked, m_minRtt);
+
+  cong->IncreaseWindow (state, m_segmentsAcked);
+  IncreaseWindow (cong);
+
+  NS_TEST_ASSERT_MSG_EQ (state->m_cWnd.Get (), m_cWnd,
+                         "CWnd has not updated correctly");
+}
+
+void
+TcpYeahIncrementTest::IncreaseWindow (Ptr<TcpYeah> cong)
+{
+  uint32_t segCwnd = m_cWnd / m_segmentSize;
+
+  if (m_cWnd < m_ssThresh)
+    { // NewReno slow start
+      if (m_segmentsAcked >= 1)
+        {
+          m_cWnd += m_segmentSize;
+          m_segmentsAcked -= 1;
+          NS_LOG_INFO ("In SlowStart, updated to cwnd " << m_cWnd <<
+                       " ssthresh " << m_ssThresh);
+        }
+    }
+  else if (!m_doingRenoNow)
+    { // Fast mode, follow STCP increment rule
+      UintegerValue aiFactor;
+      cong->GetAttribute ("StcpAiFactor", aiFactor);
+      uint32_t w = std::min (segCwnd, (uint32_t) aiFactor.Get ());
+      uint32_t delta = m_segmentsAcked / w;
+      m_cWnd += delta * m_segmentSize;
+      NS_LOG_INFO ("In Fast mode, updated to cwnd " << m_cWnd <<
+                   " ssthresh " << m_ssThresh);
+    }
+  else
+    { // NewReno congestion avoidance
+      if (m_segmentsAcked > 0)
+        {
+          double adder = static_cast<double> (m_segmentSize * m_segmentSize) / m_cWnd;
+          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);
+        }
+
+    }
+  if (m_lastAckedSeq >= m_nextTxSeq)
+    {
+      if (m_cntRtt > 2)
+        {
+          /*
+           * Calculate the extra number of packets in queue
+           */
+          Time rttQueue = m_minRtt - m_baseRtt;
+          double bw = segCwnd / m_minRtt.GetSeconds ();
+          uint32_t queue = bw * rttQueue.GetSeconds ();
+
+          // Calculate network congestion level
+          double L = rttQueue.GetSeconds () / m_baseRtt.GetSeconds ();
+
+          UintegerValue alpha;
+          cong->GetAttribute ("Alpha", alpha);
+          UintegerValue phy;
+          cong->GetAttribute ("Phy", phy);
+          UintegerValue gamma;
+          cong->GetAttribute ("Gamma", gamma);
+          UintegerValue epsilon;
+          cong->GetAttribute ("Epsilon", epsilon);
+          UintegerValue zeta;
+          cong->GetAttribute ("Zeta", zeta);
+
+          if (queue > alpha.Get () || L > (1 / phy.Get ()) )
+            { // Slow mode
+              NS_LOG_INFO ("Enter Slow mode");
+              if (queue > alpha.Get () && segCwnd > m_renoCount)
+                { // Precautionary decongestion
+                  uint32_t reduction = std::min (queue / (uint32_t) gamma.Get (),
+                                        segCwnd >> (uint32_t) epsilon.Get ());
+                  segCwnd -= reduction;
+                  segCwnd = std::max (segCwnd, m_renoCount);
+                  m_cWnd = segCwnd * m_segmentSize;
+                  m_ssThresh = m_cWnd;
+                  NS_LOG_INFO ("In Slow mode, after precautionary decongestion, "
+                               "updated to cwnd " << m_cWnd << " ssthresh " <<
+                               m_ssThresh);
+                }
+            }
+        }
+    }
+}
+
+/**
+ * \brief Testing TcpYeah multiplicative decrease algorithm
+ */
+class TcpYeahDecrementTest : public TestCase
+{
+public:
+  TcpYeahDecrementTest (uint32_t cWnd,
+                        uint32_t ssThresh,
+                        uint32_t segmentSize,
+                        SequenceNumber32 nextTxSeq,
+                        SequenceNumber32 lastAckedSeq,
+                        Time minRtt,
+                        UintegerValue rho,
+                        const std::string &name);
+
+private:
+  virtual void DoRun (void);
+  uint32_t CalculateSsThresh (Ptr<TcpYeah> cong);
+
+  uint32_t m_cWnd;
+  uint32_t m_ssThresh;
+  uint32_t m_segmentSize;
+  uint32_t m_doingRenoNow;
+  SequenceNumber32 m_nextTxSeq;
+  SequenceNumber32 m_lastAckedSeq;
+  Time m_minRtt;
+  Time m_baseRtt;
+  uint32_t m_segmentsAcked;
+  UintegerValue m_rho;
+};
+
+TcpYeahDecrementTest::TcpYeahDecrementTest (uint32_t cWnd,
+                                            uint32_t ssThresh,
+                                            uint32_t segmentSize,
+                                            SequenceNumber32 nextTxSeq,
+                                            SequenceNumber32 lastAckedSeq,
+                                            Time minRtt,
+                                            UintegerValue rho,
+                                            const std::string &name)
+  : TestCase (name),
+    m_cWnd (cWnd),
+    m_ssThresh (ssThresh),
+    m_segmentSize (segmentSize),
+    m_doingRenoNow (0),
+    m_nextTxSeq (nextTxSeq),
+    m_lastAckedSeq (lastAckedSeq),
+    m_minRtt (minRtt),
+    m_baseRtt (MilliSeconds (100)),
+    m_segmentsAcked (2),
+    m_rho (rho)
+{
+}
+
+void
+TcpYeahDecrementTest::DoRun ()
+{
+  Ptr<TcpSocketState> state = CreateObject <TcpSocketState> ();
+  state->m_cWnd = m_cWnd;
+  state->m_nextTxSequence = m_nextTxSeq;
+  state->m_lastAckedSeq = m_lastAckedSeq;
+  state->m_segmentSize = m_segmentSize;
+  state->m_ssThresh = m_ssThresh;
+
+  Ptr<TcpYeah> cong = CreateObject <TcpYeah> ();
+
+  // Re-set rho to 1 for this unit test
+  cong->SetAttribute ("Rho", UintegerValue (m_rho));
+
+  // Set baseRtt to 100 ms
+  cong->PktsAcked (state, m_segmentsAcked, m_baseRtt);
+
+  // Set minRtt to a different value
+  cong->CongestionStateSet (state, TcpSocketState::CA_OPEN);
+  cong->PktsAcked (state, m_segmentsAcked, m_minRtt);
+
+  // 2 more calls to PktsAcked to increment cntRtt beyond 2
+  cong->PktsAcked (state, m_segmentsAcked, m_minRtt);
+  cong->PktsAcked (state, m_segmentsAcked, m_minRtt);
+
+  // Calculate queue backlog
+  cong->IncreaseWindow (state, m_segmentsAcked);
+
+  // Now get the value of ssThresh
+  uint32_t ssThresh = cong->GetSsThresh (state, m_cWnd);
+
+  // Our calculation of ssThresh
+  uint32_t ssThreshVal = CalculateSsThresh (cong);
+
+  NS_TEST_ASSERT_MSG_EQ (ssThresh, ssThreshVal,
+                         "SsThresh has not updated correctly");
+}
+
+uint32_t
+TcpYeahDecrementTest::CalculateSsThresh (Ptr<TcpYeah> cong)
+{
+  // Calculate queue backlog
+  uint32_t segCwnd = m_cWnd / m_segmentSize;
+  uint32_t reduction;
+
+  UintegerValue delta;
+  cong->GetAttribute ("Delta", delta);
+
+  Time rttQueue =  m_minRtt - m_baseRtt;
+
+  // queue = rttQueue * bw = rttQueue * (cwnd/RTTmin)
+  double bw = segCwnd / m_minRtt.GetSeconds ();
+  uint32_t queue = bw * rttQueue.GetSeconds ();
+
+  NS_LOG_LOGIC ("queue backlog" << queue);
+
+  if (m_doingRenoNow < m_rho.Get ())
+    {
+      reduction = std::max (queue, segCwnd >> delta.Get ());
+      reduction = std::min (reduction, std::max (segCwnd >> 1, (uint32_t) 2));
+      NS_LOG_INFO ("Reduction amount for yeah upon loss = " << reduction);
+    }
+  else
+    {
+      reduction = std::max (segCwnd >> 1, (uint32_t) 2);
+      NS_LOG_INFO ("Reduction amount for reno upon loss = " << reduction);
+    }
+
+
+  return (m_cWnd - (reduction * m_segmentSize));
+
+}
+
+
+// -------------------------------------------------------------------
+static class TcpYeahTestSuite : public TestSuite
+{
+public:
+  TcpYeahTestSuite () : TestSuite ("tcp-yeah-test", UNIT)
+  {
+    AddTestCase (new TcpYeahIncrementTest (20 * 1446, 25 * 1446, 1446, SequenceNumber32 (2893),
+                                           SequenceNumber32 (1447), 1, MilliSeconds (105),
+                                           "YeAH test on cWnd when in slow start"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpYeahIncrementTest (30 * 1446, 25 * 1446, 1446, SequenceNumber32 (2893),
+                                           SequenceNumber32 (1447), 30, MilliSeconds (105),
+                                           "YeAH test on cWnd when in Fast mode"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpYeahIncrementTest (40 * 356, 30 * 356, 356, SequenceNumber32 (20761),
+                                           SequenceNumber32 (21117), 1, MilliSeconds (120),
+                                           "YeAH test on cWnd when in slow mode without precautionary decongestion"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpYeahIncrementTest (100 * 356, 70 * 356, 356, SequenceNumber32 (20761),
+                                           SequenceNumber32 (21117), 1, MilliSeconds (600),
+                                           "YeAH test on cWnd when in slow mode with precautionary decongestion"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpYeahDecrementTest (40 * 1446, 30 * 1446, 1446, SequenceNumber32 (2893),
+                                           SequenceNumber32 (7230), MilliSeconds (120), UintegerValue (0),
+                                           "YeAH test on ssThresh upon loss while competing with Reno flows"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpYeahDecrementTest (57 * 1446, 42 * 1446, 1446, SequenceNumber32 (2893),
+                                           SequenceNumber32 (7230), MilliSeconds (200), UintegerValue (2),
+                                           "YeAH test on ssThresh upon loss while not competing with Reno flows"),
+                 TestCase::QUICK);
+  }
+} g_tcpYeahTest;
+
+} // namespace ns3
diff -Naur ns-3.25/src/internet/test/udp-test.cc ns-3.26/src/internet/test/udp-test.cc
--- ns-3.25/src/internet/test/udp-test.cc	2016-10-03 20:57:08.411246359 -0700
+++ ns-3.26/src/internet/test/udp-test.cc	2016-10-03 19:49:01.722387094 -0700
@@ -31,6 +31,7 @@
 #include "ns3/simple-net-device-helper.h"
 #include "ns3/drop-tail-queue.h"
 #include "ns3/socket.h"
+#include "ns3/traffic-control-helper.h"
 
 #include "ns3/boolean.h"
 #include "ns3/log.h"
@@ -41,6 +42,7 @@
 
 #include "ns3/arp-l3-protocol.h"
 #include "ns3/ipv4-l3-protocol.h"
+#include "ns3/ipv4-queue-disc-item.h"
 #include "ns3/ipv6-l3-protocol.h"
 #include "ns3/icmpv4-l4-protocol.h"
 #include "ns3/icmpv6-l4-protocol.h"
@@ -149,17 +151,21 @@
 {
   Ptr<Packet> m_receivedPacket;
   Ptr<Packet> m_receivedPacket2;
-  void DoSendData (Ptr<Socket> socket, std::string to);
-  void SendData (Ptr<Socket> socket, std::string to);
+  Ptr<Ipv4QueueDiscItem> m_sentPacket;
+  uint32_t GetTos (void);
+  uint32_t GetPriority (void);
+  void DoSendDataTo (Ptr<Socket> socket, std::string to);
+  void SendDataTo (Ptr<Socket> socket, std::string to);
+  void DoSendData (Ptr<Socket> socket);
+  void SendData (Ptr<Socket> socket);
 
 public:
   virtual void DoRun (void);
   UdpSocketImplTest ();
 
-  void ReceivePacket (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from);
-  void ReceivePacket2 (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from);
   void ReceivePkt (Ptr<Socket> socket);
   void ReceivePkt2 (Ptr<Socket> socket);
+  void SentPkt (Ptr<const QueueItem> item);
 };
 
 UdpSocketImplTest::UdpSocketImplTest ()
@@ -167,16 +173,6 @@
 {
 }
 
-void UdpSocketImplTest::ReceivePacket (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from)
-{
-  m_receivedPacket = packet;
-}
-
-void UdpSocketImplTest::ReceivePacket2 (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from)
-{
-  m_receivedPacket2 = packet;
-}
-
 void UdpSocketImplTest::ReceivePkt (Ptr<Socket> socket)
 {
   uint32_t availableData;
@@ -193,8 +189,29 @@
   NS_ASSERT (availableData == m_receivedPacket2->GetSize ());
 }
 
+void UdpSocketImplTest::SentPkt (Ptr<const QueueItem> item)
+{
+  Ptr<const Ipv4QueueDiscItem> ipv4Item = DynamicCast<const Ipv4QueueDiscItem> (item);
+  NS_TEST_EXPECT_MSG_NE (ipv4Item, 0, "no IPv4 packet");
+  Address addr;
+  m_sentPacket = Create<Ipv4QueueDiscItem> (ipv4Item->GetPacket ()->Copy (), addr, 0, ipv4Item->GetHeader ());
+}
+
+uint32_t UdpSocketImplTest::GetTos (void)
+{
+  return static_cast<uint32_t> (m_sentPacket->GetHeader ().GetTos ());
+}
+
+uint32_t UdpSocketImplTest::GetPriority (void)
+{
+  SocketPriorityTag priorityTag;
+  bool found = m_sentPacket->GetPacket ()->PeekPacketTag (priorityTag);
+  NS_TEST_EXPECT_MSG_EQ (found, true, "the packet should carry a SocketPriorityTag");
+  return static_cast<uint32_t> (priorityTag.GetPriority ());
+}
+
 void
-UdpSocketImplTest::DoSendData (Ptr<Socket> socket, std::string to)
+UdpSocketImplTest::DoSendDataTo (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),
@@ -202,12 +219,26 @@
 }
 
 void
-UdpSocketImplTest::SendData (Ptr<Socket> socket, std::string to)
+UdpSocketImplTest::SendDataTo (Ptr<Socket> socket, std::string to)
 {
   m_receivedPacket = Create<Packet> ();
   m_receivedPacket2 = Create<Packet> ();
   Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (0),
-                                  &UdpSocketImplTest::DoSendData, this, socket, to);
+                                  &UdpSocketImplTest::DoSendDataTo, this, socket, to);
+  Simulator::Run ();
+}
+
+void
+UdpSocketImplTest::DoSendData (Ptr<Socket> socket)
+{
+  NS_TEST_EXPECT_MSG_EQ (socket->Send (Create<Packet> (123), 0), 123, "100");
+}
+
+void
+UdpSocketImplTest::SendData (Ptr<Socket> socket)
+{
+  Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (0),
+                                  &UdpSocketImplTest::DoSendData, this, socket);
   Simulator::Run ();
 }
 
@@ -234,6 +265,9 @@
   InternetStackHelper internet;
   internet.Install (nodes);
 
+  TrafficControlHelper tch = TrafficControlHelper::Default ();
+  QueueDiscContainer qdiscs = tch.Install (net1.Get (1));
+
   Ptr<Ipv4> ipv4;
   uint32_t netdev_idx;
   Ipv4InterfaceAddress ipv4Addr;
@@ -279,7 +313,7 @@
   // ------ Now the tests ------------
 
   // Unicast test
-  SendData (txSocket, "10.0.0.1");
+  SendDataTo (txSocket, "10.0.0.1");
   NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 123, "trivial");
   NS_TEST_EXPECT_MSG_EQ (m_receivedPacket2->GetSize (), 0, "second interface should receive it");
 
@@ -288,7 +322,7 @@
 
   // Simple broadcast test
 
-  SendData (txSocket, "255.255.255.255");
+  SendDataTo (txSocket, "255.255.255.255");
   NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 123, "trivial");
   NS_TEST_EXPECT_MSG_EQ (m_receivedPacket2->GetSize (), 0, "second socket should not receive it (it is bound specifically to the second interface's address");
 
@@ -305,7 +339,7 @@
   rxSocket2->SetRecvCallback (MakeCallback (&UdpSocketImplTest::ReceivePkt2, this));
   NS_TEST_EXPECT_MSG_EQ (rxSocket2->Bind (InetSocketAddress (Ipv4Address ("0.0.0.0"), 1234)), 0, "trivial");
 
-  SendData (txSocket, "255.255.255.255");
+  SendDataTo (txSocket, "255.255.255.255");
   NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 123, "trivial");
   NS_TEST_EXPECT_MSG_EQ (m_receivedPacket2->GetSize (), 123, "trivial");
 
@@ -315,7 +349,7 @@
   // Simple Link-local multicast test
 
   txSocket->BindToNetDevice (net1.Get (1));
-  SendData (txSocket, "224.0.0.9");
+  SendDataTo (txSocket, "224.0.0.9");
   NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 0, "first socket should not receive it (it is bound specifically to the second interface's address");
   NS_TEST_EXPECT_MSG_EQ (m_receivedPacket2->GetSize (), 123, "recv2: 224.0.0.9");
 
@@ -337,6 +371,41 @@
   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");
 
+  m_receivedPacket->RemoveAllByteTags ();
+  m_receivedPacket2->RemoveAllByteTags ();
+
+  // TOS and priority tests
+
+  // Intercept the packets dequeued by the queue disc on the sender node
+  qdiscs.Get (0)->TraceConnectWithoutContext ("Dequeue", MakeCallback (&UdpSocketImplTest::SentPkt, this));
+
+  // The socket is not connected.
+  txSocket->SetIpTos (0x28);  // AF11
+  txSocket->SetPriority (6);  // Interactive
+  // Send a packet to a specified destination:
+  // - for not connected sockets, the tos specified in the destination address (0) is used
+  // - since the tos is zero, the priority set for the socket is used
+  SendDataTo (txSocket, "10.0.0.1");
+  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 123, "trivial");
+
+  NS_TEST_EXPECT_MSG_EQ (GetTos (), 0, "the TOS should be set to 0");
+  NS_TEST_EXPECT_MSG_EQ (GetPriority (), 6, "Interactive (6)");
+
+  m_receivedPacket->RemoveAllByteTags ();
+
+  InetSocketAddress dest ("10.0.0.1", 1234);
+  dest.SetTos (0xb8);  // EF
+  // the connect operation sets the tos (and priority) for the socket
+  NS_TEST_EXPECT_MSG_EQ (txSocket->Connect (dest), 0, "the connect operation failed");
+
+  SendData (txSocket);
+  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 123, "trivial");
+
+  NS_TEST_EXPECT_MSG_EQ (GetTos (), 0xb8, "the TOS should be set to 0xb8");
+  NS_TEST_EXPECT_MSG_EQ (GetPriority (), 4, "Interactive bulk (4)");
+
+  m_receivedPacket->RemoveAllByteTags ();
+
   Simulator::Destroy ();
 
 }
diff -Naur ns-3.25/src/internet/wscript ns-3.26/src/internet/wscript
--- ns-3.25/src/internet/wscript	2016-10-03 20:57:08.412246351 -0700
+++ ns-3.26/src/internet/wscript	2016-10-03 19:49:01.723387087 -0700
@@ -147,8 +147,15 @@
         'model/tcp-socket-base.cc',
         'model/tcp-highspeed.cc',
         'model/tcp-hybla.cc',
+        'model/tcp-vegas.cc',
         'model/tcp-congestion-ops.cc',
         'model/tcp-westwood.cc',
+        'model/tcp-scalable.cc', 
+        'model/tcp-veno.cc',
+        'model/tcp-bic.cc',
+        'model/tcp-yeah.cc',
+        'model/tcp-illinois.cc',
+        'model/tcp-htcp.cc',
         'model/tcp-rx-buffer.cc',
         'model/tcp-tx-buffer.cc',
         'model/tcp-option.cc',
@@ -234,7 +241,6 @@
         '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',
@@ -248,6 +254,13 @@
         'test/tcp-rto-test.cc',
         'test/tcp-highspeed-test.cc',
         'test/tcp-hybla-test.cc',
+        'test/tcp-vegas-test.cc',
+        'test/tcp-scalable-test.cc',
+        'test/tcp-veno-test.cc',
+        'test/tcp-bic-test.cc',
+        'test/tcp-yeah-test.cc',
+        'test/tcp-illinois-test.cc',
+        'test/tcp-htcp-test.cc',
         'test/tcp-zero-window-test.cc',
         'test/tcp-pkts-acked-test.cc',
         'test/tcp-rtt-estimation.cc',
@@ -350,8 +363,15 @@
         'model/ipv6-address-generator.h',
         'model/tcp-highspeed.h',
         'model/tcp-hybla.h',
+        'model/tcp-vegas.h',
         'model/tcp-congestion-ops.h',
         'model/tcp-westwood.h',
+        'model/tcp-scalable.h',
+        'model/tcp-veno.h',
+        'model/tcp-bic.h',
+        'model/tcp-yeah.h',
+        'model/tcp-illinois.h',
+        'model/tcp-htcp.h',
         'model/tcp-socket-base.h',
         'model/tcp-tx-buffer.h',
         'model/tcp-rx-buffer.h',
diff -Naur ns-3.25/src/internet-apps/bindings/modulegen__gcc_ILP32.py ns-3.26/src/internet-apps/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/internet-apps/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.245247651 -0700
+++ ns-3.26/src/internet-apps/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.545388413 -0700
@@ -76,6 +76,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -88,6 +90,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -136,10 +140,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -148,6 +152,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -192,6 +198,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -244,6 +254,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -374,11 +386,11 @@
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -399,6 +411,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -862,6 +876,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -875,6 +894,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
@@ -1807,23 +1830,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1938,6 +1961,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -1964,10 +1992,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -1989,6 +2017,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2004,6 +2036,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3V4PingHelper_methods(root_module, cls):
@@ -2136,6 +2172,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -2471,6 +2512,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -2496,6 +2542,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -2644,6 +2695,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -2671,11 +2726,6 @@
                    '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', 
@@ -2738,52 +2788,6 @@
                    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')])
@@ -2968,6 +2972,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -3820,6 +3870,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -4385,16 +4499,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -4422,35 +4551,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -4739,6 +4863,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/internet-apps/bindings/modulegen__gcc_LP64.py ns-3.26/src/internet-apps/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/internet-apps/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.248247628 -0700
+++ ns-3.26/src/internet-apps/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.548388391 -0700
@@ -76,6 +76,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -88,6 +90,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -136,10 +140,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -148,6 +152,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -192,6 +198,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -244,6 +254,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -374,11 +386,11 @@
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -399,6 +411,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -862,6 +876,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -875,6 +894,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
@@ -1807,23 +1830,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1938,6 +1961,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -1964,10 +1992,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -1989,6 +2017,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2004,6 +2036,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3V4PingHelper_methods(root_module, cls):
@@ -2136,6 +2172,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -2471,6 +2512,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -2496,6 +2542,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -2644,6 +2695,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -2671,11 +2726,6 @@
                    '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', 
@@ -2738,52 +2788,6 @@
                    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')])
@@ -2968,6 +2972,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -3820,6 +3870,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -4385,16 +4499,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -4422,35 +4551,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -4739,6 +4863,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/internet-apps/helper/ping6-helper.h ns-3.26/src/internet-apps/helper/ping6-helper.h
--- ns-3.25/src/internet-apps/helper/ping6-helper.h	2016-10-03 20:57:08.250247613 -0700
+++ ns-3.26/src/internet-apps/helper/ping6-helper.h	2016-10-03 19:49:01.550388376 -0700
@@ -33,7 +33,6 @@
 
 /**
  * \ingroup ping6
- * \class Ping6Helper
  * \brief Ping6 application helper.
  */
 class Ping6Helper
diff -Naur ns-3.25/src/internet-apps/helper/radvd-helper.h ns-3.26/src/internet-apps/helper/radvd-helper.h
--- ns-3.25/src/internet-apps/helper/radvd-helper.h	2016-10-03 20:57:08.250247613 -0700
+++ ns-3.26/src/internet-apps/helper/radvd-helper.h	2016-10-03 19:49:01.550388376 -0700
@@ -36,7 +36,6 @@
 
 /**
  * \ingroup radvd
- * \class RadvdHelper
  * \brief Radvd application helper.
  */
 class RadvdHelper
diff -Naur ns-3.25/src/internet-apps/model/ping6.h ns-3.26/src/internet-apps/model/ping6.h
--- ns-3.25/src/internet-apps/model/ping6.h	2016-10-03 20:57:08.251247605 -0700
+++ ns-3.26/src/internet-apps/model/ping6.h	2016-10-03 19:49:01.551388368 -0700
@@ -39,7 +39,6 @@
 
 /**
  * \ingroup ping6
- * \class Ping6
  * \brief A ping6 application.
  */
 class Ping6 : public Application
diff -Naur ns-3.25/src/internet-apps/model/radvd.h ns-3.26/src/internet-apps/model/radvd.h
--- ns-3.25/src/internet-apps/model/radvd.h	2016-10-03 20:57:08.253247589 -0700
+++ ns-3.26/src/internet-apps/model/radvd.h	2016-10-03 19:49:01.553388353 -0700
@@ -41,7 +41,6 @@
 
 /**
  * \ingroup radvd
- * \class Radvd
  * \brief Router advertisement daemon.
  */
 class Radvd : public Application
diff -Naur ns-3.25/src/internet-apps/model/radvd-interface.h ns-3.26/src/internet-apps/model/radvd-interface.h
--- ns-3.25/src/internet-apps/model/radvd-interface.h	2016-10-03 20:57:08.252247597 -0700
+++ ns-3.26/src/internet-apps/model/radvd-interface.h	2016-10-03 19:49:01.552388361 -0700
@@ -31,7 +31,6 @@
 
 /**
  * \ingroup radvd
- * \class RadvdInterface
  * \brief Radvd interface configuration.
  */
 class RadvdInterface : public SimpleRefCount<RadvdInterface>
diff -Naur ns-3.25/src/internet-apps/model/radvd-prefix.h ns-3.26/src/internet-apps/model/radvd-prefix.h
--- ns-3.25/src/internet-apps/model/radvd-prefix.h	2016-10-03 20:57:08.253247589 -0700
+++ ns-3.26/src/internet-apps/model/radvd-prefix.h	2016-10-03 19:49:01.553388353 -0700
@@ -31,7 +31,6 @@
 
 /**
  * \ingroup radvd
- * \class RadvdPrefix
  * \brief Router prefix for radvd application.
  */
 class RadvdPrefix : public SimpleRefCount<RadvdPrefix>
diff -Naur ns-3.25/src/internet-apps/model/v4ping.cc ns-3.26/src/internet-apps/model/v4ping.cc
--- ns-3.25/src/internet-apps/model/v4ping.cc	2016-10-03 20:57:08.254247581 -0700
+++ ns-3.26/src/internet-apps/model/v4ping.cc	2016-10-03 19:49:01.554388346 -0700
@@ -84,6 +84,12 @@
 V4Ping::DoDispose (void)
 {
   NS_LOG_FUNCTION (this);
+
+  if (m_next.IsRunning ())
+    {
+      StopApplication ();
+    }
+
   m_socket = 0;
   Application::DoDispose ();
 }
@@ -261,8 +267,15 @@
 V4Ping::StopApplication (void)
 {
   NS_LOG_FUNCTION (this);
-  m_next.Cancel ();
-  m_socket->Close ();
+
+  if (m_next.IsRunning ())
+    {
+      m_next.Cancel ();
+    }
+  if (m_socket)
+    {
+      m_socket->Close ();
+    }
 
   if (m_verbose)
     {
diff -Naur ns-3.25/src/lr-wpan/bindings/modulegen__gcc_ILP32.py ns-3.26/src/lr-wpan/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/lr-wpan/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.417246312 -0700
+++ ns-3.26/src/lr-wpan/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.728387049 -0700
@@ -140,8 +140,8 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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]
@@ -150,6 +150,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -164,6 +166,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -256,6 +260,10 @@
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## double.h (module 'core'): ns3::DoubleValue [class]
     module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -330,6 +338,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -475,6 +485,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
     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&')
@@ -581,6 +594,8 @@
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -957,6 +972,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2517,10 +2537,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -2866,23 +2886,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2997,6 +3017,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -3018,10 +3043,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -3043,6 +3068,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -3058,6 +3087,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -3618,6 +3651,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -4452,6 +4490,70 @@
                    [param('double const &', 'value')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -5583,16 +5685,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -5620,35 +5737,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -6048,6 +6160,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/lr-wpan/bindings/modulegen__gcc_LP64.py ns-3.26/src/lr-wpan/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/lr-wpan/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.420246289 -0700
+++ ns-3.26/src/lr-wpan/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.733387012 -0700
@@ -140,8 +140,8 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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]
@@ -150,6 +150,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -164,6 +166,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -256,6 +260,10 @@
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## double.h (module 'core'): ns3::DoubleValue [class]
     module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -330,6 +338,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -475,6 +485,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
     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&')
@@ -581,6 +594,8 @@
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -957,6 +972,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2517,10 +2537,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -2866,23 +2886,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2997,6 +3017,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -3018,10 +3043,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -3043,6 +3068,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -3058,6 +3087,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -3618,6 +3651,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -4452,6 +4490,70 @@
                    [param('double const &', 'value')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -5583,16 +5685,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -5620,35 +5737,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -6048,6 +6160,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/lr-wpan/examples/lr-wpan-phy-test.cc ns-3.26/src/lr-wpan/examples/lr-wpan-phy-test.cc
--- ns-3.25/src/lr-wpan/examples/lr-wpan-phy-test.cc	2016-10-03 20:57:08.425246250 -0700
+++ ns-3.26/src/lr-wpan/examples/lr-wpan-phy-test.cc	2016-10-03 19:49:01.738386975 -0700
@@ -19,6 +19,7 @@
  */
 #include <ns3/log.h>
 #include <ns3/test.h>
+#include <ns3/command-line.h>
 #include <ns3/packet.h>
 #include <ns3/lr-wpan-phy.h>
 #include <ns3/lr-wpan-mac.h>
@@ -54,6 +55,9 @@
 
 int main (int argc, char *argv[])
 {
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
   LogComponentEnableAll (LOG_PREFIX_FUNC);
   LogComponentEnable ("LrWpanPhy", LOG_LEVEL_ALL);
   LogComponentEnable ("SingleModelSpectrumChannel", LOG_LEVEL_ALL);
diff -Naur ns-3.25/src/lr-wpan/helper/lr-wpan-helper.cc ns-3.26/src/lr-wpan/helper/lr-wpan-helper.cc
--- ns-3.25/src/lr-wpan/helper/lr-wpan-helper.cc	2016-10-03 20:57:08.426246242 -0700
+++ ns-3.26/src/lr-wpan/helper/lr-wpan-helper.cc	2016-10-03 19:49:01.739386967 -0700
@@ -367,13 +367,13 @@
       // The Mac and Phy objects have the trace sources for these
       //
 
-      asciiTraceHelper.HookDefaultReceiveSinkWithoutContext<LrWpanNetDevice> (device, "MacRx", theStream);
+      asciiTraceHelper.HookDefaultReceiveSinkWithoutContext<LrWpanMac> (device->GetMac (), "MacRx", theStream);
 
       device->GetMac ()->TraceConnectWithoutContext ("MacTx", MakeBoundCallback (&AsciiLrWpanMacTransmitSinkWithoutContext, theStream));
 
-      asciiTraceHelper.HookDefaultEnqueueSinkWithoutContext<LrWpanNetDevice> (device, "MacTxEnqueue", theStream);
-      asciiTraceHelper.HookDefaultDequeueSinkWithoutContext<LrWpanNetDevice> (device, "MacTxDequeue", theStream);
-      asciiTraceHelper.HookDefaultDropSinkWithoutContext<LrWpanNetDevice> (device, "MacTxDrop", theStream);
+      asciiTraceHelper.HookDefaultEnqueueSinkWithoutContext<LrWpanMac> (device->GetMac (), "MacTxEnqueue", theStream);
+      asciiTraceHelper.HookDefaultDequeueSinkWithoutContext<LrWpanMac> (device->GetMac (), "MacTxDequeue", theStream);
+      asciiTraceHelper.HookDefaultDropSinkWithoutContext<LrWpanMac> (device->GetMac (), "MacTxDrop", theStream);
 
       return;
     }
diff -Naur ns-3.25/src/lte/bindings/modulegen__gcc_ILP32.py ns-3.26/src/lte/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/lte/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.457246002 -0700
+++ ns-3.26/src/lte/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.769386744 -0700
@@ -668,6 +668,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], import_from_module='ns.core')
     ## ff-mac-common.h (module 'lte'): ns3::SpsConfig_s [struct]
     module.add_class('SpsConfig_s')
     ## ff-mac-common.h (module 'lte'): ns3::SrConfig_s [struct]
@@ -692,6 +694,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -870,10 +874,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -882,6 +886,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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'])
     ## spectrum-interference.h (module 'spectrum'): ns3::SpectrumInterference [class]
@@ -966,6 +972,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -1206,6 +1216,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -1612,6 +1624,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_internal(module):
     root_module = module.get_root()
@@ -1970,11 +1985,11 @@
     register_Ns3SimpleRefCount__Ns3X2CellInfo_Ns3Empty_Ns3DefaultDeleter__lt__ns3X2CellInfo__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::X2CellInfo, ns3::empty, ns3::DefaultDeleter<ns3::X2CellInfo> >'])
     register_Ns3SimpleRefCount__Ns3X2IfaceInfo_Ns3Empty_Ns3DefaultDeleter__lt__ns3X2IfaceInfo__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::X2IfaceInfo, ns3::empty, ns3::DefaultDeleter<ns3::X2IfaceInfo> >'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     register_Ns3SocketSetDontFragmentTag_methods(root_module, root_module['ns3::SocketSetDontFragmentTag'])
     register_Ns3SpectrumInterference_methods(root_module, root_module['ns3::SpectrumInterference'])
     register_Ns3SpectrumModel_methods(root_module, root_module['ns3::SpectrumModel'])
@@ -2014,6 +2029,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -2424,6 +2441,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -4707,6 +4729,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -4720,6 +4747,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
@@ -8516,23 +8547,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -8647,6 +8678,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -8673,10 +8709,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -8698,6 +8734,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -8713,6 +8753,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3UeCapabilities_s_methods(root_module, cls):
@@ -10008,6 +10052,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -10674,6 +10723,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -10699,6 +10753,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -10847,6 +10906,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -10874,11 +10937,6 @@
                    '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', 
@@ -10941,52 +10999,6 @@
                    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')])
@@ -11171,6 +11183,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -12949,6 +13007,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -18137,16 +18259,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -18174,35 +18311,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -19068,6 +19200,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/lte/bindings/modulegen__gcc_LP64.py ns-3.26/src/lte/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/lte/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.473245877 -0700
+++ ns-3.26/src/lte/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.785386625 -0700
@@ -668,6 +668,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], import_from_module='ns.core')
     ## ff-mac-common.h (module 'lte'): ns3::SpsConfig_s [struct]
     module.add_class('SpsConfig_s')
     ## ff-mac-common.h (module 'lte'): ns3::SrConfig_s [struct]
@@ -692,6 +694,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -870,10 +874,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -882,6 +886,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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'])
     ## spectrum-interference.h (module 'spectrum'): ns3::SpectrumInterference [class]
@@ -966,6 +972,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -1206,6 +1216,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -1612,6 +1624,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_internal(module):
     root_module = module.get_root()
@@ -1970,11 +1985,11 @@
     register_Ns3SimpleRefCount__Ns3X2CellInfo_Ns3Empty_Ns3DefaultDeleter__lt__ns3X2CellInfo__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::X2CellInfo, ns3::empty, ns3::DefaultDeleter<ns3::X2CellInfo> >'])
     register_Ns3SimpleRefCount__Ns3X2IfaceInfo_Ns3Empty_Ns3DefaultDeleter__lt__ns3X2IfaceInfo__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::X2IfaceInfo, ns3::empty, ns3::DefaultDeleter<ns3::X2IfaceInfo> >'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     register_Ns3SocketSetDontFragmentTag_methods(root_module, root_module['ns3::SocketSetDontFragmentTag'])
     register_Ns3SpectrumInterference_methods(root_module, root_module['ns3::SpectrumInterference'])
     register_Ns3SpectrumModel_methods(root_module, root_module['ns3::SpectrumModel'])
@@ -2014,6 +2029,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -2424,6 +2441,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -4707,6 +4729,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -4720,6 +4747,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
@@ -8516,23 +8547,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -8647,6 +8678,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -8673,10 +8709,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -8698,6 +8734,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -8713,6 +8753,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3UeCapabilities_s_methods(root_module, cls):
@@ -10008,6 +10052,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -10674,6 +10723,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -10699,6 +10753,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -10847,6 +10906,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -10874,11 +10937,6 @@
                    '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', 
@@ -10941,52 +10999,6 @@
                    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')])
@@ -11171,6 +11183,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -12949,6 +13007,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -18137,16 +18259,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -18174,35 +18311,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -19068,6 +19200,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/lte/examples/lena-uplink-power-control.cc ns-3.26/src/lte/examples/lena-uplink-power-control.cc
--- ns-3.25/src/lte/examples/lena-uplink-power-control.cc	2016-10-03 20:57:08.612244798 -0700
+++ ns-3.26/src/lte/examples/lena-uplink-power-control.cc	2016-10-03 19:49:01.924385589 -0700
@@ -45,6 +45,9 @@
   Config::SetDefault ("ns3::LteUePowerControl::AccumulationEnabled", BooleanValue (true));
   Config::SetDefault ("ns3::LteUePowerControl::Alpha", DoubleValue (1.0));
 
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
   Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
 
   uint8_t bandwidth = 25;
diff -Naur ns-3.25/src/lte/model/cqa-ff-mac-scheduler.cc ns-3.26/src/lte/model/cqa-ff-mac-scheduler.cc
--- ns-3.25/src/lte/model/cqa-ff-mac-scheduler.cc	2016-10-03 20:57:08.632244643 -0700
+++ ns-3.26/src/lte/model/cqa-ff-mac-scheduler.cc	2016-10-03 19:49:01.944385440 -0700
@@ -1833,7 +1833,7 @@
     {
       // take the average SINR value among the available
       double sinrSum = 0;
-      int sinrNum = 0;
+      unsigned int sinrNum = 0;
       for (uint32_t i = 0; i < m_cschedCellConfig.m_ulBandwidth; i++)
         {
           double sinr = (*itCqi).second.at (i);
diff -Naur ns-3.25/src/lte/model/epc-enb-application.cc ns-3.26/src/lte/model/epc-enb-application.cc
--- ns-3.25/src/lte/model/epc-enb-application.cc	2016-10-03 20:57:08.633244635 -0700
+++ ns-3.26/src/lte/model/epc-enb-application.cc	2016-10-03 19:49:01.945385432 -0700
@@ -243,11 +243,6 @@
   NS_ASSERT (socket == m_lteSocket);
   Ptr<Packet> packet = socket->Recv ();
 
-  /// \internal
-  /// Workaround for \bugid{231}
-  SocketAddressTag satag;
-  packet->RemovePacketTag (satag);
-
   EpsBearerTag tag;
   bool found = packet->RemovePacketTag (tag);
   NS_ASSERT (found);
@@ -280,11 +275,6 @@
   std::map<uint32_t, EpsFlowId_t>::iterator it = m_teidRbidMap.find (teid);
   NS_ASSERT (it != m_teidRbidMap.end ());
 
-  /// \internal
-  /// Workaround for \bugid{231}
-  SocketAddressTag tag;
-  packet->RemovePacketTag (tag);
-  
   SendToLteSocket (packet, it->second.m_rnti, it->second.m_bid);
 }
 
diff -Naur ns-3.25/src/lte/model/epc-sgw-pgw-application.cc ns-3.26/src/lte/model/epc-sgw-pgw-application.cc
--- ns-3.25/src/lte/model/epc-sgw-pgw-application.cc	2016-10-03 20:57:08.637244604 -0700
+++ ns-3.26/src/lte/model/epc-sgw-pgw-application.cc	2016-10-03 19:49:01.950385395 -0700
@@ -183,11 +183,6 @@
   packet->RemoveHeader (gtpu);
   uint32_t teid = gtpu.GetTeid ();
 
-  /// \internal
-  /// Workaround for \bugid{231}
-  SocketAddressTag tag;
-  packet->RemovePacketTag (tag);
-
   SendToTunDevice (packet, teid);
 }
 
diff -Naur ns-3.25/src/lte/model/fdbet-ff-mac-scheduler.cc ns-3.26/src/lte/model/fdbet-ff-mac-scheduler.cc
--- ns-3.25/src/lte/model/fdbet-ff-mac-scheduler.cc	2016-10-03 20:57:08.974241988 -0700
+++ ns-3.26/src/lte/model/fdbet-ff-mac-scheduler.cc	2016-10-03 19:49:02.285382898 -0700
@@ -1401,7 +1401,7 @@
     {
       // take the average SINR value among the available
       double sinrSum = 0;
-      int sinrNum = 0;
+      unsigned int sinrNum = 0;
       for (uint32_t i = 0; i < m_cschedCellConfig.m_ulBandwidth; i++)
         {
           double sinr = (*itCqi).second.at (i);
diff -Naur ns-3.25/src/lte/model/fdmt-ff-mac-scheduler.cc ns-3.26/src/lte/model/fdmt-ff-mac-scheduler.cc
--- ns-3.25/src/lte/model/fdmt-ff-mac-scheduler.cc	2016-10-03 20:57:08.976241973 -0700
+++ ns-3.26/src/lte/model/fdmt-ff-mac-scheduler.cc	2016-10-03 19:49:02.287382884 -0700
@@ -1380,7 +1380,7 @@
     {
       // take the average SINR value among the available
       double sinrSum = 0;
-      int sinrNum = 0;
+      unsigned int sinrNum = 0;
       for (uint32_t i = 0; i < m_cschedCellConfig.m_ulBandwidth; i++)
         {
           double sinr = (*itCqi).second.at (i);
diff -Naur ns-3.25/src/lte/model/fdtbfq-ff-mac-scheduler.cc ns-3.26/src/lte/model/fdtbfq-ff-mac-scheduler.cc
--- ns-3.25/src/lte/model/fdtbfq-ff-mac-scheduler.cc	2016-10-03 20:57:08.978241957 -0700
+++ ns-3.26/src/lte/model/fdtbfq-ff-mac-scheduler.cc	2016-10-03 19:49:02.289382869 -0700
@@ -1687,7 +1687,7 @@
     {
       // take the average SINR value among the available
       double sinrSum = 0;
-      int sinrNum = 0;
+      unsigned int sinrNum = 0;
       for (uint32_t i = 0; i < m_cschedCellConfig.m_ulBandwidth; i++)
         {
           double sinr = (*itCqi).second.at (i);
diff -Naur ns-3.25/src/lte/model/lte-ffr-enhanced-algorithm.cc ns-3.26/src/lte/model/lte-ffr-enhanced-algorithm.cc
--- ns-3.25/src/lte/model/lte-ffr-enhanced-algorithm.cc	2016-10-03 20:57:09.003241763 -0700
+++ ns-3.26/src/lte/model/lte-ffr-enhanced-algorithm.cc	2016-10-03 19:49:02.314382683 -0700
@@ -771,7 +771,7 @@
     {
       // take the average SINR value among the available
       double sinrSum = 0;
-      int sinrNum = 0;
+      unsigned int sinrNum = 0;
       for (uint32_t i = 0; i < m_ulBandwidth; i++)
         {
           double sinr = (*itCqi).second.at (i);
diff -Naur ns-3.25/src/lte/model/lte-pdcp.cc ns-3.26/src/lte/model/lte-pdcp.cc
--- ns-3.25/src/lte/model/lte-pdcp.cc	2016-10-03 20:57:08.170248236 -0700
+++ ns-3.26/src/lte/model/lte-pdcp.cc	2016-10-03 19:49:01.480388898 -0700
@@ -188,7 +188,7 @@
 
   // Sender timestamp
   PdcpTag pdcpTag (Simulator::Now ());
-  p->AddByteTag (pdcpTag);
+  p->AddPacketTag (pdcpTag);
   m_txPdu (m_rnti, m_lcid, p->GetSize ());
 
   LteRlcSapProvider::TransmitPdcpPduParameters params;
@@ -207,10 +207,9 @@
   // Receiver timestamp
   PdcpTag pdcpTag;
   Time delay;
-  if (p->FindFirstMatchingByteTag (pdcpTag))
-    {
-      delay = Simulator::Now() - pdcpTag.GetSenderTimestamp ();
-    }
+  NS_ASSERT_MSG (p->PeekPacketTag (pdcpTag), "PdcpTag is missing");
+  p->RemovePacketTag (pdcpTag);
+  delay = Simulator::Now() - pdcpTag.GetSenderTimestamp ();
   m_rxPdu(m_rnti, m_lcid, p->GetSize (), delay.GetNanoSeconds ());
 
   LtePdcpHeader pdcpHeader;
diff -Naur ns-3.25/src/lte/model/lte-rlc-am.cc ns-3.26/src/lte/model/lte-rlc-am.cc
--- ns-3.25/src/lte/model/lte-rlc-am.cc	2016-10-03 20:57:08.176248189 -0700
+++ ns-3.26/src/lte/model/lte-rlc-am.cc	2016-10-03 19:49:01.486388853 -0700
@@ -256,6 +256,12 @@
       NS_LOG_LOGIC ("RLC header: " << rlcAmHeader);
       packet->AddHeader (rlcAmHeader);
 
+      // Sender timestamp
+      RlcTag rlcTag (Simulator::Now ());
+      NS_ASSERT_MSG (!packet->PeekPacketTag (rlcTag), "RlcTag is already present");
+      packet->AddPacketTag (rlcTag);
+      m_txPdu (m_rnti, m_lcid, packet->GetSize ());
+
       // Send RLC PDU to MAC layer
       LteMacSapProvider::TransmitPduParameters params;
       params.pdu = packet;
@@ -336,7 +342,13 @@
 
                   packet->AddHeader (rlcAmHeader);
                   NS_LOG_LOGIC ("new AM RLC header: " << rlcAmHeader);
-                  
+
+                  // Sender timestamp
+                  RlcTag rlcTag (Simulator::Now ());
+                  NS_ASSERT_MSG (packet->PeekPacketTag (rlcTag), "RlcTag is missing");
+                  packet->ReplacePacketTag (rlcTag);
+                  m_txPdu (m_rnti, m_lcid, packet->GetSize ());
+
                   // Send RLC PDU to MAC layer
                   LteMacSapProvider::TransmitPduParameters params;
                   params.pdu = packet;
@@ -615,7 +627,8 @@
 
   // FIRST SEGMENT
   LteRlcSduStatusTag tag;
-  (*it)->RemovePacketTag (tag);
+  NS_ASSERT_MSG ((*it)->PeekPacketTag (tag), "LteRlcSduStatusTag is missing");
+  (*it)->PeekPacketTag (tag);
   if ( (tag.GetStatus () == LteRlcSduStatusTag::FULL_SDU) ||
        (tag.GetStatus () == LteRlcSduStatusTag::FIRST_SEGMENT)
      )
@@ -626,20 +639,27 @@
     {
       framingInfo |= LteRlcAmHeader::NO_FIRST_BYTE;
     }
-  (*it)->AddPacketTag (tag);
 
   // Add all SDUs (in DataField) to the Packet
   while (it < dataField.end ())
     {
       NS_LOG_LOGIC ("Adding SDU/segment to packet, length = " << (*it)->GetSize ());
 
-      packet->AddAtEnd (*it);
+      NS_ASSERT_MSG ((*it)->PeekPacketTag (tag), "LteRlcSduStatusTag is missing");
+      (*it)->RemovePacketTag (tag);
+      if (packet->GetSize () > 0)
+        {
+          packet->AddAtEnd (*it);
+        }
+      else
+        {
+          packet = (*it);
+        }
       it++;
     }
 
   // LAST SEGMENT (Note: There could be only one and be the first one)
   it--;
-  (*it)->RemovePacketTag (tag);
   if ( (tag.GetStatus () == LteRlcSduStatusTag::FULL_SDU) ||
         (tag.GetStatus () == LteRlcSduStatusTag::LAST_SEGMENT) )
     {
@@ -649,7 +669,6 @@
     {
       framingInfo |= LteRlcAmHeader::NO_LAST_BYTE;
     }
-  (*it)->AddPacketTag (tag);
 
   // Set the FramingInfo flag after the calculation
   rlcAmHeader.SetFramingInfo (framingInfo);
@@ -707,7 +726,7 @@
 
   // Sender timestamp
   RlcTag rlcTag (Simulator::Now ());
-  packet->AddByteTag (rlcTag);
+  packet->ReplacePacketTag (rlcTag);
   m_txPdu (m_rnti, m_lcid, packet->GetSize ());
 
   // Send RLC PDU to MAC layer
@@ -736,10 +755,9 @@
   // Receiver timestamp
   RlcTag rlcTag;
   Time delay;
-  if (p->FindFirstMatchingByteTag (rlcTag))
-    {
-      delay = Simulator::Now() - rlcTag.GetSenderTimestamp ();
-    }
+  NS_ASSERT_MSG (p->PeekPacketTag (rlcTag), "RlcTag is missing");
+  p->RemovePacketTag (rlcTag);
+  delay = Simulator::Now() - rlcTag.GetSenderTimestamp ();
   m_rxPdu (m_rnti, m_lcid, p->GetSize (), delay.GetNanoSeconds ());
 
   // Get RLC header parameters
diff -Naur ns-3.25/src/lte/model/lte-rlc.cc ns-3.26/src/lte/model/lte-rlc.cc
--- ns-3.25/src/lte/model/lte-rlc.cc	2016-10-03 20:57:08.183248135 -0700
+++ ns-3.26/src/lte/model/lte-rlc.cc	2016-10-03 19:49:01.493388800 -0700
@@ -219,10 +219,9 @@
   // RLC Performance evaluation
   RlcTag rlcTag;
   Time delay;
-  if (p->FindFirstMatchingByteTag(rlcTag))
-    {
-      delay = Simulator::Now() - rlcTag.GetSenderTimestamp ();
-    }
+  NS_ASSERT_MSG (p->PeekPacketTag (rlcTag), "RlcTag is missing");
+  p->RemovePacketTag (rlcTag);
+  delay = Simulator::Now() - rlcTag.GetSenderTimestamp ();
   NS_LOG_LOGIC (" RNTI=" << m_rnti 
                 << " LCID=" << (uint32_t) m_lcid 
                 << " size=" << p->GetSize () 
@@ -243,7 +242,7 @@
 
   // RLC Performance evaluation
   RlcTag tag (Simulator::Now());
-  params.pdu->AddByteTag (tag);
+  params.pdu->AddPacketTag (tag);
   NS_LOG_LOGIC (" RNTI=" << m_rnti 
                 << " LCID=" << (uint32_t) m_lcid 
                 << " size=" << bytes);
diff -Naur ns-3.25/src/lte/model/lte-rlc-tm.cc ns-3.26/src/lte/model/lte-rlc-tm.cc
--- ns-3.25/src/lte/model/lte-rlc-tm.cc	2016-10-03 20:57:08.180248158 -0700
+++ ns-3.26/src/lte/model/lte-rlc-tm.cc	2016-10-03 19:49:01.490388823 -0700
@@ -140,7 +140,7 @@
  
   // Sender timestamp
   RlcTag rlcTag (Simulator::Now ());
-  packet->AddByteTag (rlcTag);
+  packet->ReplacePacketTag (rlcTag);
   m_txPdu (m_rnti, m_lcid, packet->GetSize ());
 
   // Send RLC PDU to MAC layer
@@ -174,10 +174,9 @@
   // Receiver timestamp
   RlcTag rlcTag;
   Time delay;
-  if (p->FindFirstMatchingByteTag (rlcTag))
-    {
-      delay = Simulator::Now() - rlcTag.GetSenderTimestamp ();
-    }
+  NS_ASSERT_MSG (p->PeekPacketTag (rlcTag), "RlcTag is missing");
+  p->RemovePacketTag (rlcTag);
+  delay = Simulator::Now() - rlcTag.GetSenderTimestamp ();
   m_rxPdu (m_rnti, m_lcid, p->GetSize (), delay.GetNanoSeconds ());
 
   // 5.1.1.2 Receive operations 
@@ -198,6 +197,7 @@
   if (! m_txBuffer.empty ())
     {
       RlcTag holTimeTag;
+      NS_ASSERT_MSG (m_txBuffer.front ()->PeekPacketTag (holTimeTag), "RlcTag is missing");
       m_txBuffer.front ()->PeekPacketTag (holTimeTag);
       holDelay = Simulator::Now () - holTimeTag.GetSenderTimestamp ();
 
diff -Naur ns-3.25/src/lte/model/lte-rlc-um.cc ns-3.26/src/lte/model/lte-rlc-um.cc
--- ns-3.25/src/lte/model/lte-rlc-um.cc	2016-10-03 20:57:08.182248143 -0700
+++ ns-3.26/src/lte/model/lte-rlc-um.cc	2016-10-03 19:49:01.492388808 -0700
@@ -331,7 +331,8 @@
 
   // FIRST SEGMENT
   LteRlcSduStatusTag tag;
-  (*it)->RemovePacketTag (tag);
+  NS_ASSERT_MSG ((*it)->PeekPacketTag (tag), "LteRlcSduStatusTag is missing");
+  (*it)->PeekPacketTag (tag);
   if ( (tag.GetStatus () == LteRlcSduStatusTag::FULL_SDU) ||
         (tag.GetStatus () == LteRlcSduStatusTag::FIRST_SEGMENT) )
     {
@@ -341,19 +342,26 @@
     {
       framingInfo |= LteRlcHeader::NO_FIRST_BYTE;
     }
-  (*it)->AddPacketTag (tag);
 
   while (it < dataField.end ())
     {
       NS_LOG_LOGIC ("Adding SDU/segment to packet, length = " << (*it)->GetSize ());
 
-      packet->AddAtEnd (*it);
+      NS_ASSERT_MSG ((*it)->PeekPacketTag (tag), "LteRlcSduStatusTag is missing");
+      (*it)->RemovePacketTag (tag);
+      if (packet->GetSize () > 0)
+        {
+          packet->AddAtEnd (*it);
+        }
+      else
+        {
+          packet = (*it);
+        }
       it++;
     }
 
   // LAST SEGMENT (Note: There could be only one and be the first one)
   it--;
-  (*it)->RemovePacketTag (tag);
   if ( (tag.GetStatus () == LteRlcSduStatusTag::FULL_SDU) ||
         (tag.GetStatus () == LteRlcSduStatusTag::LAST_SEGMENT) )
     {
@@ -363,7 +371,6 @@
     {
       framingInfo |= LteRlcHeader::NO_LAST_BYTE;
     }
-  (*it)->AddPacketTag (tag);
 
   rlcHeader.SetFramingInfo (framingInfo);
 
@@ -372,7 +379,7 @@
 
   // Sender timestamp
   RlcTag rlcTag (Simulator::Now ());
-  packet->AddByteTag (rlcTag);
+  packet->ReplacePacketTag (rlcTag);
   m_txPdu (m_rnti, m_lcid, packet->GetSize ());
 
   // Send RLC PDU to MAC layer
@@ -406,10 +413,9 @@
   // Receiver timestamp
   RlcTag rlcTag;
   Time delay;
-  if (p->FindFirstMatchingByteTag (rlcTag))
-    {
-      delay = Simulator::Now() - rlcTag.GetSenderTimestamp ();
-    }
+  NS_ASSERT_MSG (p->PeekPacketTag (rlcTag), "RlcTag is missing");
+  p->RemovePacketTag (rlcTag);
+  delay = Simulator::Now() - rlcTag.GetSenderTimestamp ();
   m_rxPdu (m_rnti, m_lcid, p->GetSize (), delay.GetNanoSeconds ());
 
   // 5.1.2.2 Receive operations
@@ -1117,6 +1123,7 @@
   if (! m_txBuffer.empty ())
     {
       RlcTag holTimeTag;
+      NS_ASSERT_MSG (m_txBuffer.front ()->PeekPacketTag (holTimeTag), "RlcTag is missing");
       m_txBuffer.front ()->PeekPacketTag (holTimeTag);
       holDelay = Simulator::Now () - holTimeTag.GetSenderTimestamp ();
 
diff -Naur ns-3.25/src/lte/model/pf-ff-mac-scheduler.cc ns-3.26/src/lte/model/pf-ff-mac-scheduler.cc
--- ns-3.25/src/lte/model/pf-ff-mac-scheduler.cc	2016-10-03 20:57:08.223247823 -0700
+++ ns-3.26/src/lte/model/pf-ff-mac-scheduler.cc	2016-10-03 19:49:01.525388562 -0700
@@ -1482,7 +1482,7 @@
     {
       // take the average SINR value among the available
       double sinrSum = 0;
-      int sinrNum = 0;
+      unsigned int sinrNum = 0;
       for (uint32_t i = 0; i < m_cschedCellConfig.m_ulBandwidth; i++)
         {
           double sinr = (*itCqi).second.at (i);
diff -Naur ns-3.25/src/lte/model/pss-ff-mac-scheduler.cc ns-3.26/src/lte/model/pss-ff-mac-scheduler.cc
--- ns-3.25/src/lte/model/pss-ff-mac-scheduler.cc	2016-10-03 20:57:08.225247807 -0700
+++ ns-3.26/src/lte/model/pss-ff-mac-scheduler.cc	2016-10-03 19:49:01.527388547 -0700
@@ -1787,7 +1787,7 @@
     {
       // take the average SINR value among the available
       double sinrSum = 0;
-      int sinrNum = 0;
+      unsigned int sinrNum = 0;
       for (uint32_t i = 0; i < m_cschedCellConfig.m_ulBandwidth; i++)
         {
           double sinr = (*itCqi).second.at (i);
diff -Naur ns-3.25/src/lte/model/rr-ff-mac-scheduler.cc ns-3.26/src/lte/model/rr-ff-mac-scheduler.cc
--- ns-3.25/src/lte/model/rr-ff-mac-scheduler.cc	2016-10-03 20:57:08.230247768 -0700
+++ ns-3.26/src/lte/model/rr-ff-mac-scheduler.cc	2016-10-03 19:49:01.532388510 -0700
@@ -1059,10 +1059,18 @@
   // served last scheduling trigger event
   if (m_nextRntiDl != 0)
     {
+      NS_LOG_DEBUG ("Start from the successive of " << (uint16_t) m_nextRntiDl);
       for (it = m_rlcBufferReq.begin (); it != m_rlcBufferReq.end (); it++)
         {
           if ((*it).m_rnti == m_nextRntiDl)
             {
+              // select the next RNTI to starting
+              it++;
+              if (it == m_rlcBufferReq.end ())
+              {
+                it = m_rlcBufferReq.begin ();
+              }
+              m_nextRntiDl = (*it).m_rnti;
               break;
             }
         }
diff -Naur ns-3.25/src/lte/model/tdbet-ff-mac-scheduler.cc ns-3.26/src/lte/model/tdbet-ff-mac-scheduler.cc
--- ns-3.25/src/lte/model/tdbet-ff-mac-scheduler.cc	2016-10-03 20:57:08.232247753 -0700
+++ ns-3.26/src/lte/model/tdbet-ff-mac-scheduler.cc	2016-10-03 19:49:01.534388495 -0700
@@ -1323,7 +1323,7 @@
     {
       // take the average SINR value among the available
       double sinrSum = 0;
-      int sinrNum = 0;
+      unsigned int sinrNum = 0;
       for (uint32_t i = 0; i < m_cschedCellConfig.m_ulBandwidth; i++)
         {
           double sinr = (*itCqi).second.at (i);
diff -Naur ns-3.25/src/lte/model/tdmt-ff-mac-scheduler.cc ns-3.26/src/lte/model/tdmt-ff-mac-scheduler.cc
--- ns-3.25/src/lte/model/tdmt-ff-mac-scheduler.cc	2016-10-03 20:57:08.233247745 -0700
+++ ns-3.26/src/lte/model/tdmt-ff-mac-scheduler.cc	2016-10-03 19:49:01.535388488 -0700
@@ -1320,7 +1320,7 @@
     {
       // take the average SINR value among the available
       double sinrSum = 0;
-      int sinrNum = 0;
+      unsigned int sinrNum = 0;
       for (uint32_t i = 0; i < m_cschedCellConfig.m_ulBandwidth; i++)
         {
           double sinr = (*itCqi).second.at (i);
diff -Naur ns-3.25/src/lte/model/tdtbfq-ff-mac-scheduler.cc ns-3.26/src/lte/model/tdtbfq-ff-mac-scheduler.cc
--- ns-3.25/src/lte/model/tdtbfq-ff-mac-scheduler.cc	2016-10-03 20:57:08.235247729 -0700
+++ ns-3.26/src/lte/model/tdtbfq-ff-mac-scheduler.cc	2016-10-03 19:49:01.537388473 -0700
@@ -1474,7 +1474,7 @@
     {
       // take the average SINR value among the available
       double sinrSum = 0;
-      int sinrNum = 0;
+      unsigned int sinrNum = 0;
       for (uint32_t i = 0; i < m_cschedCellConfig.m_ulBandwidth; i++)
         {
           double sinr = (*itCqi).second.at (i);
diff -Naur ns-3.25/src/lte/model/tta-ff-mac-scheduler.cc ns-3.26/src/lte/model/tta-ff-mac-scheduler.cc
--- ns-3.25/src/lte/model/tta-ff-mac-scheduler.cc	2016-10-03 20:57:08.238247706 -0700
+++ ns-3.26/src/lte/model/tta-ff-mac-scheduler.cc	2016-10-03 19:49:01.540388450 -0700
@@ -1399,7 +1399,7 @@
     {
       // take the average SINR value among the available
       double sinrSum = 0;
-      int sinrNum = 0;
+      unsigned int sinrNum = 0;
       for (uint32_t i = 0; i < m_cschedCellConfig.m_ulBandwidth; i++)
         {
           double sinr = (*itCqi).second.at (i);
diff -Naur ns-3.25/src/lte/wscript ns-3.26/src/lte/wscript
--- ns-3.25/src/lte/wscript	2016-10-03 20:57:08.299247230 -0700
+++ ns-3.26/src/lte/wscript	2016-10-03 19:49:01.600388003 -0700
@@ -295,7 +295,7 @@
         'model/lte-ffr-soft-algorithm.h',
         'model/lte-ffr-enhanced-algorithm.h',
         'model/lte-ffr-distributed-algorithm.h',     
-		'model/lte-ue-power-control.h',           
+        'model/lte-ue-power-control.h',           
         ]
 
     if (bld.env['ENABLE_EMU']):
diff -Naur ns-3.25/src/mesh/bindings/callbacks_list.py ns-3.26/src/mesh/bindings/callbacks_list.py
--- ns-3.25/src/mesh/bindings/callbacks_list.py	2016-10-03 20:57:08.299247230 -0700
+++ ns-3.26/src/mesh/bindings/callbacks_list.py	2016-10-03 19:49:01.601387996 -0700
@@ -1,7 +1,6 @@
 callback_classes = [
     ['void', 'ns3::Mac48Address', 'ns3::Mac48Address', 'unsigned int', 'bool', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'unsigned int', 'ns3::Mac48Address', 'ns3::Mac48Address', 'ns3::dot11s::PeerLink::PeerState', 'ns3::dot11s::PeerLink::PeerState', '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'],
     ['std::vector<ns3::Mac48Address, std::allocator<ns3::Mac48Address> >', 'unsigned int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'bool', 'ns3::Ptr<ns3::Packet>', 'ns3::Mac48Address', 'ns3::Mac48Address', 'unsigned short', 'unsigned int', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['unsigned int', 'ns3::Mac48Address', 'ns3::Ptr<ns3::MeshWifiInterfaceMac>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
@@ -10,6 +9,7 @@
     ['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'],
     ['void', 'ns3::Mac48Address', 'unsigned char', 'bool', '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'],
     ['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.25/src/mesh/bindings/modulegen__gcc_ILP32.py ns-3.26/src/mesh/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/mesh/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.309247152 -0700
+++ ns-3.26/src/mesh/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.611387921 -0700
@@ -31,7 +31,7 @@
     ## 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')
+    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', 'WIFI_PHY_STANDARD_UNSPECIFIED'], 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]
@@ -80,6 +80,10 @@
     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')
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper [class]
+    module.add_class('InterferenceHelper', import_from_module='ns.wifi')
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer [struct]
+    module.add_class('SnrPer', import_from_module='ns.wifi', outer_class=root_module['ns3::InterferenceHelper'])
     ## 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]
@@ -138,14 +142,16 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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]
     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')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], import_from_module='ns.core')
     ## status-code.h (module 'wifi'): ns3::StatusCode [class]
     module.add_class('StatusCode', import_from_module='ns.wifi')
     ## tag.h (module 'network'): ns3::Tag [class]
@@ -154,14 +160,22 @@
     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]
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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'])
+    ## vector.h (module 'core'): ns3::Vector2D [class]
+    module.add_class('Vector2D', import_from_module='ns.core')
+    ## vector.h (module 'core'): ns3::Vector3D [class]
+    module.add_class('Vector3D', import_from_module='ns.core')
     ## wifi-helper.h (module 'wifi'): ns3::WifiHelper [class]
     module.add_class('WifiHelper', allow_subclassing=True, import_from_module='ns.wifi')
     ## wifi-mac-helper.h (module 'wifi'): ns3::WifiMacHelper [class]
@@ -171,7 +185,9 @@
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeFactory [class]
     module.add_class('WifiModeFactory', import_from_module='ns.wifi')
     ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper [class]
-    module.add_class('WifiPhyHelper', allow_subclassing=True, import_from_module='ns.wifi')
+    module.add_class('WifiPhyHelper', import_from_module='ns.wifi', parent=[root_module['ns3::PcapHelperForDevice'], root_module['ns3::AsciiTraceHelperForDevice']])
+    ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::SupportedPcapDataLinkTypes [enumeration]
+    module.add_enum('SupportedPcapDataLinkTypes', ['DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO'], outer_class=root_module['ns3::WifiPhyHelper'], import_from_module='ns.wifi')
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhyListener [class]
     module.add_class('WifiPhyListener', allow_subclassing=True, import_from_module='ns.wifi')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStation [struct]
@@ -218,6 +234,10 @@
     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'])
+    ## 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]
@@ -230,6 +250,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::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', 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::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]
@@ -260,6 +282,12 @@
     module.add_class('TraceSourceAccessor', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     ## trailer.h (module 'network'): ns3::Trailer [class]
     module.add_class('Trailer', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
+    ## 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'])
     ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader [class]
     module.add_class('WifiActionHeader', import_from_module='ns.wifi', parent=root_module['ns3::Header'])
     ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::CategoryValue [enumeration]
@@ -294,6 +322,10 @@
     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]
+    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]
@@ -312,32 +344,62 @@
     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'])
+    ## random-variable-stream.h (module 'core'): ns3::ConstantRandomVariable [class]
+    module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckRequestHeader [class]
     module.add_class('CtrlBAckRequestHeader', import_from_module='ns.wifi', parent=root_module['ns3::Header'])
     ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckResponseHeader [class]
     module.add_class('CtrlBAckResponseHeader', import_from_module='ns.wifi', parent=root_module['ns3::Header'])
     ## dcf.h (module 'wifi'): ns3::Dcf [class]
     module.add_class('Dcf', import_from_module='ns.wifi', 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'])
     ## double.h (module 'core'): ns3::DoubleValue [class]
     module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet [class]
+    module.add_class('DsssParameterSet', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetChecker [class]
+    module.add_class('DsssParameterSetChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue [class]
+    module.add_class('DsssParameterSetValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet [class]
+    module.add_class('EdcaParameterSet', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetChecker [class]
+    module.add_class('EdcaParameterSetChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue [class]
+    module.add_class('EdcaParameterSetValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
     ## edca-txop-n.h (module 'wifi'): ns3::EdcaTxopN [class]
     module.add_class('EdcaTxopN', import_from_module='ns.wifi', parent=root_module['ns3::Dcf'])
+    ## 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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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'])
     ## 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'])
+    ## error-rate-model.h (module 'wifi'): ns3::ErrorRateModel [class]
+    module.add_class('ErrorRateModel', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
     ## 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'])
     ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE [class]
     module.add_class('ExtendedSupportedRatesIE', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## random-variable-stream.h (module 'core'): ns3::GammaRandomVariable [class]
+    module.add_class('GammaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities [class]
     module.add_class('HtCapabilities', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
     ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker [class]
@@ -368,6 +430,8 @@
     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]
@@ -382,6 +446,8 @@
     module.add_class('MeshWifiInterfaceMacPlugin', parent=root_module['ns3::SimpleRefCount< ns3::MeshWifiInterfaceMacPlugin, ns3::empty, ns3::DefaultDeleter<ns3::MeshWifiInterfaceMacPlugin> >'])
     ## mgt-headers.h (module 'wifi'): ns3::MgtBeaconHeader [class]
     module.add_class('MgtBeaconHeader', import_from_module='ns.wifi', parent=root_module['ns3::MgtProbeResponseHeader'])
+    ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
+    module.add_class('MobilityModel', import_from_module='ns.mobility', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -394,6 +460,8 @@
     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]
@@ -402,8 +470,12 @@
     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> >'])
+    ## 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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -422,12 +494,22 @@
     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]
+    module.add_class('Vector2DValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## vector.h (module 'core'): ns3::Vector3DChecker [class]
+    module.add_class('Vector3DChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## vector.h (module 'core'): ns3::Vector3DValue [class]
+    module.add_class('Vector3DValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities [class]
     module.add_class('VhtCapabilities', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
     ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesChecker [class]
     module.add_class('VhtCapabilitiesChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
     ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesValue [class]
     module.add_class('VhtCapabilitiesValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
+    ## wifi-channel.h (module 'wifi'): ns3::WifiChannel [class]
+    module.add_class('WifiChannel', import_from_module='ns.wifi', parent=root_module['ns3::Channel'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker [class]
     module.add_class('WifiModeChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeValue [class]
@@ -455,9 +537,21 @@
     typehandlers.add_type_alias(u'uint8_t', u'ns3::WifiInformationElementId')
     typehandlers.add_type_alias(u'uint8_t*', u'ns3::WifiInformationElementId*')
     typehandlers.add_type_alias(u'uint8_t&', u'ns3::WifiInformationElementId&')
+    typehandlers.add_type_alias(u'ns3::Vector3D', u'ns3::Vector')
+    typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
+    typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
+    module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', u'ns3::WifiModeList')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', u'ns3::WifiModeList*')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', u'ns3::WifiModeList&')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue', u'ns3::VectorValue')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue*', u'ns3::VectorValue*')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue&', u'ns3::VectorValue&')
+    module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker', u'ns3::VectorChecker')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker*', u'ns3::VectorChecker*')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker&', u'ns3::VectorChecker&')
+    module.add_typedef(root_module['ns3::Vector3DChecker'], 'VectorChecker')
     typehandlers.add_type_alias(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&')
@@ -507,12 +601,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(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&')
+    typehandlers.add_type_alias(u'uint32_t ( * ) ( char const *, size_t ) *', u'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias(u'uint32_t ( * ) ( char const *, size_t ) **', u'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias(u'uint32_t ( * ) ( char const *, size_t ) *&', u'ns3::Hash::Hash32Function_ptr&')
     
     ## Register a nested module for the namespace Function
     
@@ -562,6 +656,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_dot11s(module):
     root_module = module.get_root()
@@ -572,12 +669,12 @@
     module.add_enum('dot11sSynchronizationProtocolIdentifier', ['SYNC_NEIGHBOUR_OFFSET', 'SYNC_NULL'])
     ## ie-dot11s-configuration.h (module 'mesh'): ns3::dot11s::dot11sCongestionControlMode [enumeration]
     module.add_enum('dot11sCongestionControlMode', ['CONGESTION_SIGNALING', 'CONGESTION_NULL'])
-    ## ie-dot11s-configuration.h (module 'mesh'): ns3::dot11s::dot11sAuthenticationProtocol [enumeration]
-    module.add_enum('dot11sAuthenticationProtocol', ['AUTH_NULL', 'AUTH_SAE', 'AUTH_IEEE'])
     ## ie-dot11s-configuration.h (module 'mesh'): ns3::dot11s::dot11sPathSelectionMetric [enumeration]
     module.add_enum('dot11sPathSelectionMetric', ['METRIC_AIRTIME'])
     ## ie-dot11s-peer-management.h (module 'mesh'): ns3::dot11s::PmpReasonCode [enumeration]
     module.add_enum('PmpReasonCode', ['REASON11S_PEERING_CANCELLED', 'REASON11S_MESH_MAX_PEERS', 'REASON11S_MESH_CAPABILITY_POLICY_VIOLATION', 'REASON11S_MESH_CLOSE_RCVD', 'REASON11S_MESH_MAX_RETRIES', 'REASON11S_MESH_CONFIRM_TIMEOUT', 'REASON11S_MESH_INVALID_GTK', 'REASON11S_MESH_INCONSISTENT_PARAMETERS', 'REASON11S_MESH_INVALID_SECURITY_CAPABILITY', 'REASON11S_RESERVED'])
+    ## ie-dot11s-configuration.h (module 'mesh'): ns3::dot11s::dot11sAuthenticationProtocol [enumeration]
+    module.add_enum('dot11sAuthenticationProtocol', ['AUTH_NULL', 'AUTH_SAE', 'AUTH_IEEE'])
     ## ie-dot11s-preq.h (module 'mesh'): ns3::dot11s::DestinationAddressUnit [class]
     module.add_class('DestinationAddressUnit', parent=root_module['ns3::SimpleRefCount< ns3::dot11s::DestinationAddressUnit, ns3::empty, ns3::DefaultDeleter<ns3::dot11s::DestinationAddressUnit> >'])
     ## ie-dot11s-configuration.h (module 'mesh'): ns3::dot11s::Dot11sMeshCapability [class]
@@ -685,6 +782,8 @@
     register_Ns3CapabilityInformation_methods(root_module, root_module['ns3::CapabilityInformation'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
     register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
+    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'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -714,9 +813,12 @@
     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'])
+    register_Ns3Vector2D_methods(root_module, root_module['ns3::Vector2D'])
+    register_Ns3Vector3D_methods(root_module, root_module['ns3::Vector3D'])
     register_Ns3WifiHelper_methods(root_module, root_module['ns3::WifiHelper'])
     register_Ns3WifiMacHelper_methods(root_module, root_module['ns3::WifiMacHelper'])
     register_Ns3WifiMode_methods(root_module, root_module['ns3::WifiMode'])
@@ -743,12 +845,15 @@
     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_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__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__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> >'])
@@ -762,6 +867,9 @@
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
     register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
+    register_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_Ns3WifiActionHeader_methods(root_module, root_module['ns3::WifiActionHeader'])
     register_Ns3WifiActionHeaderActionValue_methods(root_module, root_module['ns3::WifiActionHeader::ActionValue'])
     register_Ns3WifiInformationElement_methods(root_module, root_module['ns3::WifiInformationElement'])
@@ -770,6 +878,8 @@
     register_Ns3WifiMacHeader_methods(root_module, root_module['ns3::WifiMacHeader'])
     register_Ns3WifiPhy_methods(root_module, root_module['ns3::WifiPhy'])
     register_Ns3WifiRemoteStationManager_methods(root_module, root_module['ns3::WifiRemoteStationManager'])
+    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'])
@@ -779,19 +889,34 @@
     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_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3CtrlBAckRequestHeader_methods(root_module, root_module['ns3::CtrlBAckRequestHeader'])
     register_Ns3CtrlBAckResponseHeader_methods(root_module, root_module['ns3::CtrlBAckResponseHeader'])
     register_Ns3Dcf_methods(root_module, root_module['ns3::Dcf'])
+    register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
+    register_Ns3DsssParameterSet_methods(root_module, root_module['ns3::DsssParameterSet'])
+    register_Ns3DsssParameterSetChecker_methods(root_module, root_module['ns3::DsssParameterSetChecker'])
+    register_Ns3DsssParameterSetValue_methods(root_module, root_module['ns3::DsssParameterSetValue'])
+    register_Ns3EdcaParameterSet_methods(root_module, root_module['ns3::EdcaParameterSet'])
+    register_Ns3EdcaParameterSetChecker_methods(root_module, root_module['ns3::EdcaParameterSetChecker'])
+    register_Ns3EdcaParameterSetValue_methods(root_module, root_module['ns3::EdcaParameterSetValue'])
     register_Ns3EdcaTxopN_methods(root_module, root_module['ns3::EdcaTxopN'])
+    register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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_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'])
     register_Ns3ExtendedSupportedRatesIE_methods(root_module, root_module['ns3::ExtendedSupportedRatesIE'])
+    register_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
     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'])
@@ -807,6 +932,7 @@
     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_Ns3MeshInformationElementVector_methods(root_module, root_module['ns3::MeshInformationElementVector'])
@@ -814,15 +940,18 @@
     register_Ns3MeshStack_methods(root_module, root_module['ns3::MeshStack'])
     register_Ns3MeshWifiInterfaceMacPlugin_methods(root_module, root_module['ns3::MeshWifiInterfaceMacPlugin'])
     register_Ns3MgtBeaconHeader_methods(root_module, root_module['ns3::MgtBeaconHeader'])
+    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'])
     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_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
     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'])
@@ -833,9 +962,14 @@
     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'])
+    register_Ns3Vector3DValue_methods(root_module, root_module['ns3::Vector3DValue'])
     register_Ns3VhtCapabilities_methods(root_module, root_module['ns3::VhtCapabilities'])
     register_Ns3VhtCapabilitiesChecker_methods(root_module, root_module['ns3::VhtCapabilitiesChecker'])
     register_Ns3VhtCapabilitiesValue_methods(root_module, root_module['ns3::VhtCapabilitiesValue'])
+    register_Ns3WifiChannel_methods(root_module, root_module['ns3::WifiChannel'])
     register_Ns3WifiModeChecker_methods(root_module, root_module['ns3::WifiModeChecker'])
     register_Ns3WifiModeValue_methods(root_module, root_module['ns3::WifiModeValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
@@ -1314,9 +1448,13 @@
     cls.add_method('NotifyMpduTransmission', 
                    'void', 
                    [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('uint16_t', 'nextSeqNumber'), param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
-    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacket(ns3::WifiMacHeader & hdr, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacket(ns3::WifiMacHeader & hdr) [member function]
     cls.add_method('PeekNextPacket', 
                    'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'hdr')])
+    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacketByTidAndAddress(ns3::WifiMacHeader & hdr, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextPacketByTidAndAddress', 
+                   'ns3::Ptr< ns3::Packet const >', 
                    [param('ns3::WifiMacHeader &', 'hdr'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')])
     ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::RemovePacket(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
     cls.add_method('RemovePacket', 
@@ -1482,6 +1620,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1876,6 +2019,74 @@
                    [])
     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')])
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::InterferenceHelper() [constructor]
+    cls.add_constructor([])
+    ## interference-helper.h (module 'wifi'): ns3::Ptr<ns3::InterferenceHelper::Event> ns3::InterferenceHelper::Add(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::Time duration, double rxPower) [member function]
+    cls.add_method('Add', 
+                   'ns3::Ptr< ns3::InterferenceHelper::Event >', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::Time', 'duration'), param('double', 'rxPower')])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::AddForeignSignal(ns3::Time duration, double rxPower) [member function]
+    cls.add_method('AddForeignSignal', 
+                   'void', 
+                   [param('ns3::Time', 'duration'), param('double', 'rxPower')])
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer ns3::InterferenceHelper::CalculatePlcpHeaderSnrPer(ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
+    cls.add_method('CalculatePlcpHeaderSnrPer', 
+                   'ns3::InterferenceHelper::SnrPer', 
+                   [param('ns3::Ptr< ns3::InterferenceHelper::Event >', 'event')])
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer ns3::InterferenceHelper::CalculatePlcpPayloadSnrPer(ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
+    cls.add_method('CalculatePlcpPayloadSnrPer', 
+                   'ns3::InterferenceHelper::SnrPer', 
+                   [param('ns3::Ptr< ns3::InterferenceHelper::Event >', 'event')])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::EraseEvents() [member function]
+    cls.add_method('EraseEvents', 
+                   'void', 
+                   [])
+    ## interference-helper.h (module 'wifi'): ns3::Time ns3::InterferenceHelper::GetEnergyDuration(double energyW) [member function]
+    cls.add_method('GetEnergyDuration', 
+                   'ns3::Time', 
+                   [param('double', 'energyW')])
+    ## interference-helper.h (module 'wifi'): ns3::Ptr<ns3::ErrorRateModel> ns3::InterferenceHelper::GetErrorRateModel() const [member function]
+    cls.add_method('GetErrorRateModel', 
+                   'ns3::Ptr< ns3::ErrorRateModel >', 
+                   [], 
+                   is_const=True)
+    ## interference-helper.h (module 'wifi'): double ns3::InterferenceHelper::GetNoiseFigure() const [member function]
+    cls.add_method('GetNoiseFigure', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::NotifyRxEnd() [member function]
+    cls.add_method('NotifyRxEnd', 
+                   'void', 
+                   [])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::NotifyRxStart() [member function]
+    cls.add_method('NotifyRxStart', 
+                   'void', 
+                   [])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::SetErrorRateModel(ns3::Ptr<ns3::ErrorRateModel> rate) [member function]
+    cls.add_method('SetErrorRateModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::ErrorRateModel >', 'rate')])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::SetNoiseFigure(double value) [member function]
+    cls.add_method('SetNoiseFigure', 
+                   'void', 
+                   [param('double', 'value')])
+    return
+
+def register_Ns3InterferenceHelperSnrPer_methods(root_module, cls):
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer::SnrPer() [constructor]
+    cls.add_constructor([])
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer::SnrPer(ns3::InterferenceHelper::SnrPer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::InterferenceHelper::SnrPer const &', 'arg0')])
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer::per [variable]
+    cls.add_instance_attribute('per', 'double', is_const=False)
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer::snr [variable]
+    cls.add_instance_attribute('snr', 'double', is_const=False)
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -3020,10 +3231,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3300,6 +3511,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('<')
@@ -3311,23 +3556,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3442,6 +3687,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -3463,10 +3713,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -3488,6 +3738,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -3503,6 +3757,40 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
+    return
+
+def register_Ns3Vector2D_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D(ns3::Vector2D const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2D const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D(double _x, double _y) [constructor]
+    cls.add_constructor([param('double', '_x'), param('double', '_y')])
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2D::x [variable]
+    cls.add_instance_attribute('x', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector2D::y [variable]
+    cls.add_instance_attribute('y', 'double', is_const=False)
+    return
+
+def register_Ns3Vector3D_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D(ns3::Vector3D const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3D const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D(double _x, double _y, double _z) [constructor]
+    cls.add_constructor([param('double', '_x'), param('double', '_y'), param('double', '_z')])
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3D::x [variable]
+    cls.add_instance_attribute('x', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector3D::y [variable]
+    cls.add_instance_attribute('y', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector3D::z [variable]
+    cls.add_instance_attribute('z', 'double', is_const=False)
     return
 
 def register_Ns3WifiHelper_methods(root_module, cls):
@@ -3664,15 +3952,52 @@
     return
 
 def register_Ns3WifiPhyHelper_methods(root_module, cls):
-    ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper() [constructor]
-    cls.add_constructor([])
     ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper(ns3::WifiPhyHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiPhyHelper const &', 'arg0')])
+    ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper() [constructor]
+    cls.add_constructor([])
     ## wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('Create', 
                    'ns3::Ptr< ns3::WifiPhy >', 
                    [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-helper.h (module 'wifi'): ns3::PcapHelper::DataLinkType ns3::WifiPhyHelper::GetPcapDataLinkType() const [member function]
+    cls.add_method('GetPcapDataLinkType', 
+                   'ns3::PcapHelper::DataLinkType', 
+                   [], 
+                   is_const=True)
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::Set(std::string name, ns3::AttributeValue const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'v')])
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::SetErrorRateModel(std::string name, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetErrorRateModel', 
+                   'void', 
+                   [param('std::string', 'name'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::SetPcapDataLinkType(ns3::WifiPhyHelper::SupportedPcapDataLinkTypes dlt) [member function]
+    cls.add_method('SetPcapDataLinkType', 
+                   'void', 
+                   [param('ns3::WifiPhyHelper::SupportedPcapDataLinkTypes', 'dlt')])
+    ## wifi-helper.h (module 'wifi'): static void ns3::WifiPhyHelper::PcapSniffRxEvent(ns3::Ptr<ns3::PcapFileWrapper> file, 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('PcapSniffRxEvent', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PcapFileWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::signalNoiseDbm', 'signalNoise')], 
+                   is_static=True, visibility='protected')
+    ## wifi-helper.h (module 'wifi'): static void ns3::WifiPhyHelper::PcapSniffTxEvent(ns3::Ptr<ns3::PcapFileWrapper> file, ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector, ns3::mpduInfo aMpdu) [member function]
+    cls.add_method('PcapSniffTxEvent', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PcapFileWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector'), param('ns3::mpduInfo', 'aMpdu')], 
+                   is_static=True, visibility='protected')
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiInternal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapInternal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3WifiPhyListener_methods(root_module, cls):
@@ -4332,6 +4657,11 @@
                    'ns3::CapabilityInformation', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::EdcaParameterSet ns3::MgtAssocResponseHeader::GetEdcaParameterSet() const [member function]
+    cls.add_method('GetEdcaParameterSet', 
+                   'ns3::EdcaParameterSet', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::ErpInformation ns3::MgtAssocResponseHeader::GetErpInformation() const [member function]
     cls.add_method('GetErpInformation', 
                    'ns3::ErpInformation', 
@@ -4389,6 +4719,10 @@
     cls.add_method('SetCapabilities', 
                    'void', 
                    [param('ns3::CapabilityInformation', 'capabilities')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetEdcaParameterSet(ns3::EdcaParameterSet edcaParameterSet) [member function]
+    cls.add_method('SetEdcaParameterSet', 
+                   'void', 
+                   [param('ns3::EdcaParameterSet', 'edcaParameterSet')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetErpInformation(ns3::ErpInformation erpInformation) [member function]
     cls.add_method('SetErpInformation', 
                    'void', 
@@ -4567,6 +4901,16 @@
                    'ns3::CapabilityInformation', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::DsssParameterSet ns3::MgtProbeResponseHeader::GetDsssParameterSet() const [member function]
+    cls.add_method('GetDsssParameterSet', 
+                   'ns3::DsssParameterSet', 
+                   [], 
+                   is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::EdcaParameterSet ns3::MgtProbeResponseHeader::GetEdcaParameterSet() const [member function]
+    cls.add_method('GetEdcaParameterSet', 
+                   'ns3::EdcaParameterSet', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::ErpInformation ns3::MgtProbeResponseHeader::GetErpInformation() const [member function]
     cls.add_method('GetErpInformation', 
                    'ns3::ErpInformation', 
@@ -4634,6 +4978,14 @@
     cls.add_method('SetCapabilities', 
                    'void', 
                    [param('ns3::CapabilityInformation', 'capabilities')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetDsssParameterSet(ns3::DsssParameterSet dsssParameterSet) [member function]
+    cls.add_method('SetDsssParameterSet', 
+                   'void', 
+                   [param('ns3::DsssParameterSet', 'dsssParameterSet')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetEdcaParameterSet(ns3::EdcaParameterSet edcaParameterSet) [member function]
+    cls.add_method('SetEdcaParameterSet', 
+                   'void', 
+                   [param('ns3::EdcaParameterSet', 'edcaParameterSet')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetErpInformation(ns3::ErpInformation erpInformation) [member function]
     cls.add_method('SetErpInformation', 
                    'void', 
@@ -4690,6 +5042,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -4806,6 +5163,89 @@
                    [])
     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([])
@@ -4878,6 +5318,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3InterferenceHelperEvent_Ns3Empty_Ns3DefaultDeleter__lt__ns3InterferenceHelperEvent__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> >::SimpleRefCount(ns3::SimpleRefCount<ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter< ns3::InterferenceHelper::Event > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3MeshWifiInterfaceMacPlugin_Ns3Empty_Ns3DefaultDeleter__lt__ns3MeshWifiInterfaceMacPlugin__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::MeshWifiInterfaceMacPlugin, ns3::empty, ns3::DefaultDeleter<ns3::MeshWifiInterfaceMacPlugin> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -5256,6 +5708,130 @@
                    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_Ns3WifiActionHeader_methods(root_module, cls):
     ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::WifiActionHeader(ns3::WifiActionHeader const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiActionHeader const &', 'arg0')])
@@ -5674,10 +6250,10 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureDcf(ns3::Ptr<ns3::Dcf> dcf, uint32_t cwmin, uint32_t cwmax, ns3::AcIndex ac) [member function]
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureDcf(ns3::Ptr<ns3::Dcf> dcf, uint32_t cwmin, uint32_t cwmax, bool isDsss, ns3::AcIndex ac) [member function]
     cls.add_method('ConfigureDcf', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Dcf >', 'dcf'), param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('ns3::AcIndex', 'ac')], 
+                   [param('ns3::Ptr< ns3::Dcf >', 'dcf'), param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('bool', 'isDsss'), param('ns3::AcIndex', 'ac')], 
                    visibility='protected')
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('FinishConfigureStandard', 
@@ -6126,16 +6702,16 @@
     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]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::AddSupportedChannelWidth(uint32_t channelwidth) [member function]
     cls.add_method('AddSupportedChannelWidth', 
                    'void', 
-                   [param('uint32_t', 'width')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   [param('uint32_t', 'channelwidth')], 
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): int64_t ns3::WifiPhy::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
                    [param('int64_t', 'stream')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculatePlcpPreambleAndHeaderDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('CalculatePlcpPreambleAndHeaderDuration', 
                    'ns3::Time', 
@@ -6144,7 +6720,7 @@
     cls.add_method('CalculateSnr', 
                    'double', 
                    [param('ns3::WifiTxVector', 'txVector'), param('double', 'ber')], 
-                   is_pure_virtual=True, is_const=True, is_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) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
@@ -6157,12 +6733,31 @@
     cls.add_method('ConfigureStandard', 
                    'void', 
                    [param('ns3::WifiPhyStandard', 'standard')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::DbToRatio(double db) const [member function]
+    cls.add_method('DbToRatio', 
+                   'double', 
+                   [param('double', 'db')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::DbmToW(double dbm) const [member function]
+    cls.add_method('DbmToW', 
+                   'double', 
+                   [param('double', 'dbm')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DefineChannelNumber(uint16_t channelNumber, ns3::WifiPhyStandard standard, uint32_t frequency, uint32_t channelWidth) [member function]
+    cls.add_method('DefineChannelNumber', 
+                   'bool', 
+                   [param('uint16_t', 'channelNumber'), param('ns3::WifiPhyStandard', 'standard'), param('uint32_t', 'frequency'), param('uint32_t', 'channelWidth')])
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
     cls.add_method('GetBssMembershipSelector', 
                    'uint32_t', 
                    [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetCcaMode1Threshold() const [member function]
+    cls.add_method('GetCcaMode1Threshold', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::WifiPhy::GetChannel() const [member function]
     cls.add_method('GetChannel', 
                    'ns3::Ptr< ns3::WifiChannel >', 
@@ -6172,26 +6767,31 @@
     cls.add_method('GetChannelNumber', 
                    'uint16_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetChannelSwitchDelay() const [member function]
     cls.add_method('GetChannelSwitchDelay', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetChannelWidth() const [member function]
     cls.add_method('GetChannelWidth', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate11Mbps() [member function]
-    cls.add_method('GetDsssRate11Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::NetDevice> ns3::WifiPhy::GetDevice() const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate11Mbps() [member function]
+    cls.add_method('GetDsssRate11Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate1Mbps() [member function]
     cls.add_method('GetDsssRate1Mbps', 
@@ -6208,6 +6808,16 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetEdThreshold() const [member function]
+    cls.add_method('GetEdThreshold', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetEdThresholdW() const [member function]
+    cls.add_method('GetEdThresholdW', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate12Mbps() [member function]
     cls.add_method('GetErpOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -6248,21 +6858,26 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::ErrorRateModel> ns3::WifiPhy::GetErrorRateModel() const [member function]
+    cls.add_method('GetErrorRateModel', 
+                   'ns3::Ptr< ns3::ErrorRateModel >', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetFrequency() const [member function]
     cls.add_method('GetFrequency', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGreenfield() const [member function]
     cls.add_method('GetGreenfield', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGuardInterval() const [member function]
     cls.add_method('GetGuardInterval', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs0() [member function]
     cls.add_method('GetHtMcs0', 
                    'ns3::WifiMode', 
@@ -6432,57 +7047,61 @@
     cls.add_method('GetLastRxStartTime', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
     cls.add_method('GetLdpc', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
     cls.add_method('GetMcs', 
                    'ns3::WifiMode', 
                    [param('uint8_t', 'mcs')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
     cls.add_method('GetMembershipSelectorModes', 
                    'ns3::WifiModeList', 
                    [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::MobilityModel> ns3::WifiPhy::GetMobility() [member function]
+    cls.add_method('GetMobility', 
+                   'ns3::Ptr< ns3::MobilityModel >', 
+                   [])
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
     cls.add_method('GetNBssMembershipSelectors', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
     cls.add_method('GetNMcs', 
                    'uint8_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
     cls.add_method('GetNModes', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNTxPower() const [member function]
     cls.add_method('GetNTxPower', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
     cls.add_method('GetNumberOfReceiveAntennas', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
     cls.add_method('GetNumberOfTransmitAntennas', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
     cls.add_method('GetOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -6651,46 +7270,66 @@
                    'ns3::Time', 
                    [param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetRxGain() const [member function]
+    cls.add_method('GetRxGain', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetRxNoiseFigure() const [member function]
+    cls.add_method('GetRxNoiseFigure', 
+                   'double', 
+                   [], 
+                   is_const=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)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiPhyStandard ns3::WifiPhy::GetStandard() const [member function]
+    cls.add_method('GetStandard', 
+                   'ns3::WifiPhyStandard', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
     cls.add_method('GetStateDuration', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetStbc() const [member function]
     cls.add_method('GetStbc', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   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)
+                   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)
+                   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)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxGain() const [member function]
+    cls.add_method('GetTxGain', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
     cls.add_method('GetTxPowerEnd', 
                    'double', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerStart() const [member function]
     cls.add_method('GetTxPowerStart', 
                    'double', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::WifiPhy::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -6751,46 +7390,51 @@
                    'ns3::WifiMode', 
                    [param('ns3::WifiMode', 'payloadMode')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsMcsSupported(ns3::WifiMode mcs) const [member function]
+    cls.add_method('IsMcsSupported', 
+                   'bool', 
+                   [param('ns3::WifiMode', 'mcs')], 
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
     cls.add_method('IsModeSupported', 
                    'bool', 
                    [param('ns3::WifiMode', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateBusy() [member function]
     cls.add_method('IsStateBusy', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateCcaBusy() [member function]
     cls.add_method('IsStateCcaBusy', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateIdle() [member function]
     cls.add_method('IsStateIdle', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateRx() [member function]
     cls.add_method('IsStateRx', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSleep() [member function]
     cls.add_method('IsStateSleep', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSwitching() [member function]
     cls.add_method('IsStateSwitching', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateTx() [member function]
     cls.add_method('IsStateTx', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static bool ns3::WifiPhy::IsValidTxVector(ns3::WifiTxVector txVector) [member function]
     cls.add_method('IsValidTxVector', 
                    'bool', 
@@ -6828,6 +7472,11 @@
     cls.add_method('NotifyTxEnd', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::RatioToDb(double ratio) const [member function]
+    cls.add_method('RatioToDb', 
+                   'double', 
+                   [param('double', 'ratio')], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('RegisterListener', 
                    'void', 
@@ -6848,61 +7497,93 @@
                    '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::SetCcaMode1Threshold(double threshold) [member function]
+    cls.add_method('SetCcaMode1Threshold', 
+                   'void', 
+                   [param('double', 'threshold')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
                    'void', 
                    [param('uint16_t', 'id')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelWidth(uint32_t channelwidth) [member function]
     cls.add_method('SetChannelWidth', 
                    'void', 
                    [param('uint32_t', 'channelwidth')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetEdThreshold(double threshold) [member function]
+    cls.add_method('SetEdThreshold', 
+                   'void', 
+                   [param('double', 'threshold')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetErrorRateModel(ns3::Ptr<ns3::ErrorRateModel> rate) [member function]
+    cls.add_method('SetErrorRateModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::ErrorRateModel >', 'rate')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
     cls.add_method('SetFrequency', 
                    'void', 
                    [param('uint32_t', 'freq')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGreenfield(bool greenfield) [member function]
     cls.add_method('SetGreenfield', 
                    'void', 
                    [param('bool', 'greenfield')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool guardInterval) [member function]
     cls.add_method('SetGuardInterval', 
                    'void', 
                    [param('bool', 'guardInterval')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool ldpc) [member function]
     cls.add_method('SetLdpc', 
                    'void', 
                    [param('bool', 'ldpc')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> mobility) [member function]
+    cls.add_method('SetMobility', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MobilityModel >', 'mobility')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNTxPower(uint32_t n) [member function]
+    cls.add_method('SetNTxPower', 
+                   'void', 
+                   [param('uint32_t', 'n')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
     cls.add_method('SetNumberOfReceiveAntennas', 
                    'void', 
                    [param('uint32_t', 'rx')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
     cls.add_method('SetNumberOfTransmitAntennas', 
                    'void', 
                    [param('uint32_t', 'tx')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,bool,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveOkCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::WifiTxVector,ns3::WifiPreamble,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveOkCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiTxVector, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetRxGain(double gain) [member function]
+    cls.add_method('SetRxGain', 
+                   'void', 
+                   [param('double', 'gain')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetRxNoiseFigure(double noiseFigureDb) [member function]
+    cls.add_method('SetRxNoiseFigure', 
+                   'void', 
+                   [param('double', 'noiseFigureDb')])
     ## 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)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetSleepMode() [member function]
     cls.add_method('SetSleepMode', 
                    'void', 
@@ -6912,12 +7593,64 @@
     cls.add_method('SetStbc', 
                    'void', 
                    [param('bool', 'stbc')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxGain(double gain) [member function]
+    cls.add_method('SetTxGain', 
+                   'void', 
+                   [param('double', 'gain')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxPowerEnd(double end) [member function]
+    cls.add_method('SetTxPowerEnd', 
+                   'void', 
+                   [param('double', 'end')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxPowerStart(double start) [member function]
+    cls.add_method('SetTxPowerStart', 
+                   'void', 
+                   [param('double', 'start')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('UnregisterListener', 
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::WToDbm(double w) const [member function]
+    cls.add_method('WToDbm', 
+                   'double', 
+                   [param('double', 'w')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DoChannelSwitch(uint16_t id) [member function]
+    cls.add_method('DoChannelSwitch', 
+                   'bool', 
+                   [param('uint16_t', 'id')], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DoFrequencySwitch(uint32_t frequency) [member function]
+    cls.add_method('DoFrequencySwitch', 
+                   'bool', 
+                   [param('uint32_t', 'frequency')], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetPowerDbm(uint8_t power) const [member function]
+    cls.add_method('GetPowerDbm', 
+                   'double', 
+                   [param('uint8_t', 'power')], 
+                   is_const=True, visibility='protected')
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureChannelForStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('ConfigureChannelForStandard', 
+                   'void', 
+                   [param('ns3::WifiPhyStandard', 'standard')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureDefaultsForStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('ConfigureDefaultsForStandard', 
+                   'void', 
+                   [param('ns3::WifiPhyStandard', 'standard')], 
+                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3WifiRemoteStationManager_methods(root_module, cls):
@@ -7239,7 +7972,8 @@
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetHtSupported(bool enable) [member function]
     cls.add_method('SetHtSupported', 
                    'void', 
-                   [param('bool', 'enable')])
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetMaxSlrc(uint32_t maxSlrc) [member function]
     cls.add_method('SetMaxSlrc', 
                    'void', 
@@ -7271,7 +8005,8 @@
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetVhtSupported(bool enable) [member function]
     cls.add_method('SetVhtSupported', 
                    'void', 
-                   [param('bool', 'enable')])
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
     cls.add_method('SetupMac', 
                    'void', 
@@ -7558,6 +8293,77 @@
                    is_pure_virtual=True, is_const=True, visibility='private', 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')])
@@ -7774,6 +8580,39 @@
                    is_static=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_Ns3CtrlBAckRequestHeader_methods(root_module, cls):
     ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckRequestHeader::CtrlBAckRequestHeader(ns3::CtrlBAckRequestHeader const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CtrlBAckRequestHeader const &', 'arg0')])
@@ -8006,6 +8845,11 @@
                    'uint32_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): ns3::Time ns3::Dcf::GetTxopLimit() const [member function]
+    cls.add_method('GetTxopLimit', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## dcf.h (module 'wifi'): static ns3::TypeId ns3::Dcf::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -8026,6 +8870,35 @@
                    'void', 
                    [param('uint32_t', 'minCw')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): void ns3::Dcf::SetTxopLimit(ns3::Time txopLimit) [member function]
+    cls.add_method('SetTxopLimit', 
+                   'void', 
+                   [param('ns3::Time', 'txopLimit')], 
+                   is_pure_virtual=True, 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_Ns3DoubleValue_methods(root_module, cls):
@@ -8061,22 +8934,420 @@
                    [param('double const &', 'value')])
     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', 
-                   [], 
-                   is_static=True)
-    ## edca-txop-n.h (module 'wifi'): ns3::EdcaTxopN::EdcaTxopN() [constructor]
+def register_Ns3DsssParameterSet_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet::DsssParameterSet(ns3::DsssParameterSet const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DsssParameterSet const &', 'arg0')])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet::DsssParameterSet() [constructor]
     cls.add_constructor([])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
+    ## dsss-parameter-set.h (module 'wifi'): uint8_t ns3::DsssParameterSet::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)
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetLow(ns3::Ptr<ns3::MacLow> low) [member function]
+    ## dsss-parameter-set.h (module 'wifi'): ns3::WifiInformationElementId ns3::DsssParameterSet::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): uint8_t ns3::DsssParameterSet::GetCurrentChannel() const [member function]
+    cls.add_method('GetCurrentChannel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): uint8_t ns3::DsssParameterSet::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): uint16_t ns3::DsssParameterSet::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): ns3::Buffer::Iterator ns3::DsssParameterSet::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSet::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSet::SetCurrentChannel(uint8_t currentChannel) [member function]
+    cls.add_method('SetCurrentChannel', 
+                   'void', 
+                   [param('uint8_t', 'currentChannel')])
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSet::SetDsssSupported(uint8_t DsssSupported) [member function]
+    cls.add_method('SetDsssSupported', 
+                   'void', 
+                   [param('uint8_t', 'DsssSupported')])
+    return
+
+def register_Ns3DsssParameterSetChecker_methods(root_module, cls):
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetChecker::DsssParameterSetChecker() [constructor]
+    cls.add_constructor([])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetChecker::DsssParameterSetChecker(ns3::DsssParameterSetChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DsssParameterSetChecker const &', 'arg0')])
+    return
+
+def register_Ns3DsssParameterSetValue_methods(root_module, cls):
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue::DsssParameterSetValue() [constructor]
+    cls.add_constructor([])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue::DsssParameterSetValue(ns3::DsssParameterSetValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DsssParameterSetValue const &', 'arg0')])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue::DsssParameterSetValue(ns3::DsssParameterSet const & value) [constructor]
+    cls.add_constructor([param('ns3::DsssParameterSet const &', 'value')])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::DsssParameterSetValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): bool ns3::DsssParameterSetValue::DeserializeFromString(std::string value, ns3::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)
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet ns3::DsssParameterSetValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::DsssParameterSet', 
+                   [], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): std::string ns3::DsssParameterSetValue::SerializeToString(ns3::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)
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSetValue::Set(ns3::DsssParameterSet const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::DsssParameterSet const &', 'value')])
+    return
+
+def register_Ns3EdcaParameterSet_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet::EdcaParameterSet(ns3::EdcaParameterSet const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSet const &', 'arg0')])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet::EdcaParameterSet() [constructor]
+    cls.add_constructor([])
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::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)
+    ## edca-parameter-set.h (module 'wifi'): ns3::WifiInformationElementId ns3::EdcaParameterSet::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeAci() const [member function]
+    cls.add_method('GetBeAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeAcm() const [member function]
+    cls.add_method('GetBeAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeAifsn() const [member function]
+    cls.add_method('GetBeAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeCWmax() const [member function]
+    cls.add_method('GetBeCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeCWmin() const [member function]
+    cls.add_method('GetBeCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetBeTXOPLimit() const [member function]
+    cls.add_method('GetBeTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkAci() const [member function]
+    cls.add_method('GetBkAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkAcm() const [member function]
+    cls.add_method('GetBkAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkAifsn() const [member function]
+    cls.add_method('GetBkAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkCWmax() const [member function]
+    cls.add_method('GetBkCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkCWmin() const [member function]
+    cls.add_method('GetBkCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetBkTXOPLimit() const [member function]
+    cls.add_method('GetBkTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetQosInfo() const [member function]
+    cls.add_method('GetQosInfo', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViAci() const [member function]
+    cls.add_method('GetViAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViAcm() const [member function]
+    cls.add_method('GetViAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViAifsn() const [member function]
+    cls.add_method('GetViAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViCWmax() const [member function]
+    cls.add_method('GetViCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViCWmin() const [member function]
+    cls.add_method('GetViCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetViTXOPLimit() const [member function]
+    cls.add_method('GetViTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoAci() const [member function]
+    cls.add_method('GetVoAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoAcm() const [member function]
+    cls.add_method('GetVoAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoAifsn() const [member function]
+    cls.add_method('GetVoAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoCWmax() const [member function]
+    cls.add_method('GetVoCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoCWmin() const [member function]
+    cls.add_method('GetVoCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetVoTXOPLimit() const [member function]
+    cls.add_method('GetVoTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): ns3::Buffer::Iterator ns3::EdcaParameterSet::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeAci(uint8_t aci) [member function]
+    cls.add_method('SetBeAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeAcm(uint8_t acm) [member function]
+    cls.add_method('SetBeAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetBeAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetBeCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetBeCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetBeTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkAci(uint8_t aci) [member function]
+    cls.add_method('SetBkAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkAcm(uint8_t acm) [member function]
+    cls.add_method('SetBkAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetBkAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetBkCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetBkCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetBkTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetQosInfo(uint8_t qosInfo) [member function]
+    cls.add_method('SetQosInfo', 
+                   'void', 
+                   [param('uint8_t', 'qosInfo')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetQosSupported(uint8_t qosSupported) [member function]
+    cls.add_method('SetQosSupported', 
+                   'void', 
+                   [param('uint8_t', 'qosSupported')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViAci(uint8_t aci) [member function]
+    cls.add_method('SetViAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViAcm(uint8_t acm) [member function]
+    cls.add_method('SetViAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetViAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetViCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetViCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetViTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoAci(uint8_t aci) [member function]
+    cls.add_method('SetVoAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoAcm(uint8_t acm) [member function]
+    cls.add_method('SetVoAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetVoAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetVoCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetVoCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetVoTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    return
+
+def register_Ns3EdcaParameterSetChecker_methods(root_module, cls):
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetChecker::EdcaParameterSetChecker() [constructor]
+    cls.add_constructor([])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetChecker::EdcaParameterSetChecker(ns3::EdcaParameterSetChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSetChecker const &', 'arg0')])
+    return
+
+def register_Ns3EdcaParameterSetValue_methods(root_module, cls):
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue::EdcaParameterSetValue() [constructor]
+    cls.add_constructor([])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue::EdcaParameterSetValue(ns3::EdcaParameterSetValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSetValue const &', 'arg0')])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue::EdcaParameterSetValue(ns3::EdcaParameterSet const & value) [constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSet const &', 'value')])
+    ## edca-parameter-set.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::EdcaParameterSetValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): bool ns3::EdcaParameterSetValue::DeserializeFromString(std::string value, ns3::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)
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet ns3::EdcaParameterSetValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::EdcaParameterSet', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): std::string ns3::EdcaParameterSetValue::SerializeToString(ns3::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)
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSetValue::Set(ns3::EdcaParameterSet const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::EdcaParameterSet const &', 'value')])
+    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', 
+                   [], 
+                   is_static=True)
+    ## edca-txop-n.h (module 'wifi'): ns3::EdcaTxopN::EdcaTxopN() [constructor]
+    cls.add_constructor([])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetLow(ns3::Ptr<ns3::MacLow> low) [member function]
     cls.add_method('SetLow', 
                    'void', 
                    [param('ns3::Ptr< ns3::MacLow >', 'low')])
@@ -8129,6 +9400,11 @@
                    'void', 
                    [param('uint32_t', 'aifsn')], 
                    is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTxopLimit(ns3::Time txopLimit) [member function]
+    cls.add_method('SetTxopLimit', 
+                   'void', 
+                   [param('ns3::Time', 'txopLimit')], 
+                   is_virtual=True)
     ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetMinCw() const [member function]
     cls.add_method('GetMinCw', 
                    'uint32_t', 
@@ -8144,6 +9420,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): ns3::Time ns3::EdcaTxopN::GetTxopLimit() const [member function]
+    cls.add_method('GetTxopLimit', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::MacLow> ns3::EdcaTxopN::Low() [member function]
     cls.add_method('Low', 
                    'ns3::Ptr< ns3::MacLow >', 
@@ -8158,10 +9439,11 @@
                    '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]
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetBaAgreementExists(ns3::Mac48Address address, uint8_t tid) const [member function]
     cls.add_method('GetBaAgreementExists', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')])
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')], 
+                   is_const=True)
     ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNOutstandingPacketsInBa(ns3::Mac48Address address, uint8_t tid) [member function]
     cls.add_method('GetNOutstandingPacketsInBa', 
                    'uint32_t', 
@@ -8236,6 +9518,10 @@
     cls.add_method('MissedAck', 
                    'void', 
                    [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::StartNextFragment() [member function]
+    cls.add_method('StartNextFragment', 
+                   'void', 
+                   [])
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::StartNext() [member function]
     cls.add_method('StartNext', 
                    'void', 
@@ -8256,14 +9542,14 @@
     cls.add_method('StartAccessIfNeeded', 
                    'void', 
                    [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRtsRetransmission() [member function]
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRtsRetransmission(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
     cls.add_method('NeedRtsRetransmission', 
                    'bool', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedDataRetransmission() [member function]
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedDataRetransmission(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
     cls.add_method('NeedDataRetransmission', 
                    'bool', 
-                   [])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
     ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedBarRetransmission() [member function]
     cls.add_method('NeedBarRetransmission', 
                    'bool', 
@@ -8343,10 +9629,11 @@
     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(ns3::Mac48Address dest) [member function]
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetAmpduExist(ns3::Mac48Address dest) const [member function]
     cls.add_method('GetAmpduExist', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'dest')])
+                   [param('ns3::Mac48Address', 'dest')], 
+                   is_const=True)
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAmpduExist(ns3::Mac48Address dest, bool enableAmpdu) [member function]
     cls.add_method('SetAmpduExist', 
                    'void', 
@@ -8386,6 +9673,104 @@
                    visibility='private', 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_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -8486,6 +9871,44 @@
                    [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_Ns3ErpInformation_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## erp-information.h (module 'wifi'): ns3::ErpInformation::ErpInformation(ns3::ErpInformation const & arg0) [copy constructor]
@@ -8583,16 +10006,38 @@
     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')])
+                   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::WifiTxVector txVector, double ber) const [member function]
+    cls.add_method('CalculateSnr', 
+                   'double', 
+                   [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', 
+                   'double', 
+                   [param('ns3::WifiMode', 'mode'), param('ns3::WifiTxVector', 'txVector'), param('double', 'snr'), param('uint32_t', 'nbits')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## error-rate-model.h (module 'wifi'): static ns3::TypeId ns3::ErrorRateModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     return
 
 def register_Ns3EventImpl_methods(root_module, cls):
@@ -8619,6 +10064,44 @@
                    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_Ns3ExtendedSupportedRatesIE_methods(root_module, cls):
     ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE::ExtendedSupportedRatesIE(ns3::ExtendedSupportedRatesIE const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::ExtendedSupportedRatesIE const &', 'arg0')])
@@ -8662,6 +10145,44 @@
                    [param('ns3::SupportedRates *', 'rates')])
     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_Ns3HtCapabilities_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities::HtCapabilities(ns3::HtCapabilities const & arg0) [copy constructor]
@@ -9424,6 +10945,44 @@
                    [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([])
@@ -9588,6 +11147,71 @@
                    is_static=True)
     return
 
+def register_Ns3MobilityModel_methods(root_module, cls):
+    ## mobility-model.h (module 'mobility'): ns3::MobilityModel::MobilityModel(ns3::MobilityModel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MobilityModel const &', 'arg0')])
+    ## mobility-model.h (module 'mobility'): ns3::MobilityModel::MobilityModel() [constructor]
+    cls.add_constructor([])
+    ## mobility-model.h (module 'mobility'): int64_t ns3::MobilityModel::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## mobility-model.h (module 'mobility'): double ns3::MobilityModel::GetDistanceFrom(ns3::Ptr<const ns3::MobilityModel> position) const [member function]
+    cls.add_method('GetDistanceFrom', 
+                   'double', 
+                   [param('ns3::Ptr< ns3::MobilityModel const >', 'position')], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::GetPosition() const [member function]
+    cls.add_method('GetPosition', 
+                   'ns3::Vector', 
+                   [], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): double ns3::MobilityModel::GetRelativeSpeed(ns3::Ptr<const ns3::MobilityModel> other) const [member function]
+    cls.add_method('GetRelativeSpeed', 
+                   'double', 
+                   [param('ns3::Ptr< ns3::MobilityModel const >', 'other')], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): static ns3::TypeId ns3::MobilityModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::GetVelocity() const [member function]
+    cls.add_method('GetVelocity', 
+                   'ns3::Vector', 
+                   [], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::SetPosition(ns3::Vector const & position) [member function]
+    cls.add_method('SetPosition', 
+                   'void', 
+                   [param('ns3::Vector const &', 'position')])
+    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::NotifyCourseChange() const [member function]
+    cls.add_method('NotifyCourseChange', 
+                   'void', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## mobility-model.h (module 'mobility'): int64_t ns3::MobilityModel::DoAssignStreams(int64_t start) [member function]
+    cls.add_method('DoAssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'start')], 
+                   visibility='private', is_virtual=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::DoGetPosition() const [member function]
+    cls.add_method('DoGetPosition', 
+                   'ns3::Vector', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::DoGetVelocity() const [member function]
+    cls.add_method('DoGetVelocity', 
+                   'ns3::Vector', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::DoSetPosition(ns3::Vector const & position) [member function]
+    cls.add_method('DoSetPosition', 
+                   'void', 
+                   [param('ns3::Vector const &', 'position')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -9725,16 +11349,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -9762,35 +11401,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -9938,6 +11572,51 @@
                    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([])
@@ -10176,6 +11855,49 @@
                    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_Ns3QueueItem_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
@@ -10190,6 +11912,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
@@ -10534,6 +12261,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetDsssSupported(bool enable) [member function]
+    cls.add_method('SetDsssSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): bool ns3::RegularWifiMac::GetDsssSupported() const [member function]
+    cls.add_method('GetDsssSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
     return
 
 def register_Ns3Ssid_methods(root_module, cls):
@@ -10629,6 +12366,10 @@
     cls.add_constructor([])
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates(ns3::SupportedRates const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SupportedRates const &', 'arg0')])
+    ## supported-rates.h (module 'wifi'): void ns3::SupportedRates::AddBssMembershipSelectorRate(uint32_t bs) [member function]
+    cls.add_method('AddBssMembershipSelectorRate', 
+                   'void', 
+                   [param('uint32_t', 'bs')])
     ## supported-rates.h (module 'wifi'): void ns3::SupportedRates::AddSupportedRate(uint32_t bs) [member function]
     cls.add_method('AddSupportedRate', 
                    'void', 
@@ -10663,6 +12404,11 @@
                    'bool', 
                    [param('uint32_t', 'bs')], 
                    is_const=True)
+    ## supported-rates.h (module 'wifi'): bool ns3::SupportedRates::IsBssMembershipSelectorRate(uint32_t bs) const [member function]
+    cls.add_method('IsBssMembershipSelectorRate', 
+                   'bool', 
+                   [param('uint32_t', 'bs')], 
+                   is_const=True)
     ## supported-rates.h (module 'wifi'): bool ns3::SupportedRates::IsSupportedRate(uint32_t bs) const [member function]
     cls.add_method('IsSupportedRate', 
                    'bool', 
@@ -10789,6 +12535,86 @@
                    [param('uint64_t const &', 'value')])
     return
 
+def register_Ns3Vector2DChecker_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector2DChecker::Vector2DChecker() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2DChecker::Vector2DChecker(ns3::Vector2DChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2DChecker const &', 'arg0')])
+    return
+
+def register_Ns3Vector2DValue_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue(ns3::Vector2DValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2DValue const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue(ns3::Vector2D const & value) [constructor]
+    cls.add_constructor([param('ns3::Vector2D const &', 'value')])
+    ## vector.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::Vector2DValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vector.h (module 'core'): bool ns3::Vector2DValue::DeserializeFromString(std::string value, ns3::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)
+    ## vector.h (module 'core'): ns3::Vector2D ns3::Vector2DValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Vector2D', 
+                   [], 
+                   is_const=True)
+    ## vector.h (module 'core'): std::string ns3::Vector2DValue::SerializeToString(ns3::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)
+    ## vector.h (module 'core'): void ns3::Vector2DValue::Set(ns3::Vector2D const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Vector2D const &', 'value')])
+    return
+
+def register_Ns3Vector3DChecker_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector3DChecker::Vector3DChecker() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3DChecker::Vector3DChecker(ns3::Vector3DChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3DChecker const &', 'arg0')])
+    return
+
+def register_Ns3Vector3DValue_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue(ns3::Vector3DValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3DValue const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue(ns3::Vector3D const & value) [constructor]
+    cls.add_constructor([param('ns3::Vector3D const &', 'value')])
+    ## vector.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::Vector3DValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vector.h (module 'core'): bool ns3::Vector3DValue::DeserializeFromString(std::string value, ns3::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)
+    ## vector.h (module 'core'): ns3::Vector3D ns3::Vector3DValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Vector3D', 
+                   [], 
+                   is_const=True)
+    ## vector.h (module 'core'): std::string ns3::Vector3DValue::SerializeToString(ns3::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)
+    ## vector.h (module 'core'): void ns3::Vector3DValue::Set(ns3::Vector3D const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Vector3D const &', 'value')])
+    return
+
 def register_Ns3VhtCapabilities_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities::VhtCapabilities(ns3::VhtCapabilities const & arg0) [copy constructor]
@@ -11020,6 +12846,18 @@
                    [param('ns3::VhtCapabilities const &', 'value')])
     return
 
+def register_Ns3WifiChannel_methods(root_module, cls):
+    ## wifi-channel.h (module 'wifi'): ns3::WifiChannel::WifiChannel() [constructor]
+    cls.add_constructor([])
+    ## wifi-channel.h (module 'wifi'): ns3::WifiChannel::WifiChannel(ns3::WifiChannel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiChannel const &', 'arg0')])
+    ## wifi-channel.h (module 'wifi'): static ns3::TypeId ns3::WifiChannel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3WifiModeChecker_methods(root_module, cls):
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker::WifiModeChecker() [constructor]
     cls.add_constructor([])
@@ -11176,6 +13014,11 @@
                    'void', 
                    [param('uint32_t', 'aifsn')], 
                    is_virtual=True)
+    ## dca-txop.h (module 'wifi'): void ns3::DcaTxop::SetTxopLimit(ns3::Time txopLimit) [member function]
+    cls.add_method('SetTxopLimit', 
+                   'void', 
+                   [param('ns3::Time', 'txopLimit')], 
+                   is_virtual=True)
     ## dca-txop.h (module 'wifi'): uint32_t ns3::DcaTxop::GetMinCw() const [member function]
     cls.add_method('GetMinCw', 
                    'uint32_t', 
@@ -11191,6 +13034,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## dca-txop.h (module 'wifi'): ns3::Time ns3::DcaTxop::GetTxopLimit() const [member function]
+    cls.add_method('GetTxopLimit', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## dca-txop.h (module 'wifi'): void ns3::DcaTxop::Queue(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
     cls.add_method('Queue', 
                    'void', 
diff -Naur ns-3.25/src/mesh/bindings/modulegen__gcc_LP64.py ns-3.26/src/mesh/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/mesh/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.317247090 -0700
+++ ns-3.26/src/mesh/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.620387854 -0700
@@ -31,7 +31,7 @@
     ## 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')
+    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', 'WIFI_PHY_STANDARD_UNSPECIFIED'], 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]
@@ -80,6 +80,10 @@
     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')
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper [class]
+    module.add_class('InterferenceHelper', import_from_module='ns.wifi')
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer [struct]
+    module.add_class('SnrPer', import_from_module='ns.wifi', outer_class=root_module['ns3::InterferenceHelper'])
     ## 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]
@@ -138,14 +142,16 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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]
     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')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], import_from_module='ns.core')
     ## status-code.h (module 'wifi'): ns3::StatusCode [class]
     module.add_class('StatusCode', import_from_module='ns.wifi')
     ## tag.h (module 'network'): ns3::Tag [class]
@@ -154,14 +160,22 @@
     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]
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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'])
+    ## vector.h (module 'core'): ns3::Vector2D [class]
+    module.add_class('Vector2D', import_from_module='ns.core')
+    ## vector.h (module 'core'): ns3::Vector3D [class]
+    module.add_class('Vector3D', import_from_module='ns.core')
     ## wifi-helper.h (module 'wifi'): ns3::WifiHelper [class]
     module.add_class('WifiHelper', allow_subclassing=True, import_from_module='ns.wifi')
     ## wifi-mac-helper.h (module 'wifi'): ns3::WifiMacHelper [class]
@@ -171,7 +185,9 @@
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeFactory [class]
     module.add_class('WifiModeFactory', import_from_module='ns.wifi')
     ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper [class]
-    module.add_class('WifiPhyHelper', allow_subclassing=True, import_from_module='ns.wifi')
+    module.add_class('WifiPhyHelper', import_from_module='ns.wifi', parent=[root_module['ns3::PcapHelperForDevice'], root_module['ns3::AsciiTraceHelperForDevice']])
+    ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::SupportedPcapDataLinkTypes [enumeration]
+    module.add_enum('SupportedPcapDataLinkTypes', ['DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO'], outer_class=root_module['ns3::WifiPhyHelper'], import_from_module='ns.wifi')
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhyListener [class]
     module.add_class('WifiPhyListener', allow_subclassing=True, import_from_module='ns.wifi')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStation [struct]
@@ -218,6 +234,10 @@
     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'])
+    ## 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]
@@ -230,6 +250,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::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', 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::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]
@@ -260,6 +282,12 @@
     module.add_class('TraceSourceAccessor', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     ## trailer.h (module 'network'): ns3::Trailer [class]
     module.add_class('Trailer', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
+    ## 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'])
     ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader [class]
     module.add_class('WifiActionHeader', import_from_module='ns.wifi', parent=root_module['ns3::Header'])
     ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::CategoryValue [enumeration]
@@ -294,6 +322,10 @@
     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]
+    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]
@@ -312,32 +344,62 @@
     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'])
+    ## random-variable-stream.h (module 'core'): ns3::ConstantRandomVariable [class]
+    module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckRequestHeader [class]
     module.add_class('CtrlBAckRequestHeader', import_from_module='ns.wifi', parent=root_module['ns3::Header'])
     ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckResponseHeader [class]
     module.add_class('CtrlBAckResponseHeader', import_from_module='ns.wifi', parent=root_module['ns3::Header'])
     ## dcf.h (module 'wifi'): ns3::Dcf [class]
     module.add_class('Dcf', import_from_module='ns.wifi', 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'])
     ## double.h (module 'core'): ns3::DoubleValue [class]
     module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet [class]
+    module.add_class('DsssParameterSet', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetChecker [class]
+    module.add_class('DsssParameterSetChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue [class]
+    module.add_class('DsssParameterSetValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet [class]
+    module.add_class('EdcaParameterSet', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetChecker [class]
+    module.add_class('EdcaParameterSetChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue [class]
+    module.add_class('EdcaParameterSetValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
     ## edca-txop-n.h (module 'wifi'): ns3::EdcaTxopN [class]
     module.add_class('EdcaTxopN', import_from_module='ns.wifi', parent=root_module['ns3::Dcf'])
+    ## 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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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'])
     ## 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'])
+    ## error-rate-model.h (module 'wifi'): ns3::ErrorRateModel [class]
+    module.add_class('ErrorRateModel', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
     ## 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'])
     ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE [class]
     module.add_class('ExtendedSupportedRatesIE', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## random-variable-stream.h (module 'core'): ns3::GammaRandomVariable [class]
+    module.add_class('GammaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities [class]
     module.add_class('HtCapabilities', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
     ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker [class]
@@ -368,6 +430,8 @@
     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]
@@ -382,6 +446,8 @@
     module.add_class('MeshWifiInterfaceMacPlugin', parent=root_module['ns3::SimpleRefCount< ns3::MeshWifiInterfaceMacPlugin, ns3::empty, ns3::DefaultDeleter<ns3::MeshWifiInterfaceMacPlugin> >'])
     ## mgt-headers.h (module 'wifi'): ns3::MgtBeaconHeader [class]
     module.add_class('MgtBeaconHeader', import_from_module='ns.wifi', parent=root_module['ns3::MgtProbeResponseHeader'])
+    ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
+    module.add_class('MobilityModel', import_from_module='ns.mobility', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -394,6 +460,8 @@
     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]
@@ -402,8 +470,12 @@
     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> >'])
+    ## 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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -422,12 +494,22 @@
     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]
+    module.add_class('Vector2DValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## vector.h (module 'core'): ns3::Vector3DChecker [class]
+    module.add_class('Vector3DChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## vector.h (module 'core'): ns3::Vector3DValue [class]
+    module.add_class('Vector3DValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities [class]
     module.add_class('VhtCapabilities', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
     ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesChecker [class]
     module.add_class('VhtCapabilitiesChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
     ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesValue [class]
     module.add_class('VhtCapabilitiesValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
+    ## wifi-channel.h (module 'wifi'): ns3::WifiChannel [class]
+    module.add_class('WifiChannel', import_from_module='ns.wifi', parent=root_module['ns3::Channel'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker [class]
     module.add_class('WifiModeChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeValue [class]
@@ -455,9 +537,21 @@
     typehandlers.add_type_alias(u'uint8_t', u'ns3::WifiInformationElementId')
     typehandlers.add_type_alias(u'uint8_t*', u'ns3::WifiInformationElementId*')
     typehandlers.add_type_alias(u'uint8_t&', u'ns3::WifiInformationElementId&')
+    typehandlers.add_type_alias(u'ns3::Vector3D', u'ns3::Vector')
+    typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
+    typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
+    module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', u'ns3::WifiModeList')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', u'ns3::WifiModeList*')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', u'ns3::WifiModeList&')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue', u'ns3::VectorValue')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue*', u'ns3::VectorValue*')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue&', u'ns3::VectorValue&')
+    module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker', u'ns3::VectorChecker')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker*', u'ns3::VectorChecker*')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker&', u'ns3::VectorChecker&')
+    module.add_typedef(root_module['ns3::Vector3DChecker'], 'VectorChecker')
     typehandlers.add_type_alias(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&')
@@ -507,12 +601,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(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&')
+    typehandlers.add_type_alias(u'uint32_t ( * ) ( char const *, size_t ) *', u'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias(u'uint32_t ( * ) ( char const *, size_t ) **', u'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias(u'uint32_t ( * ) ( char const *, size_t ) *&', u'ns3::Hash::Hash32Function_ptr&')
     
     ## Register a nested module for the namespace Function
     
@@ -562,6 +656,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_dot11s(module):
     root_module = module.get_root()
@@ -570,14 +667,14 @@
     module.add_enum('dot11sSynchronizationProtocolIdentifier', ['SYNC_NEIGHBOUR_OFFSET', 'SYNC_NULL'])
     ## ie-dot11s-configuration.h (module 'mesh'): ns3::dot11s::dot11sCongestionControlMode [enumeration]
     module.add_enum('dot11sCongestionControlMode', ['CONGESTION_SIGNALING', 'CONGESTION_NULL'])
-    ## ie-dot11s-configuration.h (module 'mesh'): ns3::dot11s::dot11sAuthenticationProtocol [enumeration]
-    module.add_enum('dot11sAuthenticationProtocol', ['AUTH_NULL', 'AUTH_SAE', 'AUTH_IEEE'])
     ## ie-dot11s-configuration.h (module 'mesh'): ns3::dot11s::dot11sPathSelectionMetric [enumeration]
     module.add_enum('dot11sPathSelectionMetric', ['METRIC_AIRTIME'])
     ## ie-dot11s-peer-management.h (module 'mesh'): ns3::dot11s::PmpReasonCode [enumeration]
     module.add_enum('PmpReasonCode', ['REASON11S_PEERING_CANCELLED', 'REASON11S_MESH_MAX_PEERS', 'REASON11S_MESH_CAPABILITY_POLICY_VIOLATION', 'REASON11S_MESH_CLOSE_RCVD', 'REASON11S_MESH_MAX_RETRIES', 'REASON11S_MESH_CONFIRM_TIMEOUT', 'REASON11S_MESH_INVALID_GTK', 'REASON11S_MESH_INCONSISTENT_PARAMETERS', 'REASON11S_MESH_INVALID_SECURITY_CAPABILITY', 'REASON11S_RESERVED'])
     ## ie-dot11s-configuration.h (module 'mesh'): ns3::dot11s::dot11sPathSelectionProtocol [enumeration]
     module.add_enum('dot11sPathSelectionProtocol', ['PROTOCOL_HWMP'])
+    ## ie-dot11s-configuration.h (module 'mesh'): ns3::dot11s::dot11sAuthenticationProtocol [enumeration]
+    module.add_enum('dot11sAuthenticationProtocol', ['AUTH_NULL', 'AUTH_SAE', 'AUTH_IEEE'])
     ## ie-dot11s-preq.h (module 'mesh'): ns3::dot11s::DestinationAddressUnit [class]
     module.add_class('DestinationAddressUnit', parent=root_module['ns3::SimpleRefCount< ns3::dot11s::DestinationAddressUnit, ns3::empty, ns3::DefaultDeleter<ns3::dot11s::DestinationAddressUnit> >'])
     ## ie-dot11s-configuration.h (module 'mesh'): ns3::dot11s::Dot11sMeshCapability [class]
@@ -685,6 +782,8 @@
     register_Ns3CapabilityInformation_methods(root_module, root_module['ns3::CapabilityInformation'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
     register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
+    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'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -714,9 +813,12 @@
     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'])
+    register_Ns3Vector2D_methods(root_module, root_module['ns3::Vector2D'])
+    register_Ns3Vector3D_methods(root_module, root_module['ns3::Vector3D'])
     register_Ns3WifiHelper_methods(root_module, root_module['ns3::WifiHelper'])
     register_Ns3WifiMacHelper_methods(root_module, root_module['ns3::WifiMacHelper'])
     register_Ns3WifiMode_methods(root_module, root_module['ns3::WifiMode'])
@@ -743,12 +845,15 @@
     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_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__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__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> >'])
@@ -762,6 +867,9 @@
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
     register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
+    register_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_Ns3WifiActionHeader_methods(root_module, root_module['ns3::WifiActionHeader'])
     register_Ns3WifiActionHeaderActionValue_methods(root_module, root_module['ns3::WifiActionHeader::ActionValue'])
     register_Ns3WifiInformationElement_methods(root_module, root_module['ns3::WifiInformationElement'])
@@ -770,6 +878,8 @@
     register_Ns3WifiMacHeader_methods(root_module, root_module['ns3::WifiMacHeader'])
     register_Ns3WifiPhy_methods(root_module, root_module['ns3::WifiPhy'])
     register_Ns3WifiRemoteStationManager_methods(root_module, root_module['ns3::WifiRemoteStationManager'])
+    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'])
@@ -779,19 +889,34 @@
     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_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3CtrlBAckRequestHeader_methods(root_module, root_module['ns3::CtrlBAckRequestHeader'])
     register_Ns3CtrlBAckResponseHeader_methods(root_module, root_module['ns3::CtrlBAckResponseHeader'])
     register_Ns3Dcf_methods(root_module, root_module['ns3::Dcf'])
+    register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
+    register_Ns3DsssParameterSet_methods(root_module, root_module['ns3::DsssParameterSet'])
+    register_Ns3DsssParameterSetChecker_methods(root_module, root_module['ns3::DsssParameterSetChecker'])
+    register_Ns3DsssParameterSetValue_methods(root_module, root_module['ns3::DsssParameterSetValue'])
+    register_Ns3EdcaParameterSet_methods(root_module, root_module['ns3::EdcaParameterSet'])
+    register_Ns3EdcaParameterSetChecker_methods(root_module, root_module['ns3::EdcaParameterSetChecker'])
+    register_Ns3EdcaParameterSetValue_methods(root_module, root_module['ns3::EdcaParameterSetValue'])
     register_Ns3EdcaTxopN_methods(root_module, root_module['ns3::EdcaTxopN'])
+    register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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_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'])
     register_Ns3ExtendedSupportedRatesIE_methods(root_module, root_module['ns3::ExtendedSupportedRatesIE'])
+    register_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
     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'])
@@ -807,6 +932,7 @@
     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_Ns3MeshInformationElementVector_methods(root_module, root_module['ns3::MeshInformationElementVector'])
@@ -814,15 +940,18 @@
     register_Ns3MeshStack_methods(root_module, root_module['ns3::MeshStack'])
     register_Ns3MeshWifiInterfaceMacPlugin_methods(root_module, root_module['ns3::MeshWifiInterfaceMacPlugin'])
     register_Ns3MgtBeaconHeader_methods(root_module, root_module['ns3::MgtBeaconHeader'])
+    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'])
     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_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
     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'])
@@ -833,9 +962,14 @@
     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'])
+    register_Ns3Vector3DValue_methods(root_module, root_module['ns3::Vector3DValue'])
     register_Ns3VhtCapabilities_methods(root_module, root_module['ns3::VhtCapabilities'])
     register_Ns3VhtCapabilitiesChecker_methods(root_module, root_module['ns3::VhtCapabilitiesChecker'])
     register_Ns3VhtCapabilitiesValue_methods(root_module, root_module['ns3::VhtCapabilitiesValue'])
+    register_Ns3WifiChannel_methods(root_module, root_module['ns3::WifiChannel'])
     register_Ns3WifiModeChecker_methods(root_module, root_module['ns3::WifiModeChecker'])
     register_Ns3WifiModeValue_methods(root_module, root_module['ns3::WifiModeValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
@@ -1314,9 +1448,13 @@
     cls.add_method('NotifyMpduTransmission', 
                    'void', 
                    [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('uint16_t', 'nextSeqNumber'), param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
-    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacket(ns3::WifiMacHeader & hdr, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacket(ns3::WifiMacHeader & hdr) [member function]
     cls.add_method('PeekNextPacket', 
                    'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'hdr')])
+    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacketByTidAndAddress(ns3::WifiMacHeader & hdr, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextPacketByTidAndAddress', 
+                   'ns3::Ptr< ns3::Packet const >', 
                    [param('ns3::WifiMacHeader &', 'hdr'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')])
     ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::RemovePacket(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
     cls.add_method('RemovePacket', 
@@ -1482,6 +1620,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1876,6 +2019,74 @@
                    [])
     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')])
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::InterferenceHelper() [constructor]
+    cls.add_constructor([])
+    ## interference-helper.h (module 'wifi'): ns3::Ptr<ns3::InterferenceHelper::Event> ns3::InterferenceHelper::Add(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::Time duration, double rxPower) [member function]
+    cls.add_method('Add', 
+                   'ns3::Ptr< ns3::InterferenceHelper::Event >', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::Time', 'duration'), param('double', 'rxPower')])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::AddForeignSignal(ns3::Time duration, double rxPower) [member function]
+    cls.add_method('AddForeignSignal', 
+                   'void', 
+                   [param('ns3::Time', 'duration'), param('double', 'rxPower')])
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer ns3::InterferenceHelper::CalculatePlcpHeaderSnrPer(ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
+    cls.add_method('CalculatePlcpHeaderSnrPer', 
+                   'ns3::InterferenceHelper::SnrPer', 
+                   [param('ns3::Ptr< ns3::InterferenceHelper::Event >', 'event')])
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer ns3::InterferenceHelper::CalculatePlcpPayloadSnrPer(ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
+    cls.add_method('CalculatePlcpPayloadSnrPer', 
+                   'ns3::InterferenceHelper::SnrPer', 
+                   [param('ns3::Ptr< ns3::InterferenceHelper::Event >', 'event')])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::EraseEvents() [member function]
+    cls.add_method('EraseEvents', 
+                   'void', 
+                   [])
+    ## interference-helper.h (module 'wifi'): ns3::Time ns3::InterferenceHelper::GetEnergyDuration(double energyW) [member function]
+    cls.add_method('GetEnergyDuration', 
+                   'ns3::Time', 
+                   [param('double', 'energyW')])
+    ## interference-helper.h (module 'wifi'): ns3::Ptr<ns3::ErrorRateModel> ns3::InterferenceHelper::GetErrorRateModel() const [member function]
+    cls.add_method('GetErrorRateModel', 
+                   'ns3::Ptr< ns3::ErrorRateModel >', 
+                   [], 
+                   is_const=True)
+    ## interference-helper.h (module 'wifi'): double ns3::InterferenceHelper::GetNoiseFigure() const [member function]
+    cls.add_method('GetNoiseFigure', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::NotifyRxEnd() [member function]
+    cls.add_method('NotifyRxEnd', 
+                   'void', 
+                   [])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::NotifyRxStart() [member function]
+    cls.add_method('NotifyRxStart', 
+                   'void', 
+                   [])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::SetErrorRateModel(ns3::Ptr<ns3::ErrorRateModel> rate) [member function]
+    cls.add_method('SetErrorRateModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::ErrorRateModel >', 'rate')])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::SetNoiseFigure(double value) [member function]
+    cls.add_method('SetNoiseFigure', 
+                   'void', 
+                   [param('double', 'value')])
+    return
+
+def register_Ns3InterferenceHelperSnrPer_methods(root_module, cls):
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer::SnrPer() [constructor]
+    cls.add_constructor([])
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer::SnrPer(ns3::InterferenceHelper::SnrPer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::InterferenceHelper::SnrPer const &', 'arg0')])
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer::per [variable]
+    cls.add_instance_attribute('per', 'double', is_const=False)
+    ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer::snr [variable]
+    cls.add_instance_attribute('snr', 'double', is_const=False)
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -3020,10 +3231,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3300,6 +3511,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('<')
@@ -3311,23 +3556,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3442,6 +3687,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -3463,10 +3713,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -3488,6 +3738,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -3503,6 +3757,40 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
+    return
+
+def register_Ns3Vector2D_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D(ns3::Vector2D const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2D const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D(double _x, double _y) [constructor]
+    cls.add_constructor([param('double', '_x'), param('double', '_y')])
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2D::x [variable]
+    cls.add_instance_attribute('x', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector2D::y [variable]
+    cls.add_instance_attribute('y', 'double', is_const=False)
+    return
+
+def register_Ns3Vector3D_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D(ns3::Vector3D const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3D const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D(double _x, double _y, double _z) [constructor]
+    cls.add_constructor([param('double', '_x'), param('double', '_y'), param('double', '_z')])
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3D::x [variable]
+    cls.add_instance_attribute('x', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector3D::y [variable]
+    cls.add_instance_attribute('y', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector3D::z [variable]
+    cls.add_instance_attribute('z', 'double', is_const=False)
     return
 
 def register_Ns3WifiHelper_methods(root_module, cls):
@@ -3664,15 +3952,52 @@
     return
 
 def register_Ns3WifiPhyHelper_methods(root_module, cls):
-    ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper() [constructor]
-    cls.add_constructor([])
     ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper(ns3::WifiPhyHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiPhyHelper const &', 'arg0')])
+    ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper() [constructor]
+    cls.add_constructor([])
     ## wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('Create', 
                    'ns3::Ptr< ns3::WifiPhy >', 
                    [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-helper.h (module 'wifi'): ns3::PcapHelper::DataLinkType ns3::WifiPhyHelper::GetPcapDataLinkType() const [member function]
+    cls.add_method('GetPcapDataLinkType', 
+                   'ns3::PcapHelper::DataLinkType', 
+                   [], 
+                   is_const=True)
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::Set(std::string name, ns3::AttributeValue const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'v')])
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::SetErrorRateModel(std::string name, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetErrorRateModel', 
+                   'void', 
+                   [param('std::string', 'name'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::SetPcapDataLinkType(ns3::WifiPhyHelper::SupportedPcapDataLinkTypes dlt) [member function]
+    cls.add_method('SetPcapDataLinkType', 
+                   'void', 
+                   [param('ns3::WifiPhyHelper::SupportedPcapDataLinkTypes', 'dlt')])
+    ## wifi-helper.h (module 'wifi'): static void ns3::WifiPhyHelper::PcapSniffRxEvent(ns3::Ptr<ns3::PcapFileWrapper> file, 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('PcapSniffRxEvent', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PcapFileWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::signalNoiseDbm', 'signalNoise')], 
+                   is_static=True, visibility='protected')
+    ## wifi-helper.h (module 'wifi'): static void ns3::WifiPhyHelper::PcapSniffTxEvent(ns3::Ptr<ns3::PcapFileWrapper> file, ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector, ns3::mpduInfo aMpdu) [member function]
+    cls.add_method('PcapSniffTxEvent', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PcapFileWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector'), param('ns3::mpduInfo', 'aMpdu')], 
+                   is_static=True, visibility='protected')
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiInternal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapInternal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3WifiPhyListener_methods(root_module, cls):
@@ -4332,6 +4657,11 @@
                    'ns3::CapabilityInformation', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::EdcaParameterSet ns3::MgtAssocResponseHeader::GetEdcaParameterSet() const [member function]
+    cls.add_method('GetEdcaParameterSet', 
+                   'ns3::EdcaParameterSet', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::ErpInformation ns3::MgtAssocResponseHeader::GetErpInformation() const [member function]
     cls.add_method('GetErpInformation', 
                    'ns3::ErpInformation', 
@@ -4389,6 +4719,10 @@
     cls.add_method('SetCapabilities', 
                    'void', 
                    [param('ns3::CapabilityInformation', 'capabilities')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetEdcaParameterSet(ns3::EdcaParameterSet edcaParameterSet) [member function]
+    cls.add_method('SetEdcaParameterSet', 
+                   'void', 
+                   [param('ns3::EdcaParameterSet', 'edcaParameterSet')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetErpInformation(ns3::ErpInformation erpInformation) [member function]
     cls.add_method('SetErpInformation', 
                    'void', 
@@ -4567,6 +4901,16 @@
                    'ns3::CapabilityInformation', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::DsssParameterSet ns3::MgtProbeResponseHeader::GetDsssParameterSet() const [member function]
+    cls.add_method('GetDsssParameterSet', 
+                   'ns3::DsssParameterSet', 
+                   [], 
+                   is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::EdcaParameterSet ns3::MgtProbeResponseHeader::GetEdcaParameterSet() const [member function]
+    cls.add_method('GetEdcaParameterSet', 
+                   'ns3::EdcaParameterSet', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::ErpInformation ns3::MgtProbeResponseHeader::GetErpInformation() const [member function]
     cls.add_method('GetErpInformation', 
                    'ns3::ErpInformation', 
@@ -4634,6 +4978,14 @@
     cls.add_method('SetCapabilities', 
                    'void', 
                    [param('ns3::CapabilityInformation', 'capabilities')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetDsssParameterSet(ns3::DsssParameterSet dsssParameterSet) [member function]
+    cls.add_method('SetDsssParameterSet', 
+                   'void', 
+                   [param('ns3::DsssParameterSet', 'dsssParameterSet')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetEdcaParameterSet(ns3::EdcaParameterSet edcaParameterSet) [member function]
+    cls.add_method('SetEdcaParameterSet', 
+                   'void', 
+                   [param('ns3::EdcaParameterSet', 'edcaParameterSet')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetErpInformation(ns3::ErpInformation erpInformation) [member function]
     cls.add_method('SetErpInformation', 
                    'void', 
@@ -4690,6 +5042,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -4806,6 +5163,89 @@
                    [])
     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([])
@@ -4878,6 +5318,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3InterferenceHelperEvent_Ns3Empty_Ns3DefaultDeleter__lt__ns3InterferenceHelperEvent__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> >::SimpleRefCount(ns3::SimpleRefCount<ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter< ns3::InterferenceHelper::Event > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3MeshWifiInterfaceMacPlugin_Ns3Empty_Ns3DefaultDeleter__lt__ns3MeshWifiInterfaceMacPlugin__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::MeshWifiInterfaceMacPlugin, ns3::empty, ns3::DefaultDeleter<ns3::MeshWifiInterfaceMacPlugin> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -5256,6 +5708,130 @@
                    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_Ns3WifiActionHeader_methods(root_module, cls):
     ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::WifiActionHeader(ns3::WifiActionHeader const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiActionHeader const &', 'arg0')])
@@ -5674,10 +6250,10 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureDcf(ns3::Ptr<ns3::Dcf> dcf, uint32_t cwmin, uint32_t cwmax, ns3::AcIndex ac) [member function]
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureDcf(ns3::Ptr<ns3::Dcf> dcf, uint32_t cwmin, uint32_t cwmax, bool isDsss, ns3::AcIndex ac) [member function]
     cls.add_method('ConfigureDcf', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Dcf >', 'dcf'), param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('ns3::AcIndex', 'ac')], 
+                   [param('ns3::Ptr< ns3::Dcf >', 'dcf'), param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('bool', 'isDsss'), param('ns3::AcIndex', 'ac')], 
                    visibility='protected')
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('FinishConfigureStandard', 
@@ -6126,16 +6702,16 @@
     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]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::AddSupportedChannelWidth(uint32_t channelwidth) [member function]
     cls.add_method('AddSupportedChannelWidth', 
                    'void', 
-                   [param('uint32_t', 'width')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   [param('uint32_t', 'channelwidth')], 
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): int64_t ns3::WifiPhy::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
                    [param('int64_t', 'stream')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculatePlcpPreambleAndHeaderDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('CalculatePlcpPreambleAndHeaderDuration', 
                    'ns3::Time', 
@@ -6144,7 +6720,7 @@
     cls.add_method('CalculateSnr', 
                    'double', 
                    [param('ns3::WifiTxVector', 'txVector'), param('double', 'ber')], 
-                   is_pure_virtual=True, is_const=True, is_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) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
@@ -6157,12 +6733,31 @@
     cls.add_method('ConfigureStandard', 
                    'void', 
                    [param('ns3::WifiPhyStandard', 'standard')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::DbToRatio(double db) const [member function]
+    cls.add_method('DbToRatio', 
+                   'double', 
+                   [param('double', 'db')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::DbmToW(double dbm) const [member function]
+    cls.add_method('DbmToW', 
+                   'double', 
+                   [param('double', 'dbm')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DefineChannelNumber(uint16_t channelNumber, ns3::WifiPhyStandard standard, uint32_t frequency, uint32_t channelWidth) [member function]
+    cls.add_method('DefineChannelNumber', 
+                   'bool', 
+                   [param('uint16_t', 'channelNumber'), param('ns3::WifiPhyStandard', 'standard'), param('uint32_t', 'frequency'), param('uint32_t', 'channelWidth')])
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
     cls.add_method('GetBssMembershipSelector', 
                    'uint32_t', 
                    [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetCcaMode1Threshold() const [member function]
+    cls.add_method('GetCcaMode1Threshold', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::WifiPhy::GetChannel() const [member function]
     cls.add_method('GetChannel', 
                    'ns3::Ptr< ns3::WifiChannel >', 
@@ -6172,26 +6767,31 @@
     cls.add_method('GetChannelNumber', 
                    'uint16_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetChannelSwitchDelay() const [member function]
     cls.add_method('GetChannelSwitchDelay', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetChannelWidth() const [member function]
     cls.add_method('GetChannelWidth', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate11Mbps() [member function]
-    cls.add_method('GetDsssRate11Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::NetDevice> ns3::WifiPhy::GetDevice() const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate11Mbps() [member function]
+    cls.add_method('GetDsssRate11Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate1Mbps() [member function]
     cls.add_method('GetDsssRate1Mbps', 
@@ -6208,6 +6808,16 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetEdThreshold() const [member function]
+    cls.add_method('GetEdThreshold', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetEdThresholdW() const [member function]
+    cls.add_method('GetEdThresholdW', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate12Mbps() [member function]
     cls.add_method('GetErpOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -6248,21 +6858,26 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::ErrorRateModel> ns3::WifiPhy::GetErrorRateModel() const [member function]
+    cls.add_method('GetErrorRateModel', 
+                   'ns3::Ptr< ns3::ErrorRateModel >', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetFrequency() const [member function]
     cls.add_method('GetFrequency', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGreenfield() const [member function]
     cls.add_method('GetGreenfield', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGuardInterval() const [member function]
     cls.add_method('GetGuardInterval', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs0() [member function]
     cls.add_method('GetHtMcs0', 
                    'ns3::WifiMode', 
@@ -6432,57 +7047,61 @@
     cls.add_method('GetLastRxStartTime', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
     cls.add_method('GetLdpc', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
     cls.add_method('GetMcs', 
                    'ns3::WifiMode', 
                    [param('uint8_t', 'mcs')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
     cls.add_method('GetMembershipSelectorModes', 
                    'ns3::WifiModeList', 
                    [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::MobilityModel> ns3::WifiPhy::GetMobility() [member function]
+    cls.add_method('GetMobility', 
+                   'ns3::Ptr< ns3::MobilityModel >', 
+                   [])
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
     cls.add_method('GetNBssMembershipSelectors', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
     cls.add_method('GetNMcs', 
                    'uint8_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
     cls.add_method('GetNModes', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNTxPower() const [member function]
     cls.add_method('GetNTxPower', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
     cls.add_method('GetNumberOfReceiveAntennas', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
     cls.add_method('GetNumberOfTransmitAntennas', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
     cls.add_method('GetOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -6651,46 +7270,66 @@
                    'ns3::Time', 
                    [param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetRxGain() const [member function]
+    cls.add_method('GetRxGain', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetRxNoiseFigure() const [member function]
+    cls.add_method('GetRxNoiseFigure', 
+                   'double', 
+                   [], 
+                   is_const=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)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiPhyStandard ns3::WifiPhy::GetStandard() const [member function]
+    cls.add_method('GetStandard', 
+                   'ns3::WifiPhyStandard', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
     cls.add_method('GetStateDuration', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetStbc() const [member function]
     cls.add_method('GetStbc', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   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)
+                   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)
+                   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)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxGain() const [member function]
+    cls.add_method('GetTxGain', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
     cls.add_method('GetTxPowerEnd', 
                    'double', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerStart() const [member function]
     cls.add_method('GetTxPowerStart', 
                    'double', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::WifiPhy::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -6751,46 +7390,51 @@
                    'ns3::WifiMode', 
                    [param('ns3::WifiMode', 'payloadMode')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsMcsSupported(ns3::WifiMode mcs) const [member function]
+    cls.add_method('IsMcsSupported', 
+                   'bool', 
+                   [param('ns3::WifiMode', 'mcs')], 
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
     cls.add_method('IsModeSupported', 
                    'bool', 
                    [param('ns3::WifiMode', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateBusy() [member function]
     cls.add_method('IsStateBusy', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateCcaBusy() [member function]
     cls.add_method('IsStateCcaBusy', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateIdle() [member function]
     cls.add_method('IsStateIdle', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateRx() [member function]
     cls.add_method('IsStateRx', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSleep() [member function]
     cls.add_method('IsStateSleep', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSwitching() [member function]
     cls.add_method('IsStateSwitching', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateTx() [member function]
     cls.add_method('IsStateTx', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static bool ns3::WifiPhy::IsValidTxVector(ns3::WifiTxVector txVector) [member function]
     cls.add_method('IsValidTxVector', 
                    'bool', 
@@ -6828,6 +7472,11 @@
     cls.add_method('NotifyTxEnd', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::RatioToDb(double ratio) const [member function]
+    cls.add_method('RatioToDb', 
+                   'double', 
+                   [param('double', 'ratio')], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('RegisterListener', 
                    'void', 
@@ -6848,61 +7497,93 @@
                    '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::SetCcaMode1Threshold(double threshold) [member function]
+    cls.add_method('SetCcaMode1Threshold', 
+                   'void', 
+                   [param('double', 'threshold')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
                    'void', 
                    [param('uint16_t', 'id')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelWidth(uint32_t channelwidth) [member function]
     cls.add_method('SetChannelWidth', 
                    'void', 
                    [param('uint32_t', 'channelwidth')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetEdThreshold(double threshold) [member function]
+    cls.add_method('SetEdThreshold', 
+                   'void', 
+                   [param('double', 'threshold')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetErrorRateModel(ns3::Ptr<ns3::ErrorRateModel> rate) [member function]
+    cls.add_method('SetErrorRateModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::ErrorRateModel >', 'rate')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
     cls.add_method('SetFrequency', 
                    'void', 
                    [param('uint32_t', 'freq')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGreenfield(bool greenfield) [member function]
     cls.add_method('SetGreenfield', 
                    'void', 
                    [param('bool', 'greenfield')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool guardInterval) [member function]
     cls.add_method('SetGuardInterval', 
                    'void', 
                    [param('bool', 'guardInterval')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool ldpc) [member function]
     cls.add_method('SetLdpc', 
                    'void', 
                    [param('bool', 'ldpc')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> mobility) [member function]
+    cls.add_method('SetMobility', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MobilityModel >', 'mobility')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNTxPower(uint32_t n) [member function]
+    cls.add_method('SetNTxPower', 
+                   'void', 
+                   [param('uint32_t', 'n')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
     cls.add_method('SetNumberOfReceiveAntennas', 
                    'void', 
                    [param('uint32_t', 'rx')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
     cls.add_method('SetNumberOfTransmitAntennas', 
                    'void', 
                    [param('uint32_t', 'tx')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,bool,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveOkCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::WifiTxVector,ns3::WifiPreamble,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveOkCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiTxVector, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetRxGain(double gain) [member function]
+    cls.add_method('SetRxGain', 
+                   'void', 
+                   [param('double', 'gain')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetRxNoiseFigure(double noiseFigureDb) [member function]
+    cls.add_method('SetRxNoiseFigure', 
+                   'void', 
+                   [param('double', 'noiseFigureDb')])
     ## 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)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetSleepMode() [member function]
     cls.add_method('SetSleepMode', 
                    'void', 
@@ -6912,12 +7593,64 @@
     cls.add_method('SetStbc', 
                    'void', 
                    [param('bool', 'stbc')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxGain(double gain) [member function]
+    cls.add_method('SetTxGain', 
+                   'void', 
+                   [param('double', 'gain')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxPowerEnd(double end) [member function]
+    cls.add_method('SetTxPowerEnd', 
+                   'void', 
+                   [param('double', 'end')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxPowerStart(double start) [member function]
+    cls.add_method('SetTxPowerStart', 
+                   'void', 
+                   [param('double', 'start')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('UnregisterListener', 
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::WToDbm(double w) const [member function]
+    cls.add_method('WToDbm', 
+                   'double', 
+                   [param('double', 'w')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DoChannelSwitch(uint16_t id) [member function]
+    cls.add_method('DoChannelSwitch', 
+                   'bool', 
+                   [param('uint16_t', 'id')], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DoFrequencySwitch(uint32_t frequency) [member function]
+    cls.add_method('DoFrequencySwitch', 
+                   'bool', 
+                   [param('uint32_t', 'frequency')], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetPowerDbm(uint8_t power) const [member function]
+    cls.add_method('GetPowerDbm', 
+                   'double', 
+                   [param('uint8_t', 'power')], 
+                   is_const=True, visibility='protected')
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureChannelForStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('ConfigureChannelForStandard', 
+                   'void', 
+                   [param('ns3::WifiPhyStandard', 'standard')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureDefaultsForStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('ConfigureDefaultsForStandard', 
+                   'void', 
+                   [param('ns3::WifiPhyStandard', 'standard')], 
+                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3WifiRemoteStationManager_methods(root_module, cls):
@@ -7239,7 +7972,8 @@
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetHtSupported(bool enable) [member function]
     cls.add_method('SetHtSupported', 
                    'void', 
-                   [param('bool', 'enable')])
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetMaxSlrc(uint32_t maxSlrc) [member function]
     cls.add_method('SetMaxSlrc', 
                    'void', 
@@ -7271,7 +8005,8 @@
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetVhtSupported(bool enable) [member function]
     cls.add_method('SetVhtSupported', 
                    'void', 
-                   [param('bool', 'enable')])
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
     cls.add_method('SetupMac', 
                    'void', 
@@ -7558,6 +8293,77 @@
                    is_pure_virtual=True, is_const=True, visibility='private', 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')])
@@ -7774,6 +8580,39 @@
                    is_static=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_Ns3CtrlBAckRequestHeader_methods(root_module, cls):
     ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckRequestHeader::CtrlBAckRequestHeader(ns3::CtrlBAckRequestHeader const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CtrlBAckRequestHeader const &', 'arg0')])
@@ -8006,6 +8845,11 @@
                    'uint32_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): ns3::Time ns3::Dcf::GetTxopLimit() const [member function]
+    cls.add_method('GetTxopLimit', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## dcf.h (module 'wifi'): static ns3::TypeId ns3::Dcf::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -8026,6 +8870,35 @@
                    'void', 
                    [param('uint32_t', 'minCw')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): void ns3::Dcf::SetTxopLimit(ns3::Time txopLimit) [member function]
+    cls.add_method('SetTxopLimit', 
+                   'void', 
+                   [param('ns3::Time', 'txopLimit')], 
+                   is_pure_virtual=True, 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_Ns3DoubleValue_methods(root_module, cls):
@@ -8061,22 +8934,420 @@
                    [param('double const &', 'value')])
     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', 
-                   [], 
-                   is_static=True)
-    ## edca-txop-n.h (module 'wifi'): ns3::EdcaTxopN::EdcaTxopN() [constructor]
+def register_Ns3DsssParameterSet_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet::DsssParameterSet(ns3::DsssParameterSet const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DsssParameterSet const &', 'arg0')])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet::DsssParameterSet() [constructor]
     cls.add_constructor([])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
+    ## dsss-parameter-set.h (module 'wifi'): uint8_t ns3::DsssParameterSet::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)
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetLow(ns3::Ptr<ns3::MacLow> low) [member function]
+    ## dsss-parameter-set.h (module 'wifi'): ns3::WifiInformationElementId ns3::DsssParameterSet::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): uint8_t ns3::DsssParameterSet::GetCurrentChannel() const [member function]
+    cls.add_method('GetCurrentChannel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): uint8_t ns3::DsssParameterSet::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): uint16_t ns3::DsssParameterSet::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): ns3::Buffer::Iterator ns3::DsssParameterSet::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSet::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSet::SetCurrentChannel(uint8_t currentChannel) [member function]
+    cls.add_method('SetCurrentChannel', 
+                   'void', 
+                   [param('uint8_t', 'currentChannel')])
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSet::SetDsssSupported(uint8_t DsssSupported) [member function]
+    cls.add_method('SetDsssSupported', 
+                   'void', 
+                   [param('uint8_t', 'DsssSupported')])
+    return
+
+def register_Ns3DsssParameterSetChecker_methods(root_module, cls):
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetChecker::DsssParameterSetChecker() [constructor]
+    cls.add_constructor([])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetChecker::DsssParameterSetChecker(ns3::DsssParameterSetChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DsssParameterSetChecker const &', 'arg0')])
+    return
+
+def register_Ns3DsssParameterSetValue_methods(root_module, cls):
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue::DsssParameterSetValue() [constructor]
+    cls.add_constructor([])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue::DsssParameterSetValue(ns3::DsssParameterSetValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DsssParameterSetValue const &', 'arg0')])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue::DsssParameterSetValue(ns3::DsssParameterSet const & value) [constructor]
+    cls.add_constructor([param('ns3::DsssParameterSet const &', 'value')])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::DsssParameterSetValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): bool ns3::DsssParameterSetValue::DeserializeFromString(std::string value, ns3::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)
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet ns3::DsssParameterSetValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::DsssParameterSet', 
+                   [], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): std::string ns3::DsssParameterSetValue::SerializeToString(ns3::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)
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSetValue::Set(ns3::DsssParameterSet const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::DsssParameterSet const &', 'value')])
+    return
+
+def register_Ns3EdcaParameterSet_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet::EdcaParameterSet(ns3::EdcaParameterSet const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSet const &', 'arg0')])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet::EdcaParameterSet() [constructor]
+    cls.add_constructor([])
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::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)
+    ## edca-parameter-set.h (module 'wifi'): ns3::WifiInformationElementId ns3::EdcaParameterSet::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeAci() const [member function]
+    cls.add_method('GetBeAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeAcm() const [member function]
+    cls.add_method('GetBeAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeAifsn() const [member function]
+    cls.add_method('GetBeAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeCWmax() const [member function]
+    cls.add_method('GetBeCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeCWmin() const [member function]
+    cls.add_method('GetBeCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetBeTXOPLimit() const [member function]
+    cls.add_method('GetBeTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkAci() const [member function]
+    cls.add_method('GetBkAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkAcm() const [member function]
+    cls.add_method('GetBkAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkAifsn() const [member function]
+    cls.add_method('GetBkAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkCWmax() const [member function]
+    cls.add_method('GetBkCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkCWmin() const [member function]
+    cls.add_method('GetBkCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetBkTXOPLimit() const [member function]
+    cls.add_method('GetBkTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetQosInfo() const [member function]
+    cls.add_method('GetQosInfo', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViAci() const [member function]
+    cls.add_method('GetViAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViAcm() const [member function]
+    cls.add_method('GetViAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViAifsn() const [member function]
+    cls.add_method('GetViAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViCWmax() const [member function]
+    cls.add_method('GetViCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViCWmin() const [member function]
+    cls.add_method('GetViCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetViTXOPLimit() const [member function]
+    cls.add_method('GetViTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoAci() const [member function]
+    cls.add_method('GetVoAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoAcm() const [member function]
+    cls.add_method('GetVoAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoAifsn() const [member function]
+    cls.add_method('GetVoAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoCWmax() const [member function]
+    cls.add_method('GetVoCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoCWmin() const [member function]
+    cls.add_method('GetVoCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetVoTXOPLimit() const [member function]
+    cls.add_method('GetVoTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): ns3::Buffer::Iterator ns3::EdcaParameterSet::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeAci(uint8_t aci) [member function]
+    cls.add_method('SetBeAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeAcm(uint8_t acm) [member function]
+    cls.add_method('SetBeAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetBeAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetBeCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetBeCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetBeTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkAci(uint8_t aci) [member function]
+    cls.add_method('SetBkAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkAcm(uint8_t acm) [member function]
+    cls.add_method('SetBkAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetBkAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetBkCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetBkCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetBkTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetQosInfo(uint8_t qosInfo) [member function]
+    cls.add_method('SetQosInfo', 
+                   'void', 
+                   [param('uint8_t', 'qosInfo')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetQosSupported(uint8_t qosSupported) [member function]
+    cls.add_method('SetQosSupported', 
+                   'void', 
+                   [param('uint8_t', 'qosSupported')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViAci(uint8_t aci) [member function]
+    cls.add_method('SetViAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViAcm(uint8_t acm) [member function]
+    cls.add_method('SetViAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetViAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetViCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetViCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetViTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoAci(uint8_t aci) [member function]
+    cls.add_method('SetVoAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoAcm(uint8_t acm) [member function]
+    cls.add_method('SetVoAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetVoAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetVoCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetVoCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetVoTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    return
+
+def register_Ns3EdcaParameterSetChecker_methods(root_module, cls):
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetChecker::EdcaParameterSetChecker() [constructor]
+    cls.add_constructor([])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetChecker::EdcaParameterSetChecker(ns3::EdcaParameterSetChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSetChecker const &', 'arg0')])
+    return
+
+def register_Ns3EdcaParameterSetValue_methods(root_module, cls):
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue::EdcaParameterSetValue() [constructor]
+    cls.add_constructor([])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue::EdcaParameterSetValue(ns3::EdcaParameterSetValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSetValue const &', 'arg0')])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue::EdcaParameterSetValue(ns3::EdcaParameterSet const & value) [constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSet const &', 'value')])
+    ## edca-parameter-set.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::EdcaParameterSetValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): bool ns3::EdcaParameterSetValue::DeserializeFromString(std::string value, ns3::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)
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet ns3::EdcaParameterSetValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::EdcaParameterSet', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): std::string ns3::EdcaParameterSetValue::SerializeToString(ns3::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)
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSetValue::Set(ns3::EdcaParameterSet const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::EdcaParameterSet const &', 'value')])
+    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', 
+                   [], 
+                   is_static=True)
+    ## edca-txop-n.h (module 'wifi'): ns3::EdcaTxopN::EdcaTxopN() [constructor]
+    cls.add_constructor([])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetLow(ns3::Ptr<ns3::MacLow> low) [member function]
     cls.add_method('SetLow', 
                    'void', 
                    [param('ns3::Ptr< ns3::MacLow >', 'low')])
@@ -8129,6 +9400,11 @@
                    'void', 
                    [param('uint32_t', 'aifsn')], 
                    is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTxopLimit(ns3::Time txopLimit) [member function]
+    cls.add_method('SetTxopLimit', 
+                   'void', 
+                   [param('ns3::Time', 'txopLimit')], 
+                   is_virtual=True)
     ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetMinCw() const [member function]
     cls.add_method('GetMinCw', 
                    'uint32_t', 
@@ -8144,6 +9420,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): ns3::Time ns3::EdcaTxopN::GetTxopLimit() const [member function]
+    cls.add_method('GetTxopLimit', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::MacLow> ns3::EdcaTxopN::Low() [member function]
     cls.add_method('Low', 
                    'ns3::Ptr< ns3::MacLow >', 
@@ -8158,10 +9439,11 @@
                    '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]
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetBaAgreementExists(ns3::Mac48Address address, uint8_t tid) const [member function]
     cls.add_method('GetBaAgreementExists', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')])
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')], 
+                   is_const=True)
     ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNOutstandingPacketsInBa(ns3::Mac48Address address, uint8_t tid) [member function]
     cls.add_method('GetNOutstandingPacketsInBa', 
                    'uint32_t', 
@@ -8236,6 +9518,10 @@
     cls.add_method('MissedAck', 
                    'void', 
                    [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::StartNextFragment() [member function]
+    cls.add_method('StartNextFragment', 
+                   'void', 
+                   [])
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::StartNext() [member function]
     cls.add_method('StartNext', 
                    'void', 
@@ -8256,14 +9542,14 @@
     cls.add_method('StartAccessIfNeeded', 
                    'void', 
                    [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRtsRetransmission() [member function]
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRtsRetransmission(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
     cls.add_method('NeedRtsRetransmission', 
                    'bool', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedDataRetransmission() [member function]
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedDataRetransmission(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
     cls.add_method('NeedDataRetransmission', 
                    'bool', 
-                   [])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
     ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedBarRetransmission() [member function]
     cls.add_method('NeedBarRetransmission', 
                    'bool', 
@@ -8343,10 +9629,11 @@
     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(ns3::Mac48Address dest) [member function]
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetAmpduExist(ns3::Mac48Address dest) const [member function]
     cls.add_method('GetAmpduExist', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'dest')])
+                   [param('ns3::Mac48Address', 'dest')], 
+                   is_const=True)
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAmpduExist(ns3::Mac48Address dest, bool enableAmpdu) [member function]
     cls.add_method('SetAmpduExist', 
                    'void', 
@@ -8386,6 +9673,104 @@
                    visibility='private', 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_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -8486,6 +9871,44 @@
                    [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_Ns3ErpInformation_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## erp-information.h (module 'wifi'): ns3::ErpInformation::ErpInformation(ns3::ErpInformation const & arg0) [copy constructor]
@@ -8583,16 +10006,38 @@
     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')])
+                   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::WifiTxVector txVector, double ber) const [member function]
+    cls.add_method('CalculateSnr', 
+                   'double', 
+                   [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', 
+                   'double', 
+                   [param('ns3::WifiMode', 'mode'), param('ns3::WifiTxVector', 'txVector'), param('double', 'snr'), param('uint32_t', 'nbits')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## error-rate-model.h (module 'wifi'): static ns3::TypeId ns3::ErrorRateModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     return
 
 def register_Ns3EventImpl_methods(root_module, cls):
@@ -8619,6 +10064,44 @@
                    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_Ns3ExtendedSupportedRatesIE_methods(root_module, cls):
     ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE::ExtendedSupportedRatesIE(ns3::ExtendedSupportedRatesIE const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::ExtendedSupportedRatesIE const &', 'arg0')])
@@ -8662,6 +10145,44 @@
                    [param('ns3::SupportedRates *', 'rates')])
     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_Ns3HtCapabilities_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities::HtCapabilities(ns3::HtCapabilities const & arg0) [copy constructor]
@@ -9424,6 +10945,44 @@
                    [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([])
@@ -9588,6 +11147,71 @@
                    is_static=True)
     return
 
+def register_Ns3MobilityModel_methods(root_module, cls):
+    ## mobility-model.h (module 'mobility'): ns3::MobilityModel::MobilityModel(ns3::MobilityModel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MobilityModel const &', 'arg0')])
+    ## mobility-model.h (module 'mobility'): ns3::MobilityModel::MobilityModel() [constructor]
+    cls.add_constructor([])
+    ## mobility-model.h (module 'mobility'): int64_t ns3::MobilityModel::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## mobility-model.h (module 'mobility'): double ns3::MobilityModel::GetDistanceFrom(ns3::Ptr<const ns3::MobilityModel> position) const [member function]
+    cls.add_method('GetDistanceFrom', 
+                   'double', 
+                   [param('ns3::Ptr< ns3::MobilityModel const >', 'position')], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::GetPosition() const [member function]
+    cls.add_method('GetPosition', 
+                   'ns3::Vector', 
+                   [], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): double ns3::MobilityModel::GetRelativeSpeed(ns3::Ptr<const ns3::MobilityModel> other) const [member function]
+    cls.add_method('GetRelativeSpeed', 
+                   'double', 
+                   [param('ns3::Ptr< ns3::MobilityModel const >', 'other')], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): static ns3::TypeId ns3::MobilityModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::GetVelocity() const [member function]
+    cls.add_method('GetVelocity', 
+                   'ns3::Vector', 
+                   [], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::SetPosition(ns3::Vector const & position) [member function]
+    cls.add_method('SetPosition', 
+                   'void', 
+                   [param('ns3::Vector const &', 'position')])
+    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::NotifyCourseChange() const [member function]
+    cls.add_method('NotifyCourseChange', 
+                   'void', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## mobility-model.h (module 'mobility'): int64_t ns3::MobilityModel::DoAssignStreams(int64_t start) [member function]
+    cls.add_method('DoAssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'start')], 
+                   visibility='private', is_virtual=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::DoGetPosition() const [member function]
+    cls.add_method('DoGetPosition', 
+                   'ns3::Vector', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::DoGetVelocity() const [member function]
+    cls.add_method('DoGetVelocity', 
+                   'ns3::Vector', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::DoSetPosition(ns3::Vector const & position) [member function]
+    cls.add_method('DoSetPosition', 
+                   'void', 
+                   [param('ns3::Vector const &', 'position')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -9725,16 +11349,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -9762,35 +11401,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -9938,6 +11572,51 @@
                    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([])
@@ -10176,6 +11855,49 @@
                    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_Ns3QueueItem_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
@@ -10190,6 +11912,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
@@ -10534,6 +12261,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetDsssSupported(bool enable) [member function]
+    cls.add_method('SetDsssSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): bool ns3::RegularWifiMac::GetDsssSupported() const [member function]
+    cls.add_method('GetDsssSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
     return
 
 def register_Ns3Ssid_methods(root_module, cls):
@@ -10629,6 +12366,10 @@
     cls.add_constructor([])
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates(ns3::SupportedRates const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SupportedRates const &', 'arg0')])
+    ## supported-rates.h (module 'wifi'): void ns3::SupportedRates::AddBssMembershipSelectorRate(uint32_t bs) [member function]
+    cls.add_method('AddBssMembershipSelectorRate', 
+                   'void', 
+                   [param('uint32_t', 'bs')])
     ## supported-rates.h (module 'wifi'): void ns3::SupportedRates::AddSupportedRate(uint32_t bs) [member function]
     cls.add_method('AddSupportedRate', 
                    'void', 
@@ -10663,6 +12404,11 @@
                    'bool', 
                    [param('uint32_t', 'bs')], 
                    is_const=True)
+    ## supported-rates.h (module 'wifi'): bool ns3::SupportedRates::IsBssMembershipSelectorRate(uint32_t bs) const [member function]
+    cls.add_method('IsBssMembershipSelectorRate', 
+                   'bool', 
+                   [param('uint32_t', 'bs')], 
+                   is_const=True)
     ## supported-rates.h (module 'wifi'): bool ns3::SupportedRates::IsSupportedRate(uint32_t bs) const [member function]
     cls.add_method('IsSupportedRate', 
                    'bool', 
@@ -10789,6 +12535,86 @@
                    [param('uint64_t const &', 'value')])
     return
 
+def register_Ns3Vector2DChecker_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector2DChecker::Vector2DChecker() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2DChecker::Vector2DChecker(ns3::Vector2DChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2DChecker const &', 'arg0')])
+    return
+
+def register_Ns3Vector2DValue_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue(ns3::Vector2DValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2DValue const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue(ns3::Vector2D const & value) [constructor]
+    cls.add_constructor([param('ns3::Vector2D const &', 'value')])
+    ## vector.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::Vector2DValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vector.h (module 'core'): bool ns3::Vector2DValue::DeserializeFromString(std::string value, ns3::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)
+    ## vector.h (module 'core'): ns3::Vector2D ns3::Vector2DValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Vector2D', 
+                   [], 
+                   is_const=True)
+    ## vector.h (module 'core'): std::string ns3::Vector2DValue::SerializeToString(ns3::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)
+    ## vector.h (module 'core'): void ns3::Vector2DValue::Set(ns3::Vector2D const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Vector2D const &', 'value')])
+    return
+
+def register_Ns3Vector3DChecker_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector3DChecker::Vector3DChecker() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3DChecker::Vector3DChecker(ns3::Vector3DChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3DChecker const &', 'arg0')])
+    return
+
+def register_Ns3Vector3DValue_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue(ns3::Vector3DValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3DValue const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue(ns3::Vector3D const & value) [constructor]
+    cls.add_constructor([param('ns3::Vector3D const &', 'value')])
+    ## vector.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::Vector3DValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vector.h (module 'core'): bool ns3::Vector3DValue::DeserializeFromString(std::string value, ns3::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)
+    ## vector.h (module 'core'): ns3::Vector3D ns3::Vector3DValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Vector3D', 
+                   [], 
+                   is_const=True)
+    ## vector.h (module 'core'): std::string ns3::Vector3DValue::SerializeToString(ns3::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)
+    ## vector.h (module 'core'): void ns3::Vector3DValue::Set(ns3::Vector3D const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Vector3D const &', 'value')])
+    return
+
 def register_Ns3VhtCapabilities_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities::VhtCapabilities(ns3::VhtCapabilities const & arg0) [copy constructor]
@@ -11020,6 +12846,18 @@
                    [param('ns3::VhtCapabilities const &', 'value')])
     return
 
+def register_Ns3WifiChannel_methods(root_module, cls):
+    ## wifi-channel.h (module 'wifi'): ns3::WifiChannel::WifiChannel() [constructor]
+    cls.add_constructor([])
+    ## wifi-channel.h (module 'wifi'): ns3::WifiChannel::WifiChannel(ns3::WifiChannel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiChannel const &', 'arg0')])
+    ## wifi-channel.h (module 'wifi'): static ns3::TypeId ns3::WifiChannel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3WifiModeChecker_methods(root_module, cls):
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker::WifiModeChecker() [constructor]
     cls.add_constructor([])
@@ -11176,6 +13014,11 @@
                    'void', 
                    [param('uint32_t', 'aifsn')], 
                    is_virtual=True)
+    ## dca-txop.h (module 'wifi'): void ns3::DcaTxop::SetTxopLimit(ns3::Time txopLimit) [member function]
+    cls.add_method('SetTxopLimit', 
+                   'void', 
+                   [param('ns3::Time', 'txopLimit')], 
+                   is_virtual=True)
     ## dca-txop.h (module 'wifi'): uint32_t ns3::DcaTxop::GetMinCw() const [member function]
     cls.add_method('GetMinCw', 
                    'uint32_t', 
@@ -11191,6 +13034,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## dca-txop.h (module 'wifi'): ns3::Time ns3::DcaTxop::GetTxopLimit() const [member function]
+    cls.add_method('GetTxopLimit', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## dca-txop.h (module 'wifi'): void ns3::DcaTxop::Queue(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
     cls.add_method('Queue', 
                    'void', 
diff -Naur ns-3.25/src/mesh/model/dot11s/dot11s-mac-header.cc ns-3.26/src/mesh/model/dot11s/dot11s-mac-header.cc
--- ns-3.25/src/mesh/model/dot11s/dot11s-mac-header.cc	2016-10-03 20:57:08.327247012 -0700
+++ ns-3.26/src/mesh/model/dot11s/dot11s-mac-header.cc	2016-10-03 19:49:01.630387780 -0700
@@ -31,7 +31,7 @@
 TypeId
 MeshHeader::GetTypeId ()
 {
-  static TypeId tid = TypeId ("ns3::Dot11sMacHeader")
+  static TypeId tid = TypeId ("ns3::dot11s::MeshHeader")
     .SetParent<Header> ()
     .SetGroupName ("Mesh")
     .AddConstructor<MeshHeader> ();
diff -Naur ns-3.25/src/mesh/model/mesh-point-device.cc ns-3.26/src/mesh/model/mesh-point-device.cc
--- ns-3.25/src/mesh/model/mesh-point-device.cc	2016-10-03 20:57:08.346246864 -0700
+++ ns-3.26/src/mesh/model/mesh-point-device.cc	2016-10-03 19:49:01.649387638 -0700
@@ -38,7 +38,7 @@
 {
   static TypeId tid = TypeId ("ns3::MeshPointDevice")
     .SetParent<NetDevice> ()
-    .SetGroupName ("Dsr")
+    .SetGroupName ("Mesh")
     .AddConstructor<MeshPointDevice> ()
     .AddAttribute ("Mtu", "The MAC-level Maximum Transmission Unit",
                    UintegerValue (0xffff),
diff -Naur ns-3.25/src/mesh/model/mesh-wifi-interface-mac.cc ns-3.26/src/mesh/model/mesh-wifi-interface-mac.cc
--- ns-3.25/src/mesh/model/mesh-wifi-interface-mac.cc	2016-10-03 20:57:08.348246848 -0700
+++ ns-3.26/src/mesh/model/mesh-wifi-interface-mac.cc	2016-10-03 19:49:01.651387623 -0700
@@ -34,7 +34,7 @@
 #include "ns3/pointer.h"
 #include "ns3/double.h"
 #include "ns3/trace-source-accessor.h"
-#include "ns3/qos-tag.h"
+#include "ns3/socket.h"
 
 namespace ns3 {
 
@@ -257,11 +257,11 @@
     }
   // Classify: application may have set a tag, which is removed here
   AcIndex ac;
-  QosTag tag;
+  SocketPriorityTag tag;
   if (packet->RemovePacketTag (tag))
     {
-      hdr.SetQosTid (tag.GetTid ());
-      ac = QosUtilsMapTidToAc (tag.GetTid ());
+      hdr.SetQosTid (tag.GetPriority ());
+      ac = QosUtilsMapTidToAc (tag.GetPriority ());
     }
   else
     {
@@ -470,7 +470,9 @@
   // Check if QoS tag exists and add it:
   if (hdr->IsQosData ())
     {
-      packet->AddPacketTag (QosTag (hdr->GetQosTid ()));
+      SocketPriorityTag priorityTag;
+      priorityTag.SetPriority (hdr->GetQosTid ());
+      packet->ReplacePacketTag (priorityTag);
     }
   // Forward data up
   if (hdr->IsData ())
diff -Naur ns-3.25/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap ns-3.26/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	2016-10-03 20:57:08.350246833 -0700
+++ ns-3.26/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap	2016-10-03 19:49:01.653387608 -0700
@@ -1,55 +1,55 @@
-ò            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       8  >   >   Ѐ<                    $0H`lrmeshq   9u         M        Ԁ               *        Ԁ               ϙ  <   <   Ѐ<                     $0H`lq  9u            A   A                           $0H`lx  rmesh        7  >   >   Ѐ<                    $0H`lrmeshq   9u                 Ԁ                 <   <   Ѐ<                0    $0H`lq  9u                  Ԁ               Y  >   >   Ѐ<                @   $0H`lrmeshq  9u         i        Ԁ                 <   <   Ѐ<                     $0H`lq  9u          v        Ԁ               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         ?   ?   Ѐ<                                                 z  F   F                E         $0H`lx
- 3rmesh         E   E   Ѐ             %                            *  ?   ?   Ѐ<                `                                         Ԁ              b  ?   ?   Ѐ<                                              V  ?   ?   Ј<                                                E   E   Ѐ            p %              ,             JO A   A                         $0H`lx Ermesh       [ N   N                                
+ 3rmesh         E   E   Ѐ             %                            W  ?   ?   Ѐ<                `                                          Ԁ                ?   ?   Ѐ<                                              &  E   E   Ѐ            p %              ,             JO A   A                         $0H`lx Ermesh       < N   N                                
 
-        N   N   <                                         
+       g N   N   <                                         
      
-       B       Ԁ              m N   N                                
-
-        N   N   <                                        
+       #       Ԁ               N   N   <                                        
      
-       y       Ԁ                     <                                 E      @  
+       ~ N   N                                
+
+       i       Ԁ                     <                                 E      @  
 
- 	 l                                                                                                                    Ԁ               N   N                                 
+ 	 l                                                                                                                    Ԁ              	 N   N                                 
 
-        N   N                                
+       a N   N                                
 
-              Ԁ               N   N   <                                       
+       g       Ԁ               N   N   <                                       
      
-              Ԁ              *       <                                 E      @  
+              Ԁ              ~       <                                 E      @  
 
- 	 l                                                                                                             o       Ԁ                     <                                E      @  
+ 	 l                                                                                                                    Ԁ                     <                                E      @  
 
  	 l                                                                                                             +b F   F                3&         $0H`lx
- &rmesh       j A   A                t'         $0H`lx &rmesh       #        Ԁ              V        <                                 E     @  
+ &rmesh       j A   A                t'         $0H`lx &rmesh               Ԁ              R        <                                 E     @  
 
- 	 l                                                                                                             f        Ԁ                      <                                  E     @  
+ 	 l                                                                                                             b        Ԁ                      <                                  E     @  
 
- 	 l                                                                                                                     Ԁ              j        <                                 E     @  
+ 	 l                                                                                                             W        Ԁ              	        <                                 E     @  
 
  	 l                                                                                                               F   F                S.         $0H`lx
  ].u'rmesh       JO A   A                
-/         $0H`lx .rmesh       C       Ԁ              v       <                0                E     @  
+/         $0H`lx .rmesh              Ԁ              <       <                0                E     @  
 
- 	 l                                                                                                                    Ԁ              ݦ       <                0                 E     @  
+ 	 l                                                                                                             L       Ԁ                     <                0                 E     @  
 
- 	 l                                                                                                             !       Ԁ                     <                0                E     @  
+ 	 l                                                                                                                    Ԁ              5       <                0                E     @  
 
  	 l                                                                                                             +b F   F                s(6         $0H`lx
- 5/rmesh       j A   A                *6         $0H`lx (6rmesh       #        Ԁ              V        <                @                E     @  
+ 5/rmesh       j A   A                *6         $0H`lx (6rmesh               Ԁ              %        <                @                E     @  
 
- 	 l                                                                                                             f        Ԁ                      <                @                 E     @  
+ 	 l                                                                                                             5        Ԁ                      <                @                 E     @  
 
- 	 l                                                                                                                     Ԁ                      <                @                E     @  
+ 	 l                                                                                                                     Ԁ              	        <                @                E     @  
 
  	 l                                                                                                               F   F               =         $0H`lx
- =6rmesh       JO A   A                JX>         $0H`lx =rmesh       ,| ?   ?   Ѐ<                                                 } ?   ?   Ј<                                                 ~ E   E   Ѐ            0%                             ?   ?   Ѐ<                                                        Ԁ              V ?   ?   Ѐ<                @                              E   E   Ѐ             %              ,              ?   ?   Ј<                @                             C       Ԁ              v       <                P                E     @  
+ =6rmesh       JO A   A                JX>         $0H`lx =rmesh       	} ?   ?   Ѐ<                                                 8 E   E   Ѐ            0%                            u ?   ?   Ѐ<                                                  ?   ?   Ј<                                                 -       Ԁ               ?   ?   Ѐ<                @                              E   E   Ѐ             %              ,             _       Ԁ                     <                P                E     @  
 
- 	 l                                                                                                                    Ԁ              ݦ       <                P                 E     @  
+ 	 l                                                                                                             Ʀ       Ԁ              A       <                P                 E     @  
 
- 	 l                                                                                                             !       Ԁ                     <                P                E     @  
+ 	 l                                                                                                                    Ԁ              q       <                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.25/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap ns-3.26/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	2016-10-03 20:57:08.350246833 -0700
+++ ns-3.26/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap	2016-10-03 19:49:01.653387608 -0700
@@ -1,4 +1,4 @@
-ò            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
+ò            i         E   E   Ѐ              %                                %  >   >   Ѐ<                   $0H`lrmeshq   9u         p)        Ԁ               V*        Ԁ               *  <   <   Ѐ<                      $0H`lq  9u            A   A               0 (          $0H`lx $ rmesh        ̖  >   >   Ѐ<                    $0H`lrmeshq   9u         u        Ԁ                 <   <   Ѐ<                @    $0H`lq  9u          !        Ԁ                 >   >   Ѐ<                P   $0H`lrmeshq  9u                 Ԁ               f  <   <   Ѐ<                     $0H`lq  9u                  Ԁ                 A   A                           $0H`lx  rmesh          >   >   Ѐ<                    $0H`lrmeshq   9u                 Ԁ                 <   <   Ѐ<                0    $0H`lq  9u                  Ԁ                 >   >   Ѐ<                @   $0H`lrmeshq  9u                 Ԁ               :  <   <   Ѐ<                     $0H`lq  9u          J        Ԁ               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
@@ -6,88 +6,86 @@
  rmesh       a F   F               p          $0H`lx
  zrmesh        A   A               P 2         $0H`lx rmesh         F   F                         $0H`lx
  rmesh         E   E   Ѐ             %                               @  ?   ?   Ѐ<                                                         Ԁ                F   F                E         $0H`lx
- 3rmesh       E        Ԁ                E   E   Ѐ             %                              ?   ?   Ѐ<                `                                         Ԁ                ?   ?   Ѐ<                                                      Ԁ                ?   ?   Ј<                                                      Ԁ              V  E   E   Ѐ            p %              ,             O A   A                         $0H`lx Ermesh        N   N                                
+ 3rmesh       W        Ԁ                E   E   Ѐ             %                              ?   ?   Ѐ<                `                                         Ԁ              H  ?   ?   Ѐ<                                                      Ԁ                      Ԁ                E   E   Ѐ            p %              ,             O A   A                         $0H`lx Ermesh       Q N   N                                
 
-        N   N                                
+        N   N                                
 
-        N   N   <                                         
+        N   N   <                                         
      
-              Ԁ               N   N                                
-
-       F N   N   <                                        
+              Ԁ               N   N   <                                        
      
-              Ԁ               N   N   <                                        
+       S       Ԁ               N   N                                
+
+        N   N   <                                        
      
-       
-       Ԁ              =       <                                 E      @  
+              Ԁ              ,       <                                 E      @  
 
- 	 l                                                                                                             M       Ԁ                     <                                 E      @  
+ 	 l                                                                                                             <       Ԁ                     <                                 E      @  
 
- 	 l                                                                                                                    Ԁ              l N   N                                 
+ 	 l                                                                                                                    Ԁ               N   N                                 
 
-        N   N                                
+        N   N                                
 
-        N   N                                
+       : N   N                                
 
-       1       Ԁ               N   N   <                                       
+              Ԁ              + N   N   <                                       
      
-              Ԁ              C N   N   <                                       
+       ;       Ԁ               N   N   <                                       
      
-               Ԁ              3       <                                 E      @  
+              Ԁ                     <                                 E      @  
 
- 	 l                                                                                                             C       Ԁ                     <                                E      @  
+ 	 l                                                                                                                    Ԁ                     <                                E      @  
 
- 	 l                                                                                                                    Ԁ              k       <                                E      @  
+ 	 l                                                                                                             M       Ԁ                      <                                E      @  
 
  	 l                                                                                                             7 F   F                Ȼ&         $0H`lx
  J&Ermesh       a F   F                3&         $0H`lx
- &rmesh        A   A                t'         $0H`lx &rmesh               Ԁ                      <                                 E     @  
+ &rmesh        A   A                t'         $0H`lx &rmesh               Ԁ              d        <                                 E     @  
 
- 	 l                                                                                                                     Ԁ              M        <                                 E     @  
+ 	 l                                                                                                             t        Ԁ              I        <                                 E     @  
 
- 	 l                                                                                                                     Ԁ                      <                                  E     @  
+ 	 l                                                                                                                     Ԁ                      <                                  E     @  
 
- 	 l                                                                                                                     Ԁ              b        <                                 E     @  
+ 	 l                                                                                                             +        Ԁ                      <                                 E     @  
 
- 	 l                                                                                                                     Ԁ              	        <                                 E     @  
+ 	 l                                                                                                             	        Ԁ              T        <                                 E     @  
 
  	 l                                                                                                               F   F                \.         $0H`lx
  -&rmesh         F   F                S.         $0H`lx
  ].u'rmesh       O A   A                
-/         $0H`lx .rmesh       ӣ       Ԁ                     <                0                E     @  
+/         $0H`lx .rmesh               Ԁ              E       <                0                E     @  
 
- 	 l                                                                                                                    Ԁ              m       <                0                E     @  
+ 	 l                                                                                                             U       Ԁ              3       <                0                E     @  
 
- 	 l                                                                                                                    Ԁ                     <                0                 E     @  
+ 	 l                                                                                                             x       Ԁ                     <                0                 E     @  
 
- 	 l                                                                                                                    Ԁ                     <                0                E     @  
+ 	 l                                                                                                             ͨ       Ԁ              -       <                0                E     @  
 
- 	 l                                                                                                             ǩ       Ԁ              '       <                0                E     @  
+ 	 l                                                                                                             r       Ԁ              ,       <                0                E     @  
 
  	 l                                                                                                             7 F   F                5         $0H`lx
  5.rmesh       a F   F                s(6         $0H`lx
- 5/rmesh        A   A                *6         $0H`lx (6rmesh               Ԁ                      <                @                E     @  
+ 5/rmesh        A   A                *6         $0H`lx (6rmesh               Ԁ                      <                @                E     @  
 
- 	 l                                                                                                                     Ԁ              M        <                @                E     @  
+ 	 l                                                                                                                     Ԁ                      <                @                E     @  
 
- 	 l                                                                                                                     Ԁ                      <                @                 E     @  
+ 	 l                                                                                                             a        Ԁ                      <                @                 E     @  
 
- 	 l                                                                                                                     Ԁ                      <                @                E     @  
+ 	 l                                                                                                                     Ԁ              y        <                @                E     @  
 
- 	 l                                                                                                                     Ԁ              
-        <                @                E     @  
+ 	 l                                                                                                             	        Ԁ              f        <                @                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}       Ԁ              9~       Ԁ              ~ E   E   Ѐ            0%                             ?   ?   Ѐ<                                                        Ԁ               ?   ?   Ѐ<                @                                    Ԁ              V E   E   Ѐ             %              ,              ?   ?   Ј<                @                             <       Ԁ              ӣ       Ԁ                     <                P                E     @  
+ =6rmesh       O A   A                JX>         $0H`lx =rmesh       { E   E   Ѐ            %                               {|       Ԁ              | ?   ?   Ѐ<                                                 E}       Ԁ              ~ E   E   Ѐ            0%                             ?   ?   Ј<                                                        Ԁ              a ?   ?   Ѐ<                @                                    Ԁ               E   E   Ѐ             %              ,                    Ԁ              "       <                P                E     @  
 
- 	 l                                                                                                                    Ԁ              m       <                P                E     @  
+ 	 l                                                                                                             2       Ԁ                     <                P                E     @  
 
- 	 l                                                                                                                    Ԁ                     <                P                 E     @  
+ 	 l                                                                                                                    Ԁ              I       <                P                 E     @  
 
- 	 l                                                                                                                    Ԁ                     <                P                E     @  
+ 	 l                                                                                                             Y       Ԁ                     <                P                E     @  
 
- 	 l                                                                                                                    Ԁ              '       <                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.25/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap ns-3.26/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	2016-10-03 20:57:08.351246825 -0700
+++ ns-3.26/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap	2016-10-03 19:49:01.654387601 -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         '        Ԁ               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
+ò            i       *  E   E   Ѐ              %                                u$  <   <                 $          $0H`lx rmesh        R%        Ԁ               t%  >   >   Ѐ<                   $0H`lrmeshq   9u         &        Ԁ               &  <   <   Ѐ<                     $0H`lq   9u          '  >   >   Ѐ<                    $0H`lrmeshq   9u         (        Ԁ               4)  <   <   Ѐ<                0    $0H`lq   9u          D)        Ԁ               *  >   >   Ѐ<                @   $0H`lrmeshq   9u         )*        Ԁ               w*  <   <   Ѐ<                      $0H`lq  9u          +        Ԁ               (  A   A               0 (          $0H`lx $ rmesh        8  >   >   Ѐ<                    $0H`lrmeshq   9u         H        Ԁ                 <   <   Ѐ<                @    $0H`lq  9u          M        Ԁ                 >   >   Ѐ<                P   $0H`lrmeshq  9u         *        Ԁ               ϙ  <   <   Ѐ<                     $0H`lq  9u          ߙ        Ԁ                 A   A                           $0H`lx  rmesh                Ԁ                 <   <   Ѐ<                0    $0H`lq  9u          Y  >   >   Ѐ<                @   $0H`lrmeshq  9u         v        Ԁ                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
@@ -10,103 +10,103 @@
  zrmesh       $  F   F                         $0H`lx
  zrmesh       (  F   F                         $0H`lx
  rmesh         E   E   Ѐ             %                                 ?   ?   Ѐ<                                                         Ԁ              z  F   F                E         $0H`lx
- 3rmesh       	  ?   ?   Ј<                                                         Ԁ                      Ԁ              b  ?   ?   Ѐ<                                              r        Ԁ              V  ?   ?   Ј<                                              f        Ԁ              s N   N                                
+ 3rmesh         ?   ?   Ѐ<                                                 +        Ԁ                E   E   Ѐ             %                              ?   ?   Ѐ<                                                      Ԁ                ?   ?   Ѐ<                                                      Ԁ               N   N                                
 
-        F   F                I&         $0H`lx
- -&rmesh       / N   N                                
+       : F   F                I&         $0H`lx
+ -&rmesh        N   N                                
 
-       [ N   N                                
+       < N   N                                
 
-       B       Ԁ               N   N   <                                        
+       #       Ԁ               N   N   <                                        
      
-              Ԁ              Q N   N   <                                        
+       &       Ԁ              { N   N   <                                        
      
-              Ԁ               N   N   <                                        
+       7       Ԁ               N   N   <                                        
      
-       d       Ԁ                     <                                 E      @  
+              Ԁ              H       <                                 E      @  
 
- 	 l                                                                                                                    Ԁ              4       <                                 E      @  
+ 	 l                                                                                                             X       Ԁ              $       <                                 E      @  
 
- 	 l                                                                                                             y       Ԁ                     <                                 E      @  
+ 	 l                                                                                                             i       Ԁ                     <                                 E      @  
 
- 	 l                                                                                                              N   N                                
+ 	 l                                                                                                             a N   N                                
 
-       C N   N                                
+        N   N                                
 
-       n N   N                                
+         N   N                                
 
-       V       Ԁ               N   N   <                                       
+       f       Ԁ               N   N   <                                       
      
-              Ԁ              \ N   N   <                                       
+              Ԁ               N   N   <                                       
      
-              Ԁ               N   N   <                                       
+       g       Ԁ               N   N   <                                       
      
-       o       Ԁ                     <                                E      @  
+              Ԁ                     <                                E      @  
 
- 	 l                                                                                                                    Ԁ              c       <                                E      @  
+ 	 l                                                                                                             !       Ԁ                     <                                E      @  
 
- 	 l                                                                                                                    Ԁ                     <                                E      @  
+ 	 l                                                                                                                    Ԁ              @       <                                E      @  
 
  	 l                                                                                                             H7 F   F                Ȼ&         $0H`lx
  J&Ermesh       +b F   F                3&         $0H`lx
- &rmesh       D        Ԁ              w        <                                 E     @  
+ &rmesh       D        Ԁ                      <                                 E     @  
 
- 	 l                                                                                                                     Ԁ                      <                                 E     @  
+ 	 l                                                                                                                     Ԁ              \        <                                 E     @  
 
- 	 l                                                                                                             #        Ԁ              V        <                                 E     @  
+ 	 l                                                                                                                     Ԁ              R        <                                 E     @  
 
- 	 l                                                                                                                     Ԁ              j        <                                 E     @  
+ 	 l                                                                                                             W        Ԁ              	        <                                 E     @  
 
- 	 l                                                                                                             z        Ԁ                      <                                 E     @  
+ 	 l                                                                                                             	        Ԁ              K
+        <                                 E     @  
 
- 	 l                                                                                                             
-        Ԁ              I        <                                 E     @  
+ 	 l                                                                                                                     Ԁ                      <                                 E     @  
 
  	 l                                                                                                             $  F   F                -         $0H`lx
  -&rmesh       (  F   F                \.         $0H`lx
  -&rmesh         F   F                S.         $0H`lx
- ].u'rmesh       d       Ԁ                     <                0                E     @  
+ ].u'rmesh       d       Ԁ              ģ       <                0                E     @  
 
- 	 l                                                                                                                    Ԁ                     <                0                E     @  
+ 	 l                                                                                                             ԣ       Ԁ              =       <                0                E     @  
 
- 	 l                                                                                                             C       Ԁ              v       <                0                E     @  
+ 	 l                                                                                                                    Ԁ              <       <                0                E     @  
 
- 	 l                                                                                                             !       Ԁ                     <                0                E     @  
+ 	 l                                                                                                                    Ԁ              5       <                0                E     @  
 
- 	 l                                                                                                                    Ԁ                     <                0                E     @  
+ 	 l                                                                                                             E       Ԁ              #       <                0                E     @  
 
- 	 l                                                                                                             c       Ԁ                     <                0                E     @  
+ 	 l                                                                                                             h       Ԁ                     <                0                E     @  
 
  	 l                                                                                                              F   F                5         $0H`lx
  o5].rmesh       H7 F   F                5         $0H`lx
  5.rmesh       +b F   F                s(6         $0H`lx
- 5/rmesh       D        Ԁ              w        <                @                E     @  
+ 5/rmesh       D        Ԁ                      <                @                E     @  
 
- 	 l                                                                                                                     Ԁ                      <                @                E     @  
+ 	 l                                                                                                                     Ԁ                      <                @                E     @  
 
- 	 l                                                                                                             #        Ԁ              V        <                @                E     @  
+ 	 l                                                                                                                     Ԁ              %        <                @                E     @  
 
- 	 l                                                                                                                     Ԁ                      <                @                E     @  
+ 	 l                                                                                                                     Ԁ              	        <                @                E     @  
 
- 	 l                                                                                                                     Ԁ              	        <                @                E     @  
+ 	 l                                                                                                             	        Ԁ              ]
+        <                @                E     @  
 
- 	 l                                                                                                             U
-        Ԁ                      <                @                E     @  
+ 	 l                                                                                                                     Ԁ              \        <                @                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   Ѐ            %                               } ?   ?   Ј<                                                 }       Ԁ              } ?   ?   Ј<                                                 ~       Ԁ                     Ԁ              V ?   ?   Ѐ<                @                             f       Ԁ               ?   ?   Ј<                @                                    Ԁ              d       Ԁ                     <                P                E     @  
+ =6rmesh       *{ E   E   Ѐ            %                               >| ?   ?   Ѐ<                                                 N|       Ԁ              	} ?   ?   Ѐ<                                                 }       Ԁ              Q~ E   E   Ѐ            0%                            8 E   E   Ѐ            0%                             ?   ?   Ѐ<                @                                    Ԁ              -       Ԁ               ?   ?   Ѐ<                @                                    Ԁ              d       Ԁ              Y       <                P                E     @  
 
- 	 l                                                                                                                    Ԁ                     <                P                E     @  
+ 	 l                                                                                                             i       Ԁ                     <                P                E     @  
 
- 	 l                                                                                                             C       Ԁ              v       <                P                E     @  
+ 	 l                                                                                                             _       Ԁ                     <                P                E     @  
 
- 	 l                                                                                                             !       Ԁ                     <                P                E     @  
+ 	 l                                                                                                                    Ԁ              q       <                P                E     @  
 
- 	 l                                                                                                             ǩ       Ԁ                     <                P                E     @  
+ 	 l                                                                                                                    Ԁ                     <                P                E     @  
 
- 	 l                                                                                                             c       Ԁ                     <                P                E     @  
+ 	 l                                                                                                             \       Ԁ                     <                P                E     @  
 
  	 l                                                                                                              F   F               P-D         $0H`lx
  D=rmesh       H7 F   F                H@E         $0H`lx
diff -Naur ns-3.25/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap ns-3.26/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	2016-10-03 20:57:08.351246825 -0700
+++ ns-3.26/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap	2016-10-03 19:49:01.654387601 -0700
@@ -1,4 +1,4 @@
-ò            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
+ò            i         E   E   Ѐ              %                                $  <   <                 $          $0H`lx rmesh        %  >   >   Ѐ<                    $0H`lrmeshq   9u         %%        Ԁ               %  >   >   Ѐ<                   $0H`lrmeshq   9u         %        Ԁ               G&  <   <   Ѐ<                     $0H`lq   9u          &        Ԁ               )'  >   >   Ѐ<                    $0H`lrmeshq   9u         '        Ԁ               m(  <   <   Ѐ<                     $0H`lq  9u          }(        Ԁ               (  <   <   Ѐ<                0    $0H`lq   9u          p)        Ԁ               )  >   >   Ѐ<                @   $0H`lrmeshq   9u         V*        Ԁ               *  <   <   Ѐ<                      $0H`lq  9u          *        Ԁ               ?  A   A                 k?          $0H`lx $ rmesh          A   A               0 (          $0H`lx $ rmesh        u        Ԁ                 <   <   Ѐ<                @    $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
@@ -6,91 +6,86 @@
  rmesh       7 F   F                y         $0H`lx
  rmesh         A   A               `          $0H`lx rmesh       $  F   F                         $0H`lx
  zrmesh         F   F                         $0H`lx
- rmesh         E   E   Ѐ             %                               @  ?   ?   Ѐ<                                                         Ԁ                ?   ?   Ј<                                                 E        Ԁ                E   E   Ѐ             %                              ?   ?   Ѐ<                p                                         Ԁ                ?   ?   Ѐ<                                                      Ԁ              b  E   E   Ѐ             %              -                     Ԁ               A   A                -&         $0H`lx rmesh        N   N                                 
+ rmesh         E   E   Ѐ             %                                       Ԁ                ?   ?   Ѐ<                                                 W        Ԁ                E   E   Ѐ             %                              ?   ?   Ѐ<                p                                         Ԁ              %  ?   ?   Ѐ<                                                      Ԁ                E   E   Ѐ             %              ,              A   A                -&         $0H`lx rmesh        N   N                                 
 
-        N   N                                
+       ) N   N                                
 
-        F   F                I&         $0H`lx
- -&rmesh        N   N                                
+        F   F                I&         $0H`lx
+ -&rmesh       Q N   N                                
 
-              Ԁ               N   N   <                                        
+       S       Ԁ               N   N   <                                        
      
-              Ԁ              8 N   N   <                                        
+              Ԁ               N   N   <                                        
      
-              Ԁ              (       <                                  E      @  
+       U       Ԁ                     <                                  E      @  
 
- 	 l                                                                                                             8       Ԁ                     <                                 E      @  
+ 	 l                                                                                                                    Ԁ              @       <                                 E      @  
 
- 	 l                                                                                                             
-       Ԁ              =       <                                 E      @  
+ 	 l                                                                                                                    Ԁ              ,       <                                 E      @  
 
- 	 l                                                                                                              N   N                                
+ 	 l                                                                                                             : N   N                                
 
-        N   N                                
+        N   N                                
 
-        N   N   <                                        
+       ) N   N   <                                        
      
-       *       Ԁ              % N   N                                
+       9       Ԁ               N   N                                
 
-       t N   N   <                                       
+       E N   N   <                                       
      
-       1       Ԁ               N   N   <                                       
+              Ԁ              + N   N   <                                       
      
-              Ԁ              k       <                                E      @  
+       M       Ԁ                      <                                E      @  
 
- 	 l                                                                                                             {       Ԁ                     <                                E      @  
+ 	 l                                                                                                                     Ԁ              8       <                                E      @  
 
- 	 l                                                                                                                    Ԁ              7 F   F                Ȼ&         $0H`lx
+ 	 l                                                                                                             }       Ԁ              7 F   F                Ȼ&         $0H`lx
  J&Ermesh               <                                  E     @  
 
- 	 l                                                                                                                     Ԁ              o        <                                 E     @  
+ 	 l                                                                                                                     Ԁ                      <                                 E     @  
 
- 	 l                                                                                                                     Ԁ                      <                                 E     @  
+ 	 l                                                                                                                     Ԁ              d        <                                 E     @  
 
- 	 l                                                                                                               A   A                +-         $0H`lx J&rmesh               Ԁ              	        <                                 E     @  
+ 	 l                                                                                                               A   A                +-         $0H`lx J&rmesh       	        Ԁ              T        <                                 E     @  
 
- 	 l                                                                                                             	        Ԁ              A
-        <                                 E     @  
+ 	 l                                                                                                             d        Ԁ                      <                                 E     @  
 
- 	 l                                                                                                                     Ԁ              $  F   F                -         $0H`lx
+ 	 l                                                                                                             G        Ԁ              $  F   F                -         $0H`lx
  -&rmesh         F   F                \.         $0H`lx
  -&rmesh       (       <                0                 E     @  
 
- 	 l                                                                                                             8       Ԁ                     <                0                E     @  
+ 	 l                                                                                                             8       Ԁ                     <                0                E     @  
 
- 	 l                                                                                                             ӣ       Ԁ                     <                0                E     @  
+ 	 l                                                                                                                     Ԁ              E       <                0                E     @  
 
- 	 l                                                                                                              A   A                Ko5         $0H`lx -rmesh       ǩ       Ԁ              '       <                0                E     @  
+ 	 l                                                                                                              A   A                Ko5         $0H`lx -rmesh       r       Ԁ              ,       <                0                E     @  
 
- 	 l                                                                                                             7       Ԁ                     <                0                E     @  
+ 	 l                                                                                                             <       Ԁ                     <                0                E     @  
 
- 	 l                                                                                                             Ҭ       Ԁ              - F   F                5         $0H`lx
+ 	 l                                                                                                             1       Ԁ              - F   F                5         $0H`lx
  o5].rmesh       7 F   F                5         $0H`lx
  5.rmesh               <                @                 E     @  
 
- 	 l                                                                                                                     Ԁ              o        <                @                E     @  
+ 	 l                                                                                                                     Ԁ                      <                @                E     @  
 
- 	 l                                                                                                                     Ԁ                      <                @                E     @  
+ 	 l                                                                                                                     Ԁ                      <                @                E     @  
 
- 	 l                                                                                                               A   A                k=         $0H`lx 5rmesh               Ԁ              
-        <                @                E     @  
+ 	 l                                                                                                               A   A                k=         $0H`lx 5rmesh       	        Ԁ              f        <                @                E     @  
 
- 	 l                                                                                                             )
-        Ԁ              
-        <                @                E     @  
+ 	 l                                                                                                             v        Ԁ              T        <                @                E     @  
 
- 	 l                                                                                                                     Ԁ              $  F   F               -=         $0H`lx
+ 	 l                                                                                                                     Ԁ              $  F   F               -=         $0H`lx
  =5rmesh         F   F                (=         $0H`lx
- -=(6rmesh       { E   E   Ѐ            %                               { ?   ?   Ѐ<                                                 K}       Ԁ              } ?   ?   Ј<                                                 9~       Ԁ              ~ E   E   Ѐ            0%                             ?   ?   Ѐ<                                                        Ԁ               ?   ?   Ѐ<                @                                    Ԁ              V E   E   Ѐ             %              6             <       Ԁ              (       <                P                 E     @  
+ -=(6rmesh       { E   E   Ѐ            %                               { ?   ?   Ѐ<                                                 {|       Ԁ              E}       Ԁ              } E   E   Ѐ            0%                            ~ ?   ?   Ѐ<                                                        Ԁ              d ?   ?   Ѐ<                @                                    Ԁ              2 E   E   Ѐ             %              ,                    Ԁ              (       <                P                 E     @  
 
- 	 l                                                                                                             8       Ԁ                     <                P                E     @  
+ 	 l                                                                                                             8       Ԁ                     <                P                E     @  
 
- 	 l                                                                                                             ӣ       Ԁ                     <                P                E     @  
+ 	 l                                                                                                                    Ԁ              "       <                P                E     @  
 
- 	 l                                                                                                              A   A               D         $0H`lx -=rmesh              Ԁ              '       <                P                E     @  
+ 	 l                                                                                                              A   A               D         $0H`lx -=rmesh              Ԁ                      <                P                E     @  
 
- 	 l                                                                                                             7       Ԁ                     <                P                E     @  
+ 	 l                                                                                                             0       Ԁ                     <                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.25/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap ns-3.26/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	2016-10-03 20:57:08.352246817 -0700
+++ ns-3.26/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap	2016-10-03 19:49:01.655387593 -0700
@@ -1,56 +1,54 @@
-ò            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
+ò            i       u$  <   <                 $          $0H`lx rmesh        $  >   >   Ѐ<                    $0H`lrmeshq   9u         R%        Ԁ               &        Ԁ               &  <   <   Ѐ<                     $0H`lq   9u          &        Ԁ               '  >   >   Ѐ<                    $0H`lrmeshq   9u         '        Ԁ               (  <   <   Ѐ<                     $0H`lq  9u          (        Ԁ               4)  <   <   Ѐ<                0    $0H`lq   9u          *  >   >   Ѐ<                @   $0H`lrmeshq   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
- zrmesh         ?   ?   Ѐ<                                                 	  ?   ?   Ј<                                                   E   E   Ѐ             %                            *  ?   ?   Ѐ<                p                                         Ԁ              b  ?   ?   Ѐ<                                                E   E   Ѐ             %              -              A   A                -&         $0H`lx rmesh       H N   N                                 
+ zrmesh         ?   ?   Ѐ<                                                   E   E   Ѐ             %                            -  ?   ?   Ѐ<                p                                         Ԁ                ?   ?   Ѐ<                                              e  E   E   Ѐ             %              ,              A   A                -&         $0H`lx rmesh       H N   N                                 
 
-       s N   N                                
+        N   N                                
 
-        F   F                I&         $0H`lx
- -&rmesh              Ԁ               N   N   <                                        
+       : F   F                I&         $0H`lx
+ -&rmesh       7       Ԁ               N   N   <                                        
      
-              Ԁ                      <                                  E      @  
+       (       Ԁ                     <                                  E      @  
 
- 	 l                                                                                                             d       Ԁ                     <                                 E      @  
+ 	 l                                                                                                                    Ԁ              H       <                                 E      @  
 
- 	 l                                                                                                             n N   N                                
+ 	 l                                                                                                               N   N                                
 
-        N   N   <                                        
+        N   N   <                                        
      
-       V       Ԁ               N   N                                
+       f       Ԁ               N   N                                
 
-        N   N   <                                       
+        N   N   <                                       
      
-              Ԁ                     <                                E      @  
+              Ԁ              @       <                                E      @  
 
- 	 l                                                                                                                    Ԁ                        <                                  E     @  
+ 	 l                                                                                                             P       Ԁ                        <                                  E     @  
 
- 	 l                                                                                                             D        Ԁ              w        <                                 E     @  
+ 	 l                                                                                                             D        Ԁ                      <                                 E     @  
 
- 	 l                                                                                                             k  A   A                +-         $0H`lx J&rmesh       
-        Ԁ              I        <                                 E     @  
+ 	 l                                                                                                             k  A   A                +-         $0H`lx J&rmesh               Ԁ                      <                                 E     @  
 
- 	 l                                                                                                             Y        Ԁ              $  F   F                -         $0H`lx
+ 	 l                                                                                                                     Ԁ              $  F   F                -         $0H`lx
  -&rmesh               <                0                 E     @  
 
- 	 l                                                                                                             d       Ԁ                     <                0                E     @  
+ 	 l                                                                                                             d       Ԁ              ģ       <                0                E     @  
 
- 	 l                                                                                                              A   A                Ko5         $0H`lx -rmesh       c       Ԁ                     <                0                E     @  
+ 	 l                                                                                                              A   A                Ko5         $0H`lx -rmesh       h       Ԁ                     <                0                E     @  
 
- 	 l                                                                                                                    Ԁ               F   F                5         $0H`lx
+ 	 l                                                                                                                    Ԁ               F   F                5         $0H`lx
  o5].rmesh                 <                @                 E     @  
 
- 	 l                                                                                                             D        Ԁ              w        <                @                E     @  
+ 	 l                                                                                                             D        Ԁ                      <                @                E     @  
 
- 	 l                                                                                                             k  A   A                k=         $0H`lx 5rmesh       U
-        Ԁ                      <                @                E     @  
+ 	 l                                                                                                             k  A   A                k=         $0H`lx 5rmesh               Ԁ              \        <                @                E     @  
 
- 	 l                                                                                                                     Ԁ              $  F   F               -=         $0H`lx
- =5rmesh       ,| ?   ?   Ѐ<                                                 } ?   ?   Ј<                                                 ~ E   E   Ѐ            0%                             ?   ?   Ѐ<                                                        Ԁ              V ?   ?   Ѐ<                @                              E   E   Ѐ             %              6                     <                P                 E     @  
+ 	 l                                                                                                             l        Ԁ              $  F   F               -=         $0H`lx
+ =5rmesh       >| ?   ?   Ѐ<                                                 Q~ E   E   Ѐ            0%                            ~ ?   ?   Ѐ<                                                 -       Ԁ               ?   ?   Ѐ<                @                              E   E   Ѐ             %              ,                     <                P                 E     @  
 
- 	 l                                                                                                             d       Ԁ                     <                P                E     @  
+ 	 l                                                                                                             d       Ԁ              Y       <                P                E     @  
 
- 	 l                                                                                                              A   A               D         $0H`lx -=rmesh       c       Ԁ                     <                P                E     @  
+ 	 l                                                                                                              A   A               D         $0H`lx -=rmesh       \       Ԁ                     <                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.25/src/mesh/test/dot11s/hwmp-reactive-regression.cc ns-3.26/src/mesh/test/dot11s/hwmp-reactive-regression.cc
--- ns-3.25/src/mesh/test/dot11s/hwmp-reactive-regression.cc	2016-10-03 20:57:08.358246770 -0700
+++ ns-3.26/src/mesh/test/dot11s/hwmp-reactive-regression.cc	2016-10-03 19:49:01.662387541 -0700
@@ -53,7 +53,11 @@
 HwmpReactiveRegressionTest::DoRun ()
 {
   RngSeedManager::SetSeed (12345);
-  RngSeedManager::SetRun (7);
+  // This test is somewhat sensitive to seed selection, since the nodes
+  // are on the fringe of reception range from one another (to create 
+  // a multi-hop topology).  Some seeds may yield no data transfer because
+  // ARP resolution across the mesh may fail too many times
+  RngSeedManager::SetRun (1);
   CreateNodes ();
   CreateDevices ();
   InstallApplications ();
diff -Naur ns-3.25/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap ns-3.26/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	2016-10-03 20:57:08.353246809 -0700
+++ ns-3.26/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap	2016-10-03 19:49:01.657387578 -0700
@@ -1,126 +1,116 @@
-ò            i       '  >   >   Ѐ<                    $0H`lrmeshq   9u         -  >   >   Ј<                    $0H`lrmeshq   9u         *  >   >   Ј<                    $0H`lrmeshq   9u         9  >   >   Ј<                    $0H`lrmeshq   9u         H  >   >   Ј<                    $0H`lrmeshq   9u         W  >   >   Ј<                    $0H`lrmeshq   9u         K  >   >   Ј<                    $0H`lrmeshq   9u           A   A                          $0H`lx  rmesh          >   >   Ѐ<                    $0H`lrmeshq   9u           >   >   Ј<                    $0H`lrmeshq   9u           >   >   Ј<                    $0H`lrmeshq   9u           >   >   Ј<                    $0H`lrmeshq   9u           >   >   Ј<                    $0H`lrmeshq   9u           >   >   Ј<                    $0H`lrmeshq   9u           >   >   Ј<                    $0H`lrmeshq   9u         H        Ԁ                 <   <   Ѐ<                      $0H`lq   9u            <   <   Ј<                      $0H`lq   9u          7 >   >   Ѐ<                0   $0H`lrmeshq   9u         8       Ԁ               JO A   A                JO         $0H`lx  rmesh        IP >   >   Ѐ<                @   $0H`lrmeshq  9u         YP       Ԁ               P <   <   Ѐ<                      $0H`lq   9u          LQ       Ԁ               i >   >   Ѐ<                0   $0H`lrmeshq   9u         2j       Ԁ               j <   <   Ѐ<                P    $0H`lq  9u          j       Ԁ               +b F   F               ` a         $0H`lx
-  Ormesh        j A   A               @ j         $0H`lx brmesh         F   F               p          $0H`lx
- rmesh       JO A   A               P          $0H`lx rmesh       +b F   F                         $0H`lx
- rmesh       j A   A               ` 2         $0H`lx rmesh       
-  N   N                
-                
+ò            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           A   A                          $0H`lx  rmesh          >   >   Ѐ<                    $0H`lrmeshq   9u         3  >   >   Ј<                    $0H`lrmeshq   9u         B  >   >   Ј<                    $0H`lrmeshq   9u         Q  >   >   Ј<                    $0H`lrmeshq   9u         E  >   >   Ј<                    $0H`lrmeshq   9u         B  >   >   Ј<                    $0H`lrmeshq   9u         -  >   >   Ј<                    $0H`lrmeshq   9u           A   A                          $0H`lx  rmesh          >   >   Ѐ<                    $0H`lrmeshq   9u                 Ԁ               i  <   <   Ѐ<                      $0H`lq   9u                 Ԁ               F >   >   Ѐ<                0   $0H`lrmeshq   9u         G >   >   Ј<                0   $0H`lrmeshq   9u         H >   >   Ј<                0   $0H`lrmeshq   9u         I >   >   Ј<                0   $0H`lrmeshq   9u         J >   >   Ј<                0   $0H`lrmeshq   9u         K >   >   Ј<                0   $0H`lrmeshq   9u         pL >   >   Ј<                0   $0H`lrmeshq   9u         :M -   -   Ѐ<                @ rmeshu   4         N -   -   Ј<                @ rmeshu   4         O       Ԁ               { >   >   Ѐ<                0   $0H`lrmeshq   9u         |       Ԁ               G} <   <   Ѐ<                P    $0H`lq  9u          W}       Ԁ               \ >   >   Ѐ<                `   $0H`lrmeshq  9u         	] >   >   Ј<                `   $0H`lrmeshq  9u         ^ >   >   Ј<                `   $0H`lrmeshq  9u         _ >   >   Ј<                `   $0H`lrmeshq  9u         $` >   >   Ј<                `   $0H`lrmeshq  9u         a >   >   Ј<                `   $0H`lrmeshq  9u         a >   >   Ј<                `   $0H`lrmeshq  9u         !} F   F               p |         $0H`lx
+ [rmesh        ~       Ԁ               ~ <   <   Ѐ<                    $0H`lq  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         l	 >   >   Ј<                   $0H`lrmeshq  9u         "	       Ԁ               	 -   -   Ѐ<                 rmeshu  7          >   >   Ѐ<                   $0H`lrmeshq  9u        ק  >   >   Ј<                   $0H`lrmeshq  9u        ݨ  >   >   Ј<                   $0H`lrmeshq  9u          >   >   Ј<                   $0H`lrmeshq  9u          >   >   Ј<                   $0H`lrmeshq  9u          >   >   Ј<                   $0H`lrmeshq  9u          >   >   Ј<                   $0H`lrmeshq  9u          F   F                         $0H`lx
+rmesh               Ԁ                <   <   Ѐ<                    $0H`lq  9u         2 A   A               P 1u         $0H`lx rmesh       H >   >   Ј<                   $0H`lrmeshq  9u        J >   >   Ј<                   $0H`lrmeshq  9u        K >   >   Ј<                   $0H`lrmeshq  9u        L >   >   Ј<                   $0H`lrmeshq  9u               Ԁ               -   -   Ѐ<                 rmeshu  7        ( >   >   Ѐ<                   $0H`lrmeshq  9u        	) >   >   Ј<                   $0H`lrmeshq  9u        !* >   >   Ј<                   $0H`lrmeshq  9u        + >   >   Ј<                   $0H`lrmeshq  9u        , >   >   Ј<                   $0H`lrmeshq  9u        *- >   >   Ј<                   $0H`lrmeshq  9u        . >   >   Ј<                   $0H`lrmeshq  9u        ! F   F                        $0H`lx
+irmesh              Ԁ               <   <   Ѐ<                    $0H`lq  9u          >   >   Ѐ<                0  $0H`lrmeshq  9u               Ԁ               -   -   Ѐ<                @rmeshu  4               Ԁ               -   -   Ѐ<                ` rmeshu  7               Ԁ               A   A               p Q         $0H`lx rmesh        >   >   Ј<                P  $0H`lrmeshq  9u               Ԁ              b -   -   Ѐ<                 rmeshu  4               Ԁ               -   -   Ѐ<                `rmeshu  7               Ԁ                <   <                q         $0H`lx rmesh         F   F               p	         $0H`lx
+
+rmesh       ,  >   >   Ѐ<                   $0H`lrmeshq   9u         >   >   Ј<                  $0H`lrmeshq  9u               Ԁ               >   >   Ј<                   $0H`lrmeshq   9u               Ԁ               <   <   Ѐ<                    $0H`lq   9u         ~       Ԁ               <   <   Ѐ<                   $0H`lq  9u                Ԁ              !} F   F               )'         $0H`lx
+&rmesh        A   A                $'         $0H`lx'rmesh         N   N               
+                
 
 
-       )  N   N          p      
-                
+         E   E   Ѐ             %                         
+             N   N                
+                
 
 
-         E   E   Ѐ             %                         
-           0  E   E   Ѐ             %                      
-                   Ԁ              3  ?   ?   Ѐ<                                   
-          C        Ԁ                N   N   <                
+         F   F               I.         $0H`lx
+M.%'rmesh         A   A                .         $0H`lx.rmesh       $ E   E   Ѐ             %                         
+           & E   E   Ѐ            %                      
+           !} F   F               iC6         $0H`lx
+5.rmesh        A   A               f6         $0H`lxC6rmesh        E   E   Ѐ             %                         
+           L E   E   Ѐ            %                      
+           l       Ԁ               ?   ?   Ѐ<                                   
+          %       Ԁ              č N   N   <                
                          
      
 
-       W        Ԁ                N   N   <                
+              Ԁ               N   N   <                
                         
      
 
-               Ԁ                b   b   <                       
+       T N   N   <                
+                        
+     
+
+              Ԁ               b   b   <                       
           E  0    @  
 
- 	                                      Ԁ              m0  N   N                                 
+ 	                                     Ԁ                     Ԁ               b   b   <                      
+          E  0   @  
+
+ 	                                     Ԁ              ֣ N   N          0                      
 
-       1  N   N                                
+       @       Ԁ               N   N                               
 
-       7        Ԁ              Z8  N   N   <                      
+       ӧ b   b   <                       
+          E  0   @  
+
+ 	                                     Ԁ                     Ԁ              } N   N   <                0      
                  
 
      
-       j8        Ԁ              8  b   b   <                
+              Ԁ               b   b   <                
                  E  0    @  
 
- 	                              9        Ԁ              j:  b   b   <                
+ 	                              ư       Ԁ               b   b   <                
+                  E  0   @  
+
+ 	                                     Ԁ              ǲ b   b   <                
                 E  0    @  
 
- 	                                F   F                E         $0H`lx
- 33rmesh       JO A   A                         $0H`lx Ermesh       o       Ԁ              6 b   b   <                       
-          E  0   @  
-
- 	                              F       Ԁ               b   b   <                
-                  E  0   @  
+ 	                              v b   b   <                
+0                 E  0   @  
 
- 	                              v       Ԁ              s b   b   <                
+ 	                              : b   b   <                
                  E  0   @  
 
- 	                              +b F   F                3&         $0H`lx
- &rmesh       j A   A                t'         $0H`lx &rmesh       ?       Ԁ               /   /   Ј<                        
-                   Ԁ                F   F                S.         $0H`lx
- u.u'rmesh       JO A   A                
-/         $0H`lx .rmesh       +b F   F               s(6         $0H`lx
- 6/rmesh       j A   A                *6         $0H`lx (6rmesh        E   E   Ѐ             %         
-     `                  9 ?   ?   Ѐ<                         
-                               Ԁ              p ?   ?   Ѐ<                0      
-                       ܑ       Ԁ               b   b   <                0      
-          E  0   @  
-
- 	                                     Ԁ              
- b   b   <                
+ 	                              ŵ b   b   <                
 0                 E  0   @  
 
- 	                               b   b   <                
-0                 E  0   @  
+ 	                                     Ԁ              = b   b   <                
+                 E  0   @  
 
- 	                                     Ԁ              L b   b   <                
-0                E  0   @  
+ 	                               b   b   <                
+                 E  0   @  
 
- 	                               b   b   <                
+ 	                              4 b   b   <                
 0                E  0   @  
 
- 	                                     Ԁ              ՚ b   b   <                @      
-          E  0   @  
+ 	                                      Ԁ                b   b   <                @      
+          E  0   @  
 
- 	                                     Ԁ              < b   b   <                
+ 	                                      Ԁ              :  b   b   <                
 @                 E  0   @  
 
- 	                                     Ԁ              Q b   b   <                
-@                E  0   @  
-
- 	                              :        Ԁ              :  /   /   Ѐ<                @       
-            ;        Ԁ                F   F               P=         $0H`lx
- =6rmesh       JO A   A                JX>         $0H`lx =rmesh       +b F   F               `jE         $0H`lx
- XEX>rmesh       j A   A                jE         $0H`lx kErmesh       	       Ԁ              	 b   b   <                P      
-          E  0   @  
-
- 	                              	       Ԁ              _	 E   E   Ѐ            %                         
-           	 E   E   Ѐ            p%                      
-           	       Ԁ              P	 b   b   <                `      
+ 	                                      Ԁ                F   F                =         $0H`lx
+=g6rmesh         A   A               @>         $0H`lx=rmesh       ;z       Ԁ              { /   /   Ј<                0       
+            {       Ԁ              r E   E   Ѐ            @%         
+                        ?   ?   Ѐ<                P        
+                        =       Ԁ              ˨ ?   ?   Ѐ<                P      
+                        ?   ?   Ј<                P      
+                       L       Ԁ              m b   b   <                P      
           E  0   @  
 
- 	                              `	       Ԁ               E   E   Ѐ             %                         
-            E   E   Ѐ            %                      
-                  Ԁ               ?   ?   Ѐ<                           [       
-                 Ԁ               b   b   <                
+ 	                              }       Ԁ              R b   b   <                
 P                 E  0   @  
 
- 	                                     Ԁ               b   b   <                
-P                E  0   @  
-
- 	                               b   b   <                
-`                 E  0   @  
-
- 	                                     Ԁ               b   b   <                
+ 	                              +       Ԁ              C b   b   <                
 P                E  0   @  
 
- 	                                     Ԁ              } ?   ?   Ѐ<                           [       
-                 Ԁ               b   b   <                
-P                E  0   @  
-
- 	                               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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
+ 	                              !} F   F               `E         $0H`lx
+0E>rmesh        A   A               `E         $0H`lxErmesh       J	       Ԁ              ZK	 /   /   Ѐ<                p       
+            jK	       Ԁ              z	 E   E   Ѐ            p%                         
+           	 E   E   Ѐ            %                      
+             F   F               &M         $0H`lx
+LErmesh         A   A               1JM         $0H`lx'Mrmesh       !} F   F               T         $0H`lx
+rTJMrmesh        A   A               QT         $0H`lxTrmesh         F   F               	i\         $0H`lx
+\Trmesh         A   A               q\         $0H`lxi\rmesh       !} F   F               )
+d         $0H`lx
+c\rmesh        A   A               -d         $0H`lx
+drmesh       R        Ԁ                F   F               Ik         $0H`lx
+Vk.drmesh               Ԁ              f  -   -   Ѐ<                rmeshu  4        ^        Ԁ                A   A               k         $0H`lxkrmesh        >   >   Ѐ<                   $0H`lrmeshq  9u               Ԁ                     Ԁ              v <   <   Ѐ<                   $0H`lq  9u         ! F   F                iPs         $0H`lx
+krrmesh        A   A               os         $0H`lxPsrmesh         F   F               0z         $0H`lx
+ps`zrmesh         A   A               {         $0H`lxzrmesh       ! F   F               @         $0H`lx
+{rmesh        A   A                        $0H`lxrmesh    	     F   F               P3         $0H`lx
+rmesh    	     A   A                1S         $0H`lx4rmesh    	   ! F   F               `ԑ         $0H`lx
+SCrmesh    	    A   A               Q         $0H`lxՑrmesh    
\ No newline at end of file
diff -Naur ns-3.25/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap ns-3.26/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	2016-10-03 20:57:08.354246802 -0700
+++ ns-3.26/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap	2016-10-03 19:49:01.658387571 -0700
@@ -1,198 +1,176 @@
-ò            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
- rmesh       O A   A               P          $0H`lx rmesh       O F   F                         $0H`lx
-rmesh       a F   F                         $0H`lx
- rmesh        A   A               ` 2         $0H`lx rmesh       S
-  N   N                
-                
+ò            i       B  <   <                 ڥ          $0H`lx rmesh        v  >   >   Ѐ<                    $0H`lrmeshq   9u         X  >   >   Ј<                    $0H`lrmeshq   9u         U  >   >   Ј<                    $0H`lrmeshq   9u         m  >   >   Ј<                    $0H`lrmeshq   9u           >   >   Ј<                    $0H`lrmeshq   9u         g  >   >   Ј<                    $0H`lrmeshq   9u         m  >   >   Ј<                    $0H`lrmeshq   9u           A   A                          $0H`lx  rmesh        a  A   A                          $0H`lx  rmesh          >   >   Ѐ<                    $0H`lrmeshq   9u         G        Ԁ                 <   <   Ѐ<                      $0H`lq   9u                  Ԁ               BF >   >   Ѐ<                0   $0H`lrmeshq   9u         ?G >   >   Ј<                0   $0H`lrmeshq   9u         <H >   >   Ј<                0   $0H`lrmeshq   9u         BI >   >   Ј<                0   $0H`lrmeshq   9u         ?J >   >   Ј<                0   $0H`lrmeshq   9u         !K >   >   Ј<                0   $0H`lrmeshq   9u         L >   >   Ј<                0   $0H`lrmeshq   9u         L -   -   Ѐ<                @ rmeshu   4         M -   -   Ј<                @ rmeshu   4         IN       Ԁ               N       Ԁ               O -   -   Ѐ<                  rmeshu  7         O       Ԁ               v >   >   Ѐ<                0   $0H`lrmeshq   9u         w       Ԁ               x -   -   Ѐ<                @ rmeshu  7         f| >   >   Ѐ<                0   $0H`lrmeshq   9u         v|       Ԁ               | <   <   Ѐ<                P    $0H`lq  9u          }       Ԁ               b[ <   <               P Z         $0H`lx rmesh        [ >   >   Ѐ<                `   $0H`lrmeshq  9u         \ >   >   Ј<                `   $0H`lrmeshq  9u         ] >   >   Ј<                `   $0H`lrmeshq  9u         ^ >   >   Ј<                `   $0H`lrmeshq  9u         _ >   >   Ј<                `   $0H`lrmeshq  9u         ` >   >   Ј<                `   $0H`lrmeshq  9u         {a >   >   Ј<                `   $0H`lrmeshq  9u         | F   F               p |         $0H`lx
+ [rmesh        } >   >   Ѐ<                `   $0H`lrmeshq   9u         }       Ԁ               )~ <   <   Ѐ<                    $0H`lq  9u          ~       Ԁ                A   A               @          $0H`lx }rmesh        b >   >   Ѐ<                   $0H`lrmeshq  9u         ; >   >   Ј<                   $0H`lrmeshq  9u         8 >   >   Ј<                   $0H`lrmeshq  9u         5 >   >   Ј<                   $0H`lrmeshq  9u         ; >   >   Ј<                   $0H`lrmeshq  9u          	 >   >   Ј<                   $0H`lrmeshq  9u          	 >   >   Ј<                   $0H`lrmeshq  9u         	       Ԁ               ,	 >   >   Ѐ<                p   $0H`lrmeshq   9u         -	       Ԁ               	 -   -   Ѐ<                 rmeshu  7         	 -   -   Ѐ<                 rmeshu  9         	       Ԁ               D	 -   -   Ѐ<                 rmeshu  7         	       Ԁ              B  <   <                         $0H`lx rmesh       v  >   >   Ѐ<                   $0H`lrmeshq  9u        j  >   >   Ј<                   $0H`lrmeshq  9u        p  >   >   Ј<                   $0H`lrmeshq  9u        R  >   >   Ј<                   $0H`lrmeshq  9u        O  >   >   Ј<                   $0H`lrmeshq  9u        :  >   >   Ј<                   $0H`lrmeshq  9u          >   >   Ј<                   $0H`lrmeshq  9u          F   F                         $0H`lx
+rmesh         >   >   Ј<                   $0H`lrmeshq   9u                Ԁ                <   <   Ѐ<                    $0H`lq  9u                 Ԁ              BF >   >   Ѐ<                   $0H`lrmeshq  9u        6G >   >   Ј<                   $0H`lrmeshq  9u        3H >   >   Ј<                   $0H`lrmeshq  9u        0I >   >   Ј<                   $0H`lrmeshq  9u        6J >   >   Ј<                   $0H`lrmeshq  9u        EK >   >   Ј<                   $0H`lrmeshq  9u        BL >   >   Ј<                   $0H`lrmeshq  9u        M       Ԁ              R >   >   Ѐ<                   $0H`lrmeshq   9u        S       Ԁ              qT -   -   Ѐ<                 rmeshu  7        ~ -   -   Ѐ<                 rmeshu  9        ~       Ԁ              E -   -   Ѐ<                 rmeshu  7               Ԁ              b' <   <                :i         $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`lq   9u         6. >   >   Ј<                   $0H`lrmeshq  9u        D0 >   >   Ј<                  $0H`lrmeshq   9u        &1 >   >   Ј<                  $0H`lrmeshq   9u        2 >   >   Ј<                  $0H`lrmeshq   9u        3 >   >   Ј<                  $0H`lrmeshq   9u        ,4       Ԁ               F   F                        $0H`lx
+irmesh        >   >   Ѐ<                   $0H`lrmeshq  9u        ɡ       Ԁ              2 <   <   Ѐ<                    $0H`lq  9u         ע       Ԁ              b >   >   Ѐ<                0  $0H`lrmeshq  9u               Ԁ               <   <   Ј<                0   $0H`lq  9u                Ԁ              A -   -   Ѐ<                @rmeshu  4               Ԁ              Q -   -   Ѐ<                ` rmeshu  7        a       Ԁ               A   A               p Q         $0H`lx rmesh        >   >   Ѐ<                P  $0H`lrmeshq  9u         >   >   Ј<                P  $0H`lrmeshq  9u        7       Ԁ               -   -   Ѐ<                 rmeshu  4               Ԁ              / -   -   Ѐ<                `rmeshu  7               Ԁ              R  F   F               @Z
+         $0H`lx
+rmesh       Y  <   <                q         $0H`lx rmesh         F   F               p	         $0H`lx
+
+rmesh       ,  >   >   Ѐ<                  $0H`lrmeshq  9u          >   >   Ј<                  $0H`lrmeshq  9u               Ԁ              i >   >   Ј<                   $0H`lrmeshq   9u        y       Ԁ              B <   <   Ѐ<                    $0H`lq   9u         R       Ԁ               <   <   Ѐ<                   $0H`lq  9u         E       Ԁ              r' F   F               Pz&         $0H`lx
+rmesh       | F   F               )'         $0H`lx
+&rmesh        A   A                $'         $0H`lx'rmesh         N   N          `     
+                
 
 
-       ~
-  N   N                
-                
+       :  N   N               
+                
 
 
-         N   N          p      
-                
+       z  N   N                
+                
 
 
-       m  E   E   Ѐ             %                         
-             E   E   Ѐ             %                      
-             E   E   Ѐ             %              3       
-           i  ?   ?   Ѐ<                                   
-          y        Ԁ                ?   ?   Ѐ<                                   
-          p        Ԁ                N   N   <                
+       R  F   F               pL.         $0H`lx
+rmesh         F   F               I.         $0H`lx
+M.%'rmesh       a  A   A                .         $0H`lx.rmesh       w8 -   -   Ѐ<                rmeshu  4        f9       Ԁ              ; >   >   Ѐ<                  $0H`lrmeshq  9u	        ; >   >   Ј<                  $0H`lrmeshq  9u	        <       Ԁ              = -   -   Ѐ<                rmeshu	  7        /% E   E   Ѐ             %                         
+           % E   E   Ѐ            %                      
+           +' E   E   Ѐ            %              f       
+           j' A   A               5         $0H`lx.rmesh       5(       Ԁ              ( <   <   Ѐ<                  	 $0H`lq  9u
+         +       Ԁ              | F   F               iC6         $0H`lx
+5.rmesh        A   A               f6         $0H`lxC6rmesh       / E   E   Ѐ             %                         
+           ؅ E   E   Ѐ            %                      
+            E   E   Ѐ            %              f       
+                  Ԁ              0 ?   ?   Ѐ<                                   
+          @       Ԁ               ?   ?   Ѐ<                                   
+          R       Ԁ              E N   N   <                
                          
      
 
-       +        Ԁ                N   N   <                
+       U       Ԁ               N   N   <                
                         
      
 
-       ?        Ԁ                N   N   <                
-                        
+       Ԑ N   N   <                
+                        
      
 
-               Ԁ                b   b   <                       
+              Ԁ              ٙ       Ԁ               b   b   <                       
           E  0    @  
 
- 	                                      Ԁ              I  b   b   <                       
+ 	                              ˚       Ԁ              j b   b   <                       
           E  0    @  
 
- 	                              "        Ԁ              0  N   N                                 
+ 	                              C       Ԁ                     Ԁ              ؟ b   b   <                      
+          E  0   @  
+
+ 	                                     Ԁ              l b   b   <                      
+          E  0   @  
+
+ 	                              E       Ԁ              ѣ       Ԁ              W N   N          0                      
 
-       1  N   N                                
+        b   b   <                       
+          E  0   @  
+
+ 	                                     Ԁ               N   N                               
 
-       E2  N   N                                
+        N   N                               
 
-       6        Ԁ              s7  N   N   <                      
+       7 b   b   <                       
+          E  0   @  
+
+ 	                                     Ԁ              I       Ԁ              W N   N   <                0      
                  
 
      
-       7        Ԁ              7  N   N   <                      
+       g       Ԁ               N   N   <                0      
                  
 
      
-       8        Ԁ              ^9  b   b   <                
+              Ԁ               b   b   <                
                  E  0    @  
 
- 	                              n9        Ԁ              9  b   b   <                
-                E  0    @  
-
- 	                              :        Ԁ                F   F                2         $0H`lx
-rmesh         F   F                E         $0H`lx
- 33rmesh       O A   A                         $0H`lx Ermesh               Ԁ              3 b   b   <                       
-          E  0   @  
-
- 	                              C       Ԁ               b   b   <                       
-          E  0   @  
-
- 	                              s       Ԁ              : b   b   <                
+ 	                                     Ԁ               b   b   <                
                   E  0   @  
 
- 	                              J       Ԁ              ר b   b   <                
-                 E  0   @  
+ 	                              ±       Ԁ              + b   b   <                
+                E  0    @  
 
- 	                                     Ԁ              w b   b   <                
-                 E  0   @  
+ 	                                     Ԁ               b   b   <                
+                 E  0   @  
 
- 	                              O F   F                &         $0H`lx
-ER&rmesh       a F   F                3&         $0H`lx
- &rmesh        A   A                t'         $0H`lx &rmesh              Ԁ               /   /   Ѐ<                       
-                   Ԁ              a /   /   Ѐ<                        
-            J /   /   Ј<                        
-            E /   /   Ј<                        
-                   Ԁ                F   F                t.         $0H`lx
-&-rmesh         F   F                S.         $0H`lx
- u.u'rmesh       O A   A                
-/         $0H`lx .rmesh       O F   F               06         $0H`lx
-.h5rmesh       a F   F               s(6         $0H`lx
- 6/rmesh        A   A                *6         $0H`lx (6rmesh       T E   E   Ѐ            @%         
-                        E   E   Ѐ             %         
-     `                   ?   ?   Ѐ<                         
-                               Ԁ               ?   ?   Ѐ<                0      
-                              Ԁ              ; ?   ?   Ѐ<                P      
-     u                 ِ       Ԁ               b   b   <                0      
-          E  0   @  
-
- 	                                     Ԁ               b   b   <                0      
-          E  0   @  
-
- 	                                     Ԁ              I b   b   <                
+ 	                              b b   b   <                
 0                 E  0   @  
 
- 	                              Y       Ԁ               b   b   <                
-0                E  0   @  
+ 	                              r       Ԁ               b   b   <                
+                 E  0   @  
 
- 	                               b   b   <                
+ 	                              ^ b   b   <                
+                 E  0   @  
+
+ 	                              7       Ԁ               b   b   <                
 0                E  0   @  
 
- 	                              ڗ       Ԁ                     Ԁ              ҙ b   b   <                @      
-          E  0   @  
+ 	                              q       Ԁ              A b   b   <                
+                 E  0   @  
+
+ 	                              i b   b   <                
+0                E  0   @  
+
+ 	                              L        Ԁ              v  b   b   <                @      
+          E  0   @  
 
- 	                                     Ԁ              9 b   b   <                @      
-          E  0   @  
+ 	                                      Ԁ                b   b   <                @      
+          E  0   @  
 
- 	                                     Ԁ              ٛ b   b   <                
+ 	                                      Ԁ                b   b   <                
 @                 E  0   @  
 
- 	                                     Ԁ               b   b   <                
+ 	                                      Ԁ                b   b   <                
 @                E  0   @  
 
- 	                                     Ԁ              U b   b   <                
-0                E  0   @  
+ 	                                      Ԁ              	  b   b   <                
+@                E  0   @  
 
- 	                              9        Ԁ              E:  /   /   Ѐ<                `       
-            U:        Ԁ              :  /   /   Ѐ<                @       
-            8;        Ԁ                F   F               p(=         $0H`lx
-(6<rmesh         F   F               P=         $0H`lx
- =6rmesh       O A   A                JX>         $0H`lx =rmesh       O F   F               HXE         $0H`lx
-=Drmesh       a F   F               `jE         $0H`lx
- XEX>rmesh        A   A                jE         $0H`lx kErmesh       
-	       Ԁ              	 b   b   <                P      
-          E  0   @  
-
- 	                              	       Ԁ              8	 b   b   <                P      
-          E  0   @  
-
- 	                              	       Ԁ              	 E   E   Ѐ            %                         
-           #	 E   E   Ѐ            p%                      
-           	       Ԁ              M	 b   b   <                `      
+ 	                              R  F   F                ڎ=         $0H`lx
+C6	6rmesh         F   F                =         $0H`lx
+=g6rmesh       a  A   A               @>         $0H`lx=rmesh       x       Ԁ              y /   /   Ј<                0       
+            z       Ԁ              \z /   /   Ѐ<                0       
+            1{ /   /   Ј<                0       
+            {       Ԁ              ^ E   E   Ѐ            @%         
+                        E   E   Ѐ            @%         
+                        ?   ?   Ѐ<                P        
+                               Ԁ              _ ?   ?   Ѐ<                P      
+                       w ?   ?   Ј<                P      
+                               Ԁ                     Ԁ               b   b   <                P      
           E  0   @  
 
- 	                              ]	       Ԁ              	 b   b   <                `      
+ 	                                      Ԁ              ѯ b   b   <                P      
           E  0   @  
 
- 	                              	       Ԁ              I E   E   Ѐ             %                         
-            E   E   Ѐ            %                      
-            E   E   Ѐ            %              8       
-           )       Ԁ               ?   ?   Ѐ<                                  
-                 Ԁ               ?   ?   Ѐ<                           [       
-                 Ԁ               b   b   <                
+ 	                                     Ԁ               b   b   <                
 P                 E  0   @  
 
- 	                                     Ԁ               b   b   <                
-P                E  0   @  
-
- 	                               b   b   <                
-`                 E  0   @  
-
- 	                                     Ԁ              M b   b   <                
-P                E  0   @  
-
- 	                              %       Ԁ               ?   ?   Ѐ<                                  
-                 Ԁ               ?   ?   Ѐ<                           [       
-                 Ԁ              _ b   b   <                
+ 	                                     Ԁ               b   b   <                
 P                E  0   @  
 
- 	                              8       Ԁ               b   b   <                
-@                E  0   @  
-
- 	                               b   b   <                
-`                E  0   @  
-
- 	                              Z       Ԁ               b   b   <                
-@                E  0   @  
+ 	                                     Ԁ              z b   b   <                
+P                E  0   @  
 
- 	                               b   b   <                
-P                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 F   F               T         $0H`lx
-M/Lrmesh       a F   F               T         $0H`lx
- 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
+ 	                              r' F   F               `/E         $0H`lx
+=	O>rmesh       | F   F               `E         $0H`lx
+0E>rmesh        A   A               `E         $0H`lxErmesh       I	       Ԁ              J	 /   /   Ѐ<                p       
+            J	       Ԁ              K	 /   /   Ѐ<                p       
+            K	       Ԁ              	 E   E   Ѐ            p%                         
+           >	 E   E   Ѐ            %                      
+           	 E   E   Ѐ            %              8       
+           R  F   F               L         $0H`lx
+E	Ermesh         F   F               &M         $0H`lx
+LErmesh       a  A   A               1JM         $0H`lx'Mrmesh       r' F   F               :rT         $0H`lx
+'M	Ermesh       | F   F               T         $0H`lx
+rTJMrmesh        A   A               QT         $0H`lxTrmesh        -   -   Ѐ<                rmeshu
+  4        | -   -   Ј<                rmeshu
+  4        O -   -   Ј<                rmeshu
+  4        + -   -   Ј<                rmeshu
+  4        + -   -   Ј<                rmeshu
+  4         -   -   Ј<                rmeshu
+  4         -   -   Ј<                rmeshu
+  4        J  A   A               Z\         $0H`lxTrmesh         F   F               	i\         $0H`lx
+\Trmesh       a  A   A               q\         $0H`lxi\rmesh       j' A   A               zc         $0H`lxi\rmesh       | F   F               )
+d         $0H`lx
+c\rmesh        A   A               -d         $0H`lx
+drmesh       J  A   A               Uk         $0H`lxi\rmesh         -   -   Ѐ<                rmeshu  4        &        Ԁ              t  -   -   Ѐ<                rmeshu  7                Ԁ                F   F               Ik         $0H`lx
+Vk.drmesh         >   >   Ѐ<                   $0H`lrmeshq   9u                Ԁ                -   -   Ѐ<                rmeshu  4                Ԁ              "  -   -   Ѐ<                rmeshu  7        2        Ԁ              a  A   A               k         $0H`lxkrmesh       b <   <                r         $0H`lx rmesh        >   >   Ѐ<                   $0H`lrmeshq  9u        -       Ԁ               <   <   Ѐ<                0   $0H`lq   9u                Ԁ               >   >   Ѐ<                @  $0H`lrmeshq   9u               Ԁ               <   <   Ѐ<                   $0H`lq  9u                Ԁ               F   F                iPs         $0H`lx
+krrmesh        A   A               os         $0H`lxPsrmesh       JN  A   A               P_z         $0H`lxPsrmesh         F   F               0z         $0H`lx
+ps`zrmesh       a  A   A               {         $0H`lxzrmesh       j A   A               `          $0H`lxzrmesh        F   F               @         $0H`lx
+{rmesh        A   A                        $0H`lxrmesh    	   JN  A   A               p         $0H`lxrmesh    	     F   F               P3         $0H`lx
+rmesh    	   a  A   A                1S         $0H`lx4rmesh    	   j A   A               :C         $0H`lx4rmesh    	    F   F               `ԑ         $0H`lx
+SCrmesh    	    A   A               Q         $0H`lxՑrmesh    
\ No newline at end of file
diff -Naur ns-3.25/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap ns-3.26/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	2016-10-03 20:57:08.355246794 -0700
+++ ns-3.26/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap	2016-10-03 19:49:01.659387564 -0700
@@ -1,215 +1,191 @@
-ò            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
- rmesh        F   F                m         $0H`lx
-rmesh       HO F   F                         $0H`lx
-rmesh       +b F   F                         $0H`lx
- rmesh       	  N   N                
-                
+ò            i       z  >   >   Ѐ<      	              $0H`lrmeshq   9u           >   >   Ј<      	              $0H`lrmeshq   9u           >   >   Ј<      	              $0H`lrmeshq   9u         h  >   >   Ј<      	              $0H`lrmeshq   9u         k  >   >   Ј<      	              $0H`lrmeshq   9u         V  >   >   Ј<      	              $0H`lrmeshq   9u         ڥ  <   <                 ڥ          $0H`lx rmesh          A   A                          $0H`lx  rmesh        $  >   >   Ѐ<                   $0H`lrmeshq   9u         <  >   >   Ј<                   $0H`lrmeshq   9u           >   >   Ј<                   $0H`lrmeshq   9u         6  >   >   Ј<                   $0H`lrmeshq   9u           >   >   Ј<                   $0H`lrmeshq   9u           >   >   Ј<                   $0H`lrmeshq   9u           >   >   Ј<                   $0H`lrmeshq   9u           >   >   Ѐ<                    $0H`lrmeshq   9u                Ԁ               O0 >   >   Ѐ<      	              $0H`lrmeshq   9u         11 >   >   Ј<      	              $0H`lrmeshq   9u         2 >   >   Ј<      	              $0H`lrmeshq   9u         3 >   >   Ј<      	              $0H`lrmeshq   9u         3 >   >   Ј<      	              $0H`lrmeshq   9u         4 >   >   Ј<      	              $0H`lrmeshq   9u         5 >   >   Ј<      	              $0H`lrmeshq   9u         7       Ԁ       	        7       Ԁ       	        8 <   <   Ѐ<      	          0     $0H`lq  9u          N -   -   Ј<                @ rmeshu   4         N       Ԁ               N -   -   Ј<                P rmeshu   4         N       Ԁ               0O -   -   Ѐ<                  rmeshu  7         O       Ԁ               bv F   F               ` u         $0H`lx
+   rmesh        v >   >   Ѐ<                0   $0H`lrmeshq   9u         6w       Ԁ               w -   -   Ѐ<                p rmeshu  4         w       Ԁ               .x -   -   Ѐ<                @ rmeshu  7         x       Ԁ               |       Ԁ               G} <   <   Ѐ<                P    $0H`lq  9u          Z <   <               P Z         $0H`lx rmesh        !} F   F               p |         $0H`lx
+ [rmesh        ^} >   >   Ѐ<                `   $0H`lrmeshq   9u         ~       Ԁ               ~ <   <   Ѐ<                    $0H`lq  9u          ~       Ԁ               	 -   -   Ѐ<                 rmeshu   4         	       Ԁ               	 F   F                
+	         $0H`lx
+ 1[rmesh        	 >   >   Ѐ<                p   $0H`lrmeshq   9u         h	       Ԁ               	 -   -   Ѐ<                 rmeshu  4          	       Ԁ               N	 -   -   Ѐ<                 rmeshu  7         	       Ԁ               	 -   -   Ѐ<                 rmeshu  9         "	       Ԁ               	 -   -   Ѐ<                 rmeshu  7         	       Ԁ              ڥ  <   <                         $0H`lx rmesh         F   F                         $0H`lx
+rmesh       >  >   >   Ѐ<                   $0H`lrmeshq   9u        ;  >   >   Ј<                   $0H`lrmeshq   9u                Ԁ                <   <   Ѐ<                    $0H`lq  9u                 Ԁ              LM -   -   Ѐ<                 rmeshu   4        \M       Ԁ              bR F   F                *         $0H`lx
+ 1rmesh       R >   >   Ѐ<                   $0H`lrmeshq   9u        6S       Ԁ              S -   -   Ѐ<                rmeshu  4        S       Ԁ              T -   -   Ѐ<                 rmeshu  7        T       Ԁ              ~ -   -   Ѐ<                 rmeshu  9               Ԁ               -   -   Ѐ<                 rmeshu  7               Ԁ              & <   <                :i         $0H`lx rmesh       , >   >   Ј<                   $0H`lrmeshq  9u        ,       Ԁ              ^- <   <   Ѐ<                    $0H`lq   9u         .       Ԁ              7. >   >   Ѐ<                  $0H`lrmeshq   9u        V/ -   -   Ѐ<      	          0rmeshu  4        / >   >   Ј<                  $0H`lrmeshq   9u        0 >   >   Ј<                  $0H`lrmeshq   9u        1 >   >   Ј<                  $0H`lrmeshq   9u        2 >   >   Ј<                  $0H`lrmeshq   9u        T3       Ԁ              3 <   <   Ѐ<                @   $0H`lq  9u          4       Ԁ              ! F   F                        $0H`lx
+irmesh       L >   >   Ѐ<                   $0H`lrmeshq  9u               Ԁ               <   <   Ѐ<                    $0H`lq  9u                Ԁ              z A   A               PJ         $0H`lxirmesh        >   >   Ѐ<                0  $0H`lrmeshq  9u               Ԁ              ? <   <   Ѐ<                0   $0H`lq  9u         8 <   <   Ј<                0   $0H`lq  9u                Ԁ               -   -   Ѐ<                @rmeshu  4               Ԁ              " >   >   Ѐ<                P  $0H`lrmeshq  9u         >   >   Ј<                P  $0H`lrmeshq  9u               Ԁ               -   -   Ѐ<                `rmeshu  7        څ  F   F               @Z
+         $0H`lx
+rmesh         >   >   Ѐ<      	          `  $0H`lrmeshq  9u                Ԁ       	       b        Ԁ       	         <   <   Ѐ<      	          p   $0H`lq  9u           F   F               p	         $0H`lx
+
+rmesh        >   >   Ј<                  $0H`lrmeshq  9u               Ԁ              ~       Ԁ               <   <   Ѐ<                   $0H`lq  9u         b: F   F               j         $0H`lx
+
+rmesh       & F   F               Pz&         $0H`lx
+rmesh         N   N               
+                
 
 
-       	  N   N                
-                
+         N   N          `     
+                
 
 
-       
-  N   N                
-                
+         N   N               
+                
 
 
-       0  E   E   Ѐ             %                      
-             E   E   Ѐ             %              3       
-             E   E   Ѐ             %                     
-             ?   ?   Ѐ<                            /       
-                  Ԁ                ?   ?   Ѐ<                                   
-                  Ԁ              3  ?   ?   Ѐ<                                   
-          W        Ԁ                N   N   <                
+       څ  F   F               pL.         $0H`lx
+rmesh         F   F               I.         $0H`lx
+M.%'rmesh       "8 -   -   Ѐ<                rmeshu  4        8       Ԁ              )9 -   -   Ѐ<                rmeshu  7        99       Ԁ              b: F   F                /         $0H`lx
+M.V.rmesh       : >   >   Ѐ<                  $0H`lrmeshq  9u	        ; >   >   Ј<                  $0H`lrmeshq  9u	        3<       Ԁ              < -   -   Ѐ<                rmeshu 	 4        <       Ԁ              += -   -   Ѐ<                rmeshu	  7        =       Ԁ              & E   E   Ѐ            %                      
+           & E   E   Ѐ            %              f       
+           & A   A               5         $0H`lx.rmesh       ' >   >   Ѐ<                  $0H`lrmeshq  9u        	(       Ԁ              `( <   <   Ѐ<                  	 $0H`lq  9u
+         )       Ԁ              9) >   >   Ѐ<                  $0H`lrmeshq  9u
+        )       Ԁ              e+ <   <   Ј<                   $0H`lq  9u 
+        u+       Ԁ              !} F   F               iC6         $0H`lx
+5.rmesh        F   F                ʹ6         $0H`lx
+V.5rmesh       L E   E   Ѐ            %                      
+            E   E   Ѐ            %              f       
+            E   E   Ѐ            %                     
+           Ŋ       Ԁ       	       \ ?   ?   Ѐ<                            0       
+          l       Ԁ              Ë ?   ?   Ѐ<                                   
+          l       Ԁ               ?   ?   Ѐ<                                   
+                 Ԁ       	              Ԁ              T N   N   <                
                         
      
 
-               Ԁ              i  N   N   <                
+       d       Ԁ               N   N   <                
                         
      
 
-       &        Ԁ                N   N   <      	          
-                        
-     
-
-               Ԁ       	         b   b   <                       
+       Ғ       Ԁ                     Ԁ       	        b   b   <                       
           E  0    @  
 
- 	                                      Ԁ              E  b   b   <                       
+ 	                                     Ԁ               b   b   <                       
           E  0    @  
 
- 	                                      Ԁ                b   b   <                       
+ 	                                     Ԁ               b   b   <                       
           E  0    @  
 
- 	                              ,  F   F                         $0H`lx
-`rmesh       1  N   N                                
-
-       1  N   N                                
+ 	                              #       Ԁ       	       q b   b   <                      
+          E  0   @  
+
+ 	                                     Ԁ              ; b   b   <                      
+          E  0   @  
+
+ 	                                     Ԁ               b   b   <                      
+          E  0   @  
+
+ 	                                     Ԁ       	        b   b   <                       
+          E  0   @  
+
+ 	                                     Ԁ              g b   b   <                       
+          E  0   @  
+
+ 	                              @       Ԁ               N   N                               
 
-       2  N   N                                
+       y N   N                               
 
-       5        Ԁ       	       6  N   N   <                      
+              Ԁ       	        N   N   <                0      
                  
 
      
-       6        Ԁ              6  N   N   <                      
+              Ԁ              ֭ N   N   <                0      
                  
 
      
-       7        Ԁ              Z8  N   N   <                      
-                 
-
-     
-       9        Ԁ              j:  b   b   <                
+              Ԁ              ư       Ԁ                     Ԁ              ǲ b   b   <                
                 E  0    @  
 
- 	                              z:        Ԁ              :  b   b   <                
+ 	                              ײ       Ԁ              I b   b   <                
                 E  0    @  
 
- 	                              ;        Ԁ              q<  b   b   <      	          
-                E  0    @  
-
- 	                              (  F   F                2         $0H`lx
-rmesh         F   F                E         $0H`lx
- 33rmesh              Ԁ       	       ã b   b   <                       
-          E  0   @  
-
- 	                              ӣ       Ԁ              * b   b   <                       
-          E  0   @  
-
- 	                               b   b   <                       
-          E  0   @  
-
- 	                              o       Ԁ              6 b   b   <                       
-          E  0   @  
-
- 	                              v       Ԁ              s b   b   <                
+ 	                              "       Ԁ                     Ԁ               b   b   <                
                  E  0   @  
 
- 	                                     Ԁ              ک b   b   <                
+ 	                              
+       Ԁ              4 b   b   <                
+0                E  0   @  
+
+ 	                              D       Ԁ               b   b   <                
                  E  0   @  
 
- 	                                     Ԁ               F   F               Q&         $0H`lx
-3`rmesh       HO F   F                &         $0H`lx
-ER&rmesh       +b F   F                3&         $0H`lx
- &rmesh       L <   <   Ѐ<                        	           
-            \       Ԁ               /   /   Ѐ<                       
-            ?       Ԁ               /   /   Ѐ<                        
-             /   /   Ј<                        
-            },  A   A               @-         $0H`lx&rmesh       (  F   F                t.         $0H`lx
-&-rmesh         F   F                S.         $0H`lx
- u.u'rmesh       } >   >   Ѐ<      	          P  $0H`lrmeshq  9u        ~       Ԁ       	       s       Ԁ       	        <   <   Ѐ<      	          `   $0H`lq  9u          F   F               pg5         $0H`lx
-u.C5rmesh       HO F   F               06         $0H`lx
-.h5rmesh       +b F   F               s(6         $0H`lx
- 6/rmesh       Ɓ ?   ?   Ѐ<      	                  
-                       E   E   Ѐ            %         
-     ,                  ߃ E   E   Ѐ            @%         
-                        E   E   Ѐ             %         
-     `                         Ԁ              p ?   ?   Ѐ<                0      
-                              Ԁ              Ά ?   ?   Ѐ<                P      
-     u                 w       Ԁ               ?   ?   Ј<      	                
-                       ?   ?   Ј<      	                
-                      Տ       Ԁ       	        b   b   <                0      
-          E  0   @  
-
- 	                                     Ԁ               b   b   <                0      
-          E  0   @  
-
- 	                              ܑ       Ԁ               b   b   <                0      
-          E  0   @  
-
- 	                                     Ԁ       	        b   b   <                
-0                E  0   @  
+ 	                              }       Ԁ              ̼ b   b   <                
+0                E  0   @  
 
- 	                                     Ԁ              Θ b   b   <                @      
-          E  0   @  
-
- 	                              ޘ       Ԁ              5 b   b   <                @      
-          E  0   @  
-
- 	                                     Ԁ              ՚ b   b   <                @      
-          E  0   @  
-
- 	                                     Ԁ              Q b   b   <                
-@                E  0   @  
+ 	                                     Ԁ              ƾ b   b   <      	          
+                 E  0   @  
 
- 	                              a       Ԁ               b   b   <                
-0                E  0   @  
+ 	                              B b   b   <      	          
+0                E  0   @  
 
- 	                                     Ԁ              & F   F               <         $0H`lx
-6<rmesh       9        Ԁ       	       9  /   /   Ѐ<                       
-            9        Ԁ              9  /   /   Ѐ<                `       
-            :        Ԁ              :  /   /   Ѐ<                @       
-            (  F   F               p(=         $0H`lx
-(6<rmesh         F   F               P=         $0H`lx
- =6rmesh        F   F               -D         $0H`lx
-=^Drmesh       HO F   F               HXE         $0H`lx
-=Drmesh       +b F   F               `jE         $0H`lx
- XEX>rmesh       	       Ԁ       	       	 b   b   <                P      
+ 	                              H        Ԁ       	         b   b   <                @      
           E  0   @  
 
- 	                              	       Ԁ              4	 b   b   <                P      
+ 	                                      Ԁ                b   b   <                @      
           E  0   @  
 
- 	                              	       Ԁ              	 b   b   <                P      
+ 	                                      Ԁ                b   b   <                @      
           E  0   @  
 
- 	                              I	 b   b   <                `      
+ 	                                      Ԁ              F  b   b   <                
+@                E  0   @  
+
+ 	                              V        Ԁ              +	  b   b   <                
+@                E  0   @  
+
+ 	                              
+        Ԁ              
+  b   b   <      	          
+@                E  0   @  
+
+ 	                              څ  F   F                ڎ=         $0H`lx
+C6	6rmesh       Ǝ  -   -   Ј<      	          @rmeshu  4        Џ        Ԁ       	         >   >   Ѐ<      	          P  $0H`lrmeshq  9u                Ԁ       	       y  -   -   Ѐ<      	          `rmeshu  7          F   F                =         $0H`lx
+=g6rmesh       ZF A   A               pN>         $0H`lx=rmesh       .G       Ԁ       	       G <   <   Ѐ<      	             $0H`lq  9u	         H >   >   Ѐ<      	            $0H`lrmeshq  9u	        I       Ԁ       	       sx <   <   Ѐ<                       	           
+            x       Ԁ              x /   /   Ѐ<                0       
+            y /   /   Ј<                0       
+            ;z       Ԁ              { /   /   Ј<                0       
+            R ?   ?   Ѐ<      	                  
+                      R E   E   Ѐ            %         
+     0                   E   E   Ѐ            @%         
+                       r E   E   Ѐ            @%         
+                       =       Ԁ               ?   ?   Ј<                P      
+                              Ԁ              S ?   ?   Ѐ<                P      
+     A                        Ԁ               ?   ?   Ѐ<      	                
+                      ֭ b   b   <                P      
           E  0   @  
 
- 	                              Y	       Ԁ              	 b   b   <                `      
+ 	                                     Ԁ              s b   b   <                P      
           E  0   @  
 
- 	                              	       Ԁ              P	 b   b   <                `      
+ 	                              L       Ԁ              m b   b   <                P      
           E  0   @  
 
- 	                               E   E   Ѐ            %                      
-           [ E   E   Ѐ            %              8       
-            E   E   Ѐ            %                     
-           ^       Ԁ       	        ?   ?   Ѐ<                           ,       
-                 Ԁ              J ?   ?   Ѐ<                                  
-                 Ԁ               ?   ?   Ѐ<                           [       
-                 Ԁ               ?   ?   Ј<                            ,       
-                 Ԁ              F ?   ?   Ѐ<                                  
-                 Ԁ              } ?   ?   Ѐ<                           [       
-           b   b   <                
+ 	                              +       Ԁ              C b   b   <                
 P                E  0   @  
 
- 	                                     Ԁ              b b   b   <                
-@                E  0   @  
-
- 	                               b   b   <                
-`                E  0   @  
+ 	                              S       Ԁ               b   b   <                
+P                E  0   @  
 
- 	                              -       Ԁ               b   b   <                
-@                E  0   @  
+ 	                              ݵ b   b   <                
+P                E  0   @  
 
- 	                                     Ԁ               b   b   <      	          
-@                E  0   @  
-
- 	                              ? b   b   <                
-P                E  0   @  
-
- 	                              ~ b   b   <                
-P                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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
+ 	                                     Ԁ              & F   F               `/E         $0H`lx
+=	O>rmesh       !} F   F               `E         $0H`lx
+0E>rmesh        F   F               
+E         $0H`lx
+0E6Ermesh       +I	       Ԁ       	       I	 /   /   Ѐ<                       
+            I	       Ԁ              9J	 /   /   Ѐ<                p       
+            J	       Ԁ              ZK	 /   /   Ѐ<                p       
+            	 E   E   Ѐ            %                      
+           I	 E   E   Ѐ            %              8       
+           	 E   E   Ѐ             %                     
+           څ  F   F               L         $0H`lx
+E	Ermesh         F   F               &M         $0H`lx
+LErmesh       & F   F               :rT         $0H`lx
+'M	Ermesh       !} F   F               T         $0H`lx
+rTJMrmesh       B -   -   Ѐ<                rmeshu
+  4        ' -   -   Ј<                rmeshu
+  4         -   -   Ј<                rmeshu
+  4         -   -   Ј<                rmeshu
+  4         -   -   Ј<                rmeshu
+  4         -   -   Ј<                rmeshu
+  4         -   -   Ј<                rmeshu
+  4        څ  A   A               Z\         $0H`lxTrmesh         F   F               	i\         $0H`lx
+\Trmesh       & A   A               zc         $0H`lxi\rmesh       څ  A   A               Uk         $0H`lxi\rmesh         -   -   Ѐ<                rmeshu  4        R        Ԁ                -   -   Ѐ<                rmeshu  7                Ԁ                F   F               Ik         $0H`lx
+Vk.drmesh       ,  >   >   Ѐ<                   $0H`lrmeshq   9u                Ԁ              f  -   -   Ѐ<                rmeshu  4        v        Ԁ                -   -   Ѐ<                rmeshu  7        ^        Ԁ               <   <                r         $0H`lx rmesh        >   >   Ѐ<                   $0H`lrmeshq  9u               Ԁ              X <   <   Ѐ<                0   $0H`lq   9u                Ԁ              ( >   >   Ѐ<                @  $0H`lrmeshq   9u               Ԁ              v <   <   Ѐ<                   $0H`lq  9u                Ԁ              ! F   F                iPs         $0H`lx
+krrmesh       M  A   A               P_z         $0H`lxPsrmesh         F   F               0z         $0H`lx
+ps`zrmesh        A   A               `          $0H`lxzrmesh       ! F   F               @         $0H`lx
+{rmesh    	   M  A   A               p         $0H`lxrmesh    	     F   F               P3         $0H`lx
+rmesh    	    A   A               :C         $0H`lx4rmesh    	   ! F   F               `ԑ         $0H`lx
+SCrmesh    
\ No newline at end of file
diff -Naur ns-3.25/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap ns-3.26/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	2016-10-03 20:57:08.356246786 -0700
+++ ns-3.26/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap	2016-10-03 19:49:01.660387556 -0700
@@ -1,226 +1,226 @@
-ò            i       $  <   <                 $          $0H`lx rmesh        ?  A   A          	     	 k?          $0H`lx $ rmesh        ?  >   >   Ѐ<      	             $0H`lrmeshq   9u         A  >   >   Ј<      	             $0H`lrmeshq   9u         A  >   >   Ј<      	             $0H`lrmeshq   9u         B  >   >   Ј<      	             $0H`lrmeshq   9u         D  >   >   Ј<      	             $0H`lrmeshq   9u         D  >   >   Ј<      	             $0H`lrmeshq   9u         E  >   >   Ј<      	             $0H`lrmeshq   9u           A   A                (          $0H`lx $ rmesh          >   >   Ѐ<                    $0H`lrmeshq   9u         ɗ  >   >   Ј<                    $0H`lrmeshq   9u           >   >   Ј<                    $0H`lrmeshq   9u           >   >   Ј<                    $0H`lrmeshq   9u           >   >   Ј<                    $0H`lrmeshq   9u           >   >   Ј<                    $0H`lrmeshq   9u           >   >   Ј<                    $0H`lrmeshq   9u         }  -   -   Ј<           	     	@ rmeshu   4                 Ԁ       	          -   -   Ѐ<      	          0 rmeshu  7                 Ԁ               u  -   -   Ѐ<                @ 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
-irmesh       ,  A   A                Mn         $0H`lxrmesh         F   F                h         $0H`lx
-bnrmesh       } F   F          	     	 ˾         $0H`lx
-
-nrmesh       - F   F                m         $0H`lx
-rmesh       O F   F                         $0H`lx
-rmesh       $ F   F          	     	 _         $0H`lx
-rmesh         N   N          	      
-                
+ò            i         <   <          	     	  z          $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         B  <   <                 ڥ          $0H`lx rmesh        d  >   >   Ѐ<                   $0H`lrmeshq   9u         O  >   >   Ј<                   $0H`lrmeshq   9u         ^  >   >   Ј<                   $0H`lrmeshq   9u         R  >   >   Ј<                   $0H`lrmeshq   9u         X  >   >   Ј<                   $0H`lrmeshq   9u         U  >   >   Ј<                   $0H`lrmeshq   9u         m  >   >   Ј<                   $0H`lrmeshq   9u           >   >   Ѐ<                   $0H`lrmeshq   9u           >   >   Ј<                   $0H`lrmeshq   9u           >   >   Ј<                   $0H`lrmeshq   9u           >   >   Ј<                   $0H`lrmeshq   9u           >   >   Ј<                   $0H`lrmeshq   9u         p  >   >   Ј<                   $0H`lrmeshq   9u         [  >   >   Ј<                   $0H`lrmeshq   9u          >   >   Ѐ<      
+     	     	   $0H`lrmeshq   9u         	       Ԁ       
+        / >   >   Ѐ<      	              $0H`lrmeshq   9u         0 >   >   Ј<      	              $0H`lrmeshq   9u         1 >   >   Ј<      	              $0H`lrmeshq   9u         2 >   >   Ј<      	              $0H`lrmeshq   9u         3 >   >   Ј<      	              $0H`lrmeshq   9u         4 >   >   Ј<      	              $0H`lrmeshq   9u         5 >   >   Ј<      	              $0H`lrmeshq   9u         (6       Ԁ               6 <   <   Ѐ<           	     	     $0H`lq   9u          6       Ԁ       	        7 >   >   Ѐ<           	     	0   $0H`lrmeshq   9u         7       Ԁ       	        /8 <   <   Ѐ<      	          0     $0H`lq  9u          8       Ԁ               BF >   >   Ѐ<                @   $0H`lrmeshq  9u         HG >   >   Ј<                @   $0H`lrmeshq  9u         WH >   >   Ј<                @   $0H`lrmeshq  9u         fI >   >   Ј<                @   $0H`lrmeshq  9u         lJ >   >   Ј<                @   $0H`lrmeshq  9u         WK >   >   Ј<                @   $0H`lrmeshq  9u         KL >   >   Ј<                @   $0H`lrmeshq  9u         6M -   -   Ѐ<                P rmeshu   4         IN       Ԁ               kN -   -   Ј<                P rmeshu   4         N       Ԁ               O -   -   Ѐ<                  rmeshu  7         u F   F               ` u         $0H`lx
+   rmesh        v >   >   Ѐ<                0   $0H`lrmeshq   9u         
+w       Ԁ               jw -   -   Ѐ<                p rmeshu  4         w       Ԁ               x -   -   Ѐ<                @ rmeshu  7         x       Ԁ                -   -   Ѐ<      
+     	     	@ rmeshu  9                Ԁ       
+        
+1 A   A          	     	P 0         $0H`lxvrmesh        1       Ԁ       
+        _2 <   <   Ѐ<      
+     	     	`    $0H`lq  9u          33 >   >   Ѐ<      
+     	     	p   $0H`lrmeshq  9u         Q4       Ԁ       
+        b[ <   <               P Z         $0H`lx rmesh        [ >   >   Ѐ<                   $0H`lrmeshq  9u         \ >   >   Ј<                   $0H`lrmeshq  9u         ~] >   >   Ј<                   $0H`lrmeshq  9u         r^ >   >   Ј<                   $0H`lrmeshq  9u         _ >   >   Ј<                   $0H`lrmeshq  9u         ~` >   >   Ј<                   $0H`lrmeshq  9u         {a >   >   Ј<                   $0H`lrmeshq  9u         } >   >   Ѐ<                `   $0H`lrmeshq   9u         ~       Ԁ               b >   >   Ѐ<                   $0H`lrmeshq  9u         _ >   >   Ј<                   $0H`lrmeshq  9u         \ >   >   Ј<                   $0H`lrmeshq  9u         t >   >   Ј<                   $0H`lrmeshq  9u         z >   >   Ј<                   $0H`lrmeshq  9u         \ 	 >   >   Ј<                   $0H`lrmeshq  9u         P	 >   >   Ј<                   $0H`lrmeshq  9u         D	 -   -   Ѐ<                 rmeshu   4         	       Ԁ               
+	 F   F                
+	         $0H`lx
+ 1[rmesh        ,	 >   >   Ѐ<                p   $0H`lrmeshq   9u         <	       Ԁ               	 -   -   Ѐ<                 rmeshu  4         -	       Ԁ               	 -   -   Ѐ<                 rmeshu  7         	       Ԁ               	 -   -   Ѐ<                 rmeshu  9         	       Ԁ              B  <   <                         $0H`lx rmesh         >   >   Ѐ<                   $0H`lrmeshq  9u        a  >   >   Ј<                   $0H`lrmeshq  9u        y  >   >   Ј<                   $0H`lrmeshq  9u          >   >   Ј<                   $0H`lrmeshq  9u        |  >   >   Ј<                   $0H`lrmeshq  9u        y  >   >   Ј<                   $0H`lrmeshq  9u        d  >   >   Ј<                   $0H`lrmeshq  9u          >   >   Ј<                   $0H`lrmeshq   9u                Ԁ              BF >   >   Ѐ<                   $0H`lrmeshq  9u        ?G >   >   Ј<                   $0H`lrmeshq  9u        NH >   >   Ј<                   $0H`lrmeshq  9u        9I >   >   Ј<                   $0H`lrmeshq  9u        J >   >   Ј<                   $0H`lrmeshq  9u        !K >   >   Ј<                   $0H`lrmeshq  9u        L >   >   Ј<                   $0H`lrmeshq  9u        L -   -   Ѐ<                 rmeshu   4        M       Ԁ              Q F   F                *         $0H`lx
+ 1rmesh       R >   >   Ѐ<                   $0H`lrmeshq   9u        
+S       Ԁ              aS -   -   Ѐ<                rmeshu  4        S       Ԁ              qT -   -   Ѐ<                 rmeshu  7        T       Ԁ              ~ -   -   Ѐ<                 rmeshu  9               Ԁ              b' <   <                :i         $0H`lx rmesh       ' >   >   Ѐ<                   $0H`lrmeshq  9u        ( >   >   Ј<                   $0H`lrmeshq  9u        ) >   >   Ј<                   $0H`lrmeshq  9u        * >   >   Ј<                   $0H`lrmeshq  9u        + >   >   Ј<                   $0H`lrmeshq  9u        l, >   >   Ј<                   $0H`lrmeshq  9u        -       Ԁ              - <   <   Ѐ<                    $0H`lq   9u         -       Ԁ              / -   -   Ѐ<      	          0rmeshu  4        /       Ԁ              1 -   -   Ј<           	     	 rmeshu  7        1       Ԁ       	       3 >   >   Ј<                  $0H`lrmeshq   9u        '3       Ԁ              3 <   <   Ѐ<                @   $0H`lq  9u         ,4       Ԁ               >   >   Ѐ<                   $0H`lrmeshq  9u        ע       Ԁ              
+ A   A               PJ         $0H`lxirmesh              Ԁ               <   <   Ѐ<                0   $0H`lq  9u          <   <   Ј<                0   $0H`lq  9u         R  F   F               @Z
+         $0H`lx
+rmesh         A   A          	     	          $0H`lxrmesh         >   >   Ѐ<      	          `  $0H`lrmeshq  9u        ǐ        Ԁ              Q  <   <   Ѐ<           	     	    $0H`lq  9u         a        Ԁ       	       %  >   >   Ѐ<           	     	   $0H`lrmeshq  9u        5        Ԁ       	         <   <   Ѐ<      	          p   $0H`lq  9u         :        Ԁ              9 F   F               j         $0H`lx
+
+rmesh       r' F   F               Pz&         $0H`lx
+rmesh       1 F   F          	     	 &         $0H`lx
+rmesh       
+ F   F               _'         $0H`lx
+&&rmesh       }  N   N          	      
+                
 
 
-       '	  N   N                
-                
+       /  N   N               
+                
 
 
-       S
-  N   N                
-                
+         N   N          `     
+                
 
 
-         E   E   Ѐ             %              3       
-           C  E   E   Ѐ             %                     
-           {  E   E   Ѐ       	     	 %                     
-           F        Ԁ       
-         ?   ?   Ѐ<           	     	                    
-                  Ԁ       	       2  ?   ?   Ѐ<                            /       
-                  Ԁ              i  ?   ?   Ѐ<                                   
-          ?        Ԁ                N   N   <                
+       R  F   F               pL.         $0H`lx
+rmesh         F   F          	     	 :V.         $0H`lx
+a'`'rmesh       w8 -   -   Ѐ<                rmeshu  4        8       Ԁ              8 -   -   Ѐ<                rmeshu  7        f9       Ԁ              9 F   F                /         $0H`lx
+M.V.rmesh       ; >   >   Ј<                  $0H`lrmeshq  9u	        <       Ԁ              g< -   -   Ѐ<                rmeshu 	 4        <       Ԁ              = -   -   Ѐ<                rmeshu	  7        =       Ԁ              +' E   E   Ѐ            %              f       
+           j' A   A               5         $0H`lx.rmesh       ' >   >   Ѐ<                  $0H`lrmeshq  9u        5(       Ԁ              ( <   <   Ѐ<                  	 $0H`lq  9u
+         (       Ԁ              ) >   >   Ѐ<                  $0H`lrmeshq  9u
+        )       Ԁ              * <   <   Ѐ<                   $0H`lq  9u 
+        * <   <   Ј<                   $0H`lq  9u 
+        +       Ԁ              
+ F   F                ʹ6         $0H`lx
+V.5rmesh        E   E   Ѐ            %              f       
+           q E   E   Ѐ            %                     
+            E   E   Ѐ       	     	 %                     
+                  Ԁ       
+        ?   ?   Ѐ<           	     	0                   
+                 Ԁ       	        ?   ?   Ѐ<                            0       
+                 Ԁ              Q ?   ?   Ј<           	     	0                   
+          a       Ԁ       	              Ԁ               N   N   <                
                         
      
 
-               Ԁ              Q  N   N   <      	          
+              Ԁ              * N   N   <      	          
                         
      
 
-               Ԁ                N   N   <      
+              Ԁ              Ȕ N   N   <      
      	     
                         
      
 
-               Ԁ       
-         b   b   <           	            
+       k       Ԁ       
+              Ԁ       
+       ~ b   b   <           	            
           E  0    @  
 
- 	                                      Ԁ       	       B  b   b   <                       
+ 	                                     Ԁ       	         b   b   <                       
           E  0    @  
 
- 	                                      Ԁ              ,  F   F                         $0H`lx
-`rmesh       E2  N   N                                
+ 	                              ٙ       Ԁ               b   b   <           	           
+          E  0   @  
+
+ 	                                     Ԁ       	       ՝ b   b   <                      
+          E  0   @  
+
+ 	                                     Ԁ              ؟ b   b   <                      
+          E  0   @  
+
+ 	                              y       Ԁ       
+       d b   b   <           	            
+          E  0   @  
+
+ 	                              t       Ԁ       	        b   b   <                       
+          E  0   @  
+
+ 	                              ѣ       Ԁ               b   b   <                       
+          E  0   @  
+
+ 	                               N   N                               
 
-       p2  N   N                                
+        N   N          0                     
 
-       3  N   N          	                      
+       ) N   N          	@                     
 
-       5  N   N   <           	           
+              Ԁ       
+       ݫ N   N   <           	     0      
                  
 
      
-       5        Ԁ       	       6  N   N   <                      
+              Ԁ       	        N   N   <                0      
                  
 
      
-       6        Ԁ              :        Ԁ              n;  b   b   <                
+       I       Ԁ              W N   N   <                0      
+                 
+
+     
+              Ԁ               b   b   <                
                 E  0    @  
 
- 	                              ~;        Ԁ              ;  b   b   <      	          
+ 	                                     Ԁ              ˴ b   b   <      	          
                 E  0    @  
 
- 	                              <        Ԁ              u=  b   b   <      
+ 	                                     Ԁ               b   b   <      
      	     
                 E  0    @  
 
- 	                                F   F                2         $0H`lx
-rmesh              Ԁ       
-        b   b   <           	            
-          E  0   @  
-
- 	                              Т       Ԁ       	       ' b   b   <                       
-          E  0   @  
-
- 	                                      Ԁ              Ǥ b   b   <                       
-          E  0   @  
-
- 	                              3 b   b   <                       
-          E  0   @  
-
- 	                                     Ԁ              w b   b   <                
+ 	                              7       Ԁ              q       Ԁ              A b   b   <                
                  E  0   @  
 
- 	                                     Ԁ              ު b   b   <      	          
+ 	                              Q       Ԁ              i b   b   <                
+0                E  0   @  
+
+ 	                              y       Ԁ              * b   b   <      	          
                  E  0   @  
 
- 	                                     Ԁ              ~ b   b   <      
+ 	                                     Ԁ              - b   b   <      
      	     
                  E  0   @  
 
- 	                              - F   F               Q&         $0H`lx
-3`rmesh       O F   F                &         $0H`lx
-ER&rmesh        <   <   Ѐ<                        	           
-                   Ԁ               -   -   Ѐ<      	          0rmeshu  4        <       Ԁ               <   <   Ѐ<      
-     	     	                                F   F          	     	0+-         $0H`lx
-&R&rmesh       
- -   -   Ѐ<           	     	@rmeshu  7               Ԁ       	       8  E   E   Ѐ       	     	P%         
-                        ,  A   A               @-         $0H`lx&rmesh         F   F                t.         $0H`lx
-&-rmesh       8! E   E   Ѐ       	     	`%         
-                        | A   A          	     	pKC5         $0H`lx.rmesh       } >   >   Ѐ<      	          P  $0H`lrmeshq  9u        }       Ԁ              Q~ <   <   Ѐ<           	     	   $0H`lq  9u         a~       Ԁ       	       7 >   >   Ѐ<           	     	  $0H`lrmeshq  9u        G       Ԁ       	        <   <   Ѐ<      	          `   $0H`lq  9u         :       Ԁ              - F   F               pg5         $0H`lx
-u.C5rmesh       O F   F               06         $0H`lx
-.h5rmesh       8 E   E   Ѐ       	     	%         
-                        Z ?   ?   Ѐ<      	                  
-                             Ԁ               ?   ?   Ѐ<      
-     	     	      
-     f                  E   E   Ѐ            %         
-     ,                  T E   E   Ѐ            @%         
-                       ͅ       Ԁ       
-       ; ?   ?   Ѐ<                P      
-     u                 K       Ԁ               ?   ?   Ѐ<      	                
-                      x ?   ?   Ј<      	                
-                      ~ ?   ?   Ј<      	                
-                      '       Ԁ               ?   ?   Ѐ<      
-     	     	      
-                      ͍       Ԁ       
-        b   b   <           	     0      
-          E  0   @  
-
- 	                                     Ԁ       	         b   b   <                0      
-          E  0   @  
-
- 	                              ِ       Ԁ               b   b   <           	     @      
-          E  0   @  
-
- 	                                     Ԁ       	        b   b   <                @      
-          E  0   @  
-
- 	                               b   b   <                @      
-          E  0   @  
-
- 	                              ڗ       Ԁ              2 b   b   <                @      
-          E  0   @  
-
- 	                                     Ԁ              ҙ b   b   <                @      
-          E  0   @  
-
- 	                                     Ԁ              U b   b   <                
-0                E  0   @  
-
- 	                              e       Ԁ               b   b   <      	          
-0                E  0   @  
+ 	                               b   b   <      	          
+0                E  0   @  
 
- 	                                     Ԁ              \ b   b   <      
+ 	                                     Ԁ              X b   b   <      
      	     
-0                E  0   @  
+0                E  0   @  
 
- 	                                     Ԁ       
-       [ -   -   Ѐ<      
-     	     	rmeshu  7        ) F   F          	     	k<         $0H`lx
-/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         >   >   Ѐ<      
-     	     	  $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
-=Drmesh       þ	 ?   ?   Ѐ<      
-     	     	@        
-   j                   	       Ԁ       
-       	 b   b   <           	     P      
+ 	                                       Ԁ       
+         b   b   <           	     @      
           E  0   @  
 
- 	                              	       Ԁ       	       1	 b   b   <                P      
+ 	                                      Ԁ       	       s  b   b   <                @      
           E  0   @  
 
- 	                              
-	       Ԁ              @	       Ԁ       
-       	 b   b   <           	     `      
+ 	                              L        Ԁ              v  b   b   <                @      
+          E  0   @  
+
+ 	                                      Ԁ              	  b   b   <                
+@                E  0   @  
+
+ 	                              	        Ԁ              S
+  b   b   <      	          
+@                E  0   @  
+
+ 	                              ,        Ԁ                b   b   <      
+     	     
+@                E  0   @  
+
+ 	                              R  F   F                ڎ=         $0H`lx
+C6	6rmesh         -   -   Ѐ<      	          @rmeshu  4        q  -   -   Ј<      	          @rmeshu  4                Ԁ                -   -   Ѐ<           	     	Prmeshu  7                Ԁ       	       a  F   F          	     	`z=         $0H`lx
+66rmesh         >   >   Ѐ<      	          P  $0H`lrmeshq  9u        >        Ԁ                -   -   Ѐ<           	     	prmeshu  4        đ        Ԁ       	       $  -   -   Ѐ<      	          `rmeshu  7                Ԁ              E A   A               pN>         $0H`lx=rmesh       F >   >   Ѐ<           	     	  $0H`lrmeshq  9u        G       Ԁ       	       bG <   <   Ѐ<      	             $0H`lq  9u	         H       Ԁ              ;H >   >   Ѐ<      	            $0H`lrmeshq  9u	        H       Ԁ              wI <   <   Ѐ<           	     	   $0H`lq  9u 	        I       Ԁ       	       
+x <   <   Ѐ<                       	           
+            x       Ԁ              y /   /   Ј<                0       
+            Ģ E   E   Ѐ       	     	%         
+                         ?   ?   Ѐ<      	                  
+                             Ԁ              / ?   ?   Ѐ<      
+     	     	      
+     !                 ޤ E   E   Ѐ            %         
+     0                  ^ E   E   Ѐ            @%         
+                              Ԁ       
+        b   b   <           	     P      
           E  0   @  
 
- 	                              	       Ԁ       	       n	 b   b   <                `      
+ 	                                     Ԁ       	        b   b   <                P      
           E  0   @  
 
- 	                              	 b   b   <                `      
+ 	                                      Ԁ               ?   ?   Ѐ<                P      
+     A                 Ъ       Ԁ               ?   ?   Ѐ<      	                
+                      ǫ       Ԁ              p ?   ?   Ѐ<      
+     	     	      
+                      : b   b   <                P      
           E  0   @  
 
- 	                              	       Ԁ              M	 b   b   <                `      
+ 	                                     Ԁ               b   b   <                P      
           E  0   @  
 
- 	                               E   E   Ѐ            %              8       
-            E   E   Ѐ            %                     
-           " ?   ?   Ѐ<           	     	`                     
-          2       Ԁ       	        ?   ?   Ѐ<                           ,       
-          )       Ԁ                     Ԁ       
-       ' ?   ?   Ј<           	     	                   
-          7       Ԁ       	        ?   ?   Ѐ<                            ,       
-           ?   ?   Ј<                            ,       
-           ?   ?   Ј<                            ,       
-          | ?   ?   Ј<                            ,       
-          %       Ԁ               ?   ?   Ѐ<                                  
-          8       Ԁ              Z       Ԁ               b   b   <                
-@                E  0   @  
-
- 	                                     Ԁ              ! b   b   <      	          
-@                E  0   @  
-
- 	                                     Ԁ               b   b   <                
-P                E  0   @  
-
- 	                              +       Ԁ               b   b   <      	          
-P                E  0   @  
-
- 	                              [       Ԁ              " b   b   <      
-     	     
-P                E  0   @  
+ 	                                     Ԁ              z b   b   <                
+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        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
+ 	                                     Ԁ              r' F   F               `/E         $0H`lx
+=	O>rmesh       - F   F          	     	5E         $0H`lx
+6O>rmesh        -   -   Ѐ<      
+     	     	rmeshu  4               Ԁ       
+       p >   >   Ј<      
+     	     	   $0H`lrmeshq  9u        _       Ԁ       
+        -   -   Ѐ<      
+     	     	rmeshu  7        
+ F   F               
+E         $0H`lx
+0E6Ermesh       H	 /   /   Ѐ<           	     	        
+            H	       Ԁ       	       gI	 /   /   Ѐ<                       
+            I	       Ԁ              J	 /   /   Ѐ<                p       
+            	 E   E   Ѐ            %              8       
+           U	 E   E   Ѐ             %                     
+           	 E   E   Ѐ       	     	0%              ~       
+           E F   F               *M         $0H`lx
+0E6Ermesh       2% -   -   Ѐ<                 rmeshu 
+ 4        & -   -   Ј<                 rmeshu 
+ 4        & -   -   Ј<                 rmeshu 
+ 4        ' -   -   Ј<                 rmeshu 
+ 4        ( -   -   Ј<                 rmeshu 
+ 4        ) -   -   Ј<                 rmeshu 
+ 4        * -   -   Ј<                 rmeshu 
+ 4        + -   -   Ѐ<      	          0rmeshu	  4        ~, -   -   Ј<      	          0rmeshu	  4        Q- -   -   Ј<      	          0rmeshu	  4        6. -   -   Ј<      	          0rmeshu	  4        6/ -   -   Ј<      	          0rmeshu	  4        $0 -   -   Ј<      	          0rmeshu	  4        $1 -   -   Ј<      	          0rmeshu	  4        
+ <   <               @J2U         $0H`lx rmesh       u <   <               Pj]         $0H`lx rmesh       
+7	 <   <               `d         $0H`lx rmesh       q <   <               pAl         $0H`lx rmesh       
+C	 <   <               t         $0H`lx rmesh        <   <               {         $0H`lx rmesh       
+7	 <   <               
+I         $0H`lx rmesh    	    <   <               *         $0H`lx rmesh    	   
+	 <   <               Jߒ         $0H`lx rmesh    
\ No newline at end of file
diff -Naur ns-3.25/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap ns-3.26/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	2016-10-03 20:57:08.356246786 -0700
+++ ns-3.26/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap	2016-10-03 19:49:01.661387549 -0700
@@ -1,375 +1,337 @@
-ò            i       u$  <   <                 $          $0H`lx rmesh        $  >   >   Ѐ<           	     	    $0H`lrmeshq   9u         %  >   >   Ј<           	     	    $0H`lrmeshq   9u         &  >   >   Ј<           	     	    $0H`lrmeshq   9u         '  >   >   Ј<           	     	    $0H`lrmeshq   9u         (  >   >   Ј<           	     	    $0H`lrmeshq   9u         )  >   >   Ј<           	     	    $0H`lrmeshq   9u         *  >   >   Ј<           	     	    $0H`lrmeshq   9u         k?  A   A          	     	 k?          $0H`lx $ rmesh        '  >   >   Ѐ<                    $0H`lrmeshq   9u         6  >   >   Ј<                    $0H`lrmeshq   9u           >   >   Ј<                    $0H`lrmeshq   9u           >   >   Ј<                    $0H`lrmeshq   9u           >   >   Ј<                    $0H`lrmeshq   9u           >   >   Ј<                    $0H`lrmeshq   9u           >   >   Ј<                    $0H`lrmeshq   9u         u  >   >   Ѐ<           	     	    $0H`lrmeshq   9u         r  >   >   Ј<           	     	    $0H`lrmeshq   9u         ]  >   >   Ј<           	     	    $0H`lrmeshq   9u         6  >   >   Ј<           	     	    $0H`lrmeshq   9u         h  A   A          
+ò            i       z  <   <          	     	  z          $0H`lx rmesh        Ѧ  >   >   Ѐ<                   $0H`lrmeshq   9u           >   >   Ј<                   $0H`lrmeshq   9u         ˨  >   >   Ј<                   $0H`lrmeshq   9u           >   >   Ј<                   $0H`lrmeshq   9u         Ū  >   >   Ј<                   $0H`lrmeshq   9u         ڬ  >   >   Ј<                   $0H`lrmeshq   9u          A   A          
      
-           $0H`lx ? rmesh          >   >   Ј<           	     	    $0H`lrmeshq   9u         u  >   >   Ј<           	     	    $0H`lrmeshq   9u         {  >   >   Ј<           	     	    $0H`lrmeshq   9u         T  >   >   Ѐ<      
-     	     	0   $0H`lrmeshq   9u                 Ԁ       	          <   <   Ѐ<      	     
+ g         $0H`lx  rmesh         >   >   Ѐ<      
+     	     	   $0H`lrmeshq   9u                Ԁ       	        H	 <   <   Ѐ<      	     
      
-      $0H`lq   9u                  Ԁ       
-          -   -   Ѐ<           	     	@ 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        Ԁ       
-          <   <   Ѐ<      
-     	     	P    $0H`lq  9u          K        Ԁ       	         <   <               P -         $0H`lx rmesh         >   >   Ѐ<           	     	`   $0H`lrmeshq  9u          >   >   Ј<           	     	`   $0H`lrmeshq  9u          >   >   Ј<           	     	`   $0H`lrmeshq  9u         ɘ >   >   Ј<           	     	`   $0H`lrmeshq  9u         ؙ >   >   Ј<           	     	`   $0H`lrmeshq  9u         ̚ >   >   Ј<           	     	`   $0H`lrmeshq  9u          >   >   Ј<           	     	`   $0H`lrmeshq  9u                Ԁ                F   F          	     	p          $0H`lx
- rmesh         >   >   Ѐ<      	             $0H`lrmeshq  9u                Ԁ                <   <   Ѐ<           	     	    $0H`lq  9u                 Ԁ       	        5 >   >   Ѐ<           	     	   $0H`lrmeshq  9u         >6       Ԁ       	        6 <   <   Ѐ<      	              $0H`lq  9u          6       Ԁ               i A   A          
-     
-@ h         $0H`lx rmesh         F   F          	     	          $0H`lx
-irmesh       },  A   A                Mn         $0H`lxrmesh         A   A          
-     
-P 	         $0H`lx rmesh       | F   F          	     	 ˾         $0H`lx
-
-nrmesh        F   F                m         $0H`lx
-rmesh       i A   A          
-     
-`          $0H`lx rmesh        F   F          	     	 _         $0H`lx
-rmesh       P  N   N          
-p      
-                 
+      $0H`lq   9u          X	       Ԁ       
+        5 >   >   Ј<      	              $0H`lrmeshq   9u         5       Ԁ               q6 <   <   Ѐ<           	     	     $0H`lq   9u          7       Ԁ       	        S7 >   >   Ѐ<           	     	0   $0H`lrmeshq   9u         7       Ԁ       	        8 <   <   Ѐ<      	          0     $0H`lq  9u          8       Ԁ               F >   >   Ѐ<                @   $0H`lrmeshq  9u         G >   >   Ј<                @   $0H`lrmeshq  9u         H >   >   Ј<                @   $0H`lrmeshq  9u         I >   >   Ј<                @   $0H`lrmeshq  9u         J >   >   Ј<                @   $0H`lrmeshq  9u         K >   >   Ј<                @   $0H`lrmeshq  9u         L >   >   Ј<                @   $0H`lrmeshq  9u         M -   -   Ѐ<                P rmeshu   4         N -   -   Ј<                P rmeshu   4         bv F   F               ` u         $0H`lx
+   rmesh        6w       Ԁ               w -   -   Ѐ<                p rmeshu  4         x       Ԁ               H -   -   Ѐ<      
+     	     	@ rmeshu  9         j -   -   Ѐ<      	     
+     
+@ rmeshu  7         z       Ԁ       
+        Ѫ -   -   Ј<      
+     	     	@ rmeshu  9         b       Ԁ       	        0 A   A          	     	P 0         $0H`lxvrmesh        1 >   >   Ѐ<      	     
+     
+P   $0H`lrmeshq   9u         1       Ԁ       
+        1 <   <   Ѐ<      
+     	     	`    $0H`lq  9u          2       Ԁ       	        2 >   >   Ѐ<      
+     	     	p   $0H`lrmeshq  9u         p3       Ԁ       	        4 <   <   Ѐ<      	     
+     
+`    $0H`lq  9u          %4       Ԁ       
+        [ >   >   Ѐ<                   $0H`lrmeshq  9u         ] >   >   Ј<                   $0H`lrmeshq  9u         ^ >   >   Ј<                   $0H`lrmeshq  9u         _ >   >   Ј<                   $0H`lrmeshq  9u         ` >   >   Ј<                   $0H`lrmeshq  9u         a >   >   Ј<                   $0H`lrmeshq  9u          A   A          
+     
+p          $0H`lx1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         	 F   F                
+	         $0H`lx
+ 1[rmesh        h	       Ԁ               	 -   -   Ѐ<                 rmeshu  4         	       Ԁ              z  F   F          	     	          $0H`lx
+	rmesh         >   >   Ѐ<                   $0H`lrmeshq  9u        Χ  >   >   Ј<                   $0H`lrmeshq  9u          >   >   Ј<                   $0H`lrmeshq  9u          >   >   Ј<                   $0H`lrmeshq  9u          >   >   Ј<                   $0H`lrmeshq  9u        Ѭ  >   >   Ј<                   $0H`lrmeshq  9u        ; A   A          
+     
+ }         $0H`lxrmesh       F >   >   Ѐ<                   $0H`lrmeshq  9u        G >   >   Ј<                   $0H`lrmeshq  9u        H >   >   Ј<                   $0H`lrmeshq  9u        I >   >   Ј<                   $0H`lrmeshq  9u        J >   >   Ј<                   $0H`lrmeshq  9u        K >   >   Ј<                   $0H`lrmeshq  9u        L >   >   Ј<                   $0H`lrmeshq  9u        LM -   -   Ѐ<                 rmeshu   4        bR F   F                *         $0H`lx
+ 1rmesh       6S       Ԁ              S -   -   Ѐ<                rmeshu  4        T       Ԁ              ( >   >   Ѐ<                   $0H`lrmeshq  9u        	) >   >   Ј<                   $0H`lrmeshq  9u        !* >   >   Ј<                   $0H`lrmeshq  9u        + >   >   Ј<                   $0H`lrmeshq  9u        + >   >   Ј<                   $0H`lrmeshq  9u        , >   >   Ј<                   $0H`lrmeshq  9u        .       Ԁ              V/ -   -   Ѐ<      	          0rmeshu  4        f/       Ԁ              / -   -   Ѐ<           	     	 rmeshu  7        0 F   F          	     	 r         $0H`lx
+~rmesh       F1 -   -   Ј<           	     	 rmeshu  7        1       Ԁ       	       T3       Ԁ              3 <   <   Ѐ<                @   $0H`lq  9u         z A   A               PJ         $0H`lxirmesh        A   A          
+     
+          $0H`lxsrmesh       z  A   A          	     	          $0H`lxrmesh         >   >   Ѐ<      	          `  $0H`lrmeshq  9u                Ԁ                <   <   Ѐ<           	     	    $0H`lq  9u                 Ԁ       	         >   >   Ѐ<           	     	   $0H`lrmeshq  9u        b        Ԁ       	         <   <   Ѐ<      	          p   $0H`lq  9u                 Ԁ              b: F   F               j         $0H`lx
+
+rmesh       ; A   A          
+     
+          $0H`lxrmesh       0 F   F          	     	 &         $0H`lx
+rmesh        F   F               _'         $0H`lx
+&&rmesh        A   A          
+     
+ a'         $0H`lx&rmesh          N   N          
+      
+                 
 
 
-       {  N   N          	      
-                
+          N   N          	      
+                
 
 
-       	  N   N                
-                
+         N   N               
+                
 
 
-         E   E   Ѐ             %                     
-             E   E   Ѐ       	     	 %                     
-           	  ?   ?   Ѐ<      	     
-     
-                       
-                  Ԁ       
-       g  ?   ?   Ѐ<           	     	                    
-                  Ԁ       	         ?   ?   Ѐ<                            /       
-          &        Ԁ                N   N   <      	          
+       z  F   F          	     	 :V.         $0H`lx
+a'`'rmesh       8       Ԁ              )9 -   -   Ѐ<                rmeshu  7        b: F   F                /         $0H`lx
+M.V.rmesh       ; A   A          
+     
+ '/         $0H`lxV.rmesh       3<       Ԁ              < -   -   Ѐ<                rmeshu 	 4        =       Ԁ              ' >   >   Ѐ<                  $0H`lrmeshq  9u        )       Ԁ              )       Ԁ              l* <   <   Ѐ<                   $0H`lq  9u 
+        e+ <   <   Ј<                   $0H`lq  9u 
+        0 F   F          	     	Z5         $0H`lx
+//rmesh        A   A          
+     
+ G6         $0H`lx5rmesh        F   F                ʹ6         $0H`lx
+V.5rmesh        E   E   Ѐ            %                     
+            E   E   Ѐ       	     	 %                     
+            ?   ?   Ѐ<      	     
+     
+                       
+                 Ԁ       
+        ?   ?   Ѐ<           	     	0                   
+          \ ?   ?   Ѐ<                            0       
+          ̋ ?   ?   Ј<           	     	0                   
+           ?   ?   Ј<           	     	0                   
+                 Ԁ       	       Ғ       Ԁ               N   N   <      	          
                         
      
 
-               Ԁ              8  N   N   <      
+              Ԁ              G N   N   <      
      	     
                         
      
 
-               Ԁ       	         b   b   <      	     
+              Ԁ       	       . b   b   <      	     
             
            E  0    @  
 
- 	                                      Ԁ       
-       >  b   b   <           	            
+ 	                              >       Ԁ       
+       V b   b   <      	     
+           
+           E  0   @  
+
+ 	                              f       Ԁ       
+        b   b   <           	            
           E  0    @  
 
- 	                                      Ԁ       	         b   b   <                       
-          E  0    @  
+ 	                                     Ԁ       	       N b   b   <           	           
+          E  0   @  
+
+ 	                              J b   b   <           	           
+          E  0   @  
+
+ 	                              #       Ԁ       	       < b   b   <      	     
+            
+           E  0   @  
+
+ 	                              L       Ԁ       
+       ǡ b   b   <           	            
+          E  0   @  
+
+ 	                                     Ԁ       	        b   b   <                       
+          E  0   @  
 
- 	                              ,  F   F                         $0H`lx
-`rmesh       2  N   N                                
+ 	                              # N   N          0                     
 
-       3  N   N          	                      
+        N   N          	@                     
 
-       G4  N   N   <      	     
-           
+       ԩ N   N   <      	     
+     0      
                   
 
      
-       W4        Ԁ       
-       #5  N   N   <           	           
+              Ԁ       
+       Ū N   N          
+                     
+
+       \ N   N   <           	     0      
                  
 
      
-       5        Ԁ       	       ;        Ԁ              q<  b   b   <      	          
+              Ԁ       	        N   N   <                0      
+                 
+
+     
+       "       Ԁ              g b   b   <      	          
                 E  0    @  
 
- 	                              <        Ԁ              <  b   b   <      
+ 	                              w       Ԁ               b   b   <      
      	     
                 E  0    @  
 
- 	                              =        Ԁ       	         A   A          
-     
- 	L         $0H`lx `rmesh       | F   F          	     	&         $0H`lx
-Lrmesh        b   b   <      	     
-            
-           E  0   @  
-
- 	                              ̡       Ԁ       
-       # b   b   <           	            
-          E  0   @  
-
- 	                                     Ԁ       	       ã b   b   <                       
-          E  0   @  
-
- 	                                     Ԁ              z b   b   <      	          
+ 	                              _ b   b   <      
+     	     
+                E  0    @  
+
+ 	                              8       Ԁ       	       }       Ԁ                     Ԁ              ƾ b   b   <      	          
                  E  0   @  
 
- 	                                     Ԁ               b   b   <      
+ 	                              ־       Ԁ               b   b   <      
      	     
                  E  0   @  
 
- 	                                     Ԁ       	        F   F               Q&         $0H`lx
-3`rmesh       i A   A          
-     
- )&         $0H`lx &rmesh       L <   <   Ѐ<                        	           
-             -   -   Ѐ<      	          0rmeshu  4               Ԁ              ] <   <   Ѐ<      
-     	     	                                      Ԁ       	        F   F          	     	0+-         $0H`lx
-&R&rmesh        -   -   Ѐ<           	     	@rmeshu  7        F       Ԁ       	       t   E   E   Ѐ       
-     
- %           
-                            E   E   Ѐ       	     	P%         
-                        },  A   A               @-         $0H`lx&rmesh         A   A          
-     
- I.         $0H`lx -rmesh       t  E   E   Ѐ       
-     
- %           
-                           E   E   Ѐ       	     	`%         
-                        | A   A          	     	pKC5         $0H`lx.rmesh       } >   >   Ѐ<      	          P  $0H`lrmeshq  9u        }       Ԁ              } <   <   Ѐ<           	     	   $0H`lq  9u         ~       Ԁ       	       ~ >   >   Ѐ<           	     	  $0H`lrmeshq  9u        s       Ԁ       	        <   <   Ѐ<      	          `   $0H`lq  9u                Ԁ               F   F               pg5         $0H`lx
-u.C5rmesh       i A   A          
-     
- i/6         $0H`lx -rmesh       t E   E   Ѐ       
-     
- %           
-                         À E   E   Ѐ       	     	%         
-                        Ɓ ?   ?   Ѐ<      	                  
-                      ց       Ԁ              $ ?   ?   Ѐ<      
-     	     	      
-     f                 ͂       Ԁ       	        b   b   <      	     
-     0      
-           E  0   @  
-
- 	                                     Ԁ       
-        b   b   <           	     0      
-          E  0   @  
-
- 	                              k b   b   <           	     0      
-          E  0   @  
-
- 	                               ?   ?   Ј<      	                
-                             Ԁ              H ?   ?   Ѐ<      
-     	     	      
-                             Ԁ       	        b   b   <      	     
+ 	                              i       Ԁ       	       B b   b   <      	          
+0                E  0   @  
+
+ 	                              R       Ԁ               b   b   <      
+     	     
+0                E  0   @  
+
+ 	                                     Ԁ       	          b   b   <      	     
      @      
-           E  0   @  
-
- 	                                     Ԁ       
-        b   b   <           	     0      
-          E  0   @  
-
- 	                              Տ       Ԁ       	        b   b   <                0      
-          E  0   @  
-
- 	                              o b   b   <           	     @      
-          E  0   @  
-
- 	                               b   b   <           	     @      
-          E  0   @  
-
- 	                                     Ԁ       	        b   b   <                @      
-          E  0   @  
+           E  0   @  
 
- 	                               b   b   <                @      
-          E  0   @  
+ 	                                       Ԁ       
+       o  b   b   <           	     @      
+          E  0   @  
 
- 	                              Θ b   b   <                @      
-          E  0   @  
+ 	                              H        Ԁ       	         b   b   <                @      
+          E  0   @  
 
- 	                                     Ԁ              X b   b   <      	          
-0                E  0   @  
+ 	                              
+        Ԁ              
+  b   b   <      	          
+@                E  0   @  
 
- 	                              h       Ԁ               b   b   <      
+ 	                              
+        Ԁ              q  b   b   <      
      	     
-0                E  0   @  
+@                E  0   @  
 
- 	                                     Ԁ       	        -   -   Ѐ<      	     
-     
-rmeshu  4               Ԁ       
-        -   -   Ѐ<      
-     	     	rmeshu  7               Ԁ       	        F   F          	     	k<         $0H`lx
-/6h5rmesh        >   >   Ѐ<      	     
-     
-   $0H`lrmeshq   9u               Ԁ       
-       ' -   -   Ѐ<      
-     	     	rmeshu  4         -   -   Ј<      
-     	     	rmeshu  4        e        Ԁ       	         -   -   Ѐ<      	     
-     
-0rmeshu  7                Ԁ       
-       & F   F               <         $0H`lx
-6<rmesh       8  /   /   Ѐ<           	     	        
-            9        Ԁ       	       9  /   /   Ѐ<                       
-              <   <          
-     
-@=         $0H`lx rmesh         >   >   Ѐ<      
-     	     	  $0H`lrmeshq  9u                Ԁ       	       F  <   <   Ѐ<      	     
-     
-P   $0H`lq   9u         V        Ԁ       
-       ,  >   >   Ѐ<      	     
-     
-`  $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          
-     
-pE         $0H`lx^Drmesh       4	 E   E   Ѐ       
-     
-%           
-                         V	 ?   ?   Ѐ<      
-     	     	@        
-   j                   	       Ԁ       	       ƿ	 b   b   <      	     
+ 	                              J        Ԁ       	       Ǝ  -   -   Ј<      	          @rmeshu  4        ֎        Ԁ              ?  -   -   Ѐ<           	     	Prmeshu  7        Џ        Ԁ       	         F   F          	     	`z=         $0H`lx
+66rmesh         >   >   Ѐ<      	          P  $0H`lrmeshq  9u                Ԁ              `  -   -   Ѐ<           	     	prmeshu  4                Ԁ       	       y  -   -   Ѐ<      	          `rmeshu  7                Ԁ              ZF A   A               pN>         $0H`lx=rmesh       F >   >   Ѐ<           	     	  $0H`lrmeshq  9u        .G       Ԁ       	       G <   <   Ѐ<      	             $0H`lq  9u	         G       Ԁ              H >   >   Ѐ<      	            $0H`lrmeshq  9u	        H       Ԁ              I <   <   Ѐ<           	     	   $0H`lq  9u 	        I       Ԁ       	       sx <   <   Ѐ<                       	           
+            x <   <   Ѐ<      
+     	     	                              y       Ԁ       	        E   E   Ѐ       
+     
+0%           
+                         O E   E   Ѐ       	     	%         
+                        R ?   ?   Ѐ<      	                  
+                      b       Ԁ              £ ?   ?   Ѐ<      
+     	     	      
+     !                 k       Ԁ       	        b   b   <      	     
      P      
-           E  0   @  
-
- 	                              ֿ	       Ԁ       
-       -	 b   b   <           	     P      
-          E  0   @  
-
- 	                              	       Ԁ       	       m	 E   E   Ѐ       	     	P%         
-                        	 b   b   <      	     
-     `      
            E  0   @  
 
- 	                              	       Ԁ       
-       j	 b   b   <           	     `      
+ 	                              ɦ       Ԁ       
+       h b   b   <           	     P      
           E  0   @  
 
- 	                              C	       Ԁ       	       
-	 b   b   <                `      
+ 	                              A       Ԁ       	       # b   b   <                P      
           E  0   @  
 
- 	                              I	 b   b   <                `      
+ 	                                     Ԁ               ?   ?   Ѐ<      	                
+                             Ԁ               ?   ?   Ѐ<      
+     	     	      
+                             Ԁ       	       ֭ b   b   <                P      
           E  0   @  
 
- 	                               E   E   Ѐ            %                     
-            ?   ?   Ѐ<           	     	`                     
-          ^       Ԁ       	        ?   ?   Ѐ<                           ,       
-          w E   E   Ѐ       	     	p%              s       
-           z ?   ?   Ѐ<      	     
-     
-                      
-                 Ԁ       
-        ?   ?   Ѐ<           	     	                   
-           ?   ?   Ј<           	     	                   
-          c       Ԁ       	        ?   ?   Ѐ<                            ,       
-           ?   ?   Ј<                            ,       
-           ?   ?   Ј<                            ,       
-           ?   ?   Ј<                            ,       
-                 Ԁ               b   b   <      	          
-@                E  0   @  
-
- 	                                     Ԁ              $ b   b   <      
-     	     
-@                E  0   @  
-
- 	                                     Ԁ       	       W       Ԁ               b   b   <      	          
-P                E  0   @  
-
- 	                              .       Ԁ               b   b   <      
-     	     
-P                E  0   @  
-
- 	                              ^       Ԁ       	        F   F          	     	K         $0H`lx
-DErmesh       & F   F               M/L         $0H`lx
-XEKrmesh          b   b   <      	     
-     p      
+ 	                                     Ԁ              , F   F          	     	5E         $0H`lx
+6O>rmesh        -   -   Ѐ<      
+     	     	rmeshu  4        I       Ԁ       	        -   -   Ѐ<      	     
+     
+@rmeshu  7               Ԁ       
+        A   A          
+     
+PE         $0H`lx6Ermesh       # >   >   Ѐ<      
+     	     	   $0H`lrmeshq  9u         >   >   Ј<      
+     	     	   $0H`lrmeshq  9u               Ԁ       	       # -   -   Ѐ<      	     
+     
+`rmeshu  4        3       Ԁ       
+        -   -   Ѐ<      
+     	     	rmeshu  7               Ԁ       	        F   F               
+E         $0H`lx
+0E6Ermesh       H	 /   /   Ѐ<           	     	        
+            +I	       Ԁ       	       I	 /   /   Ѐ<                       
+            	 E   E   Ѐ             %                     
+           E	 E   E   Ѐ       	     	0%              ~       
+           
+ E   E   Ѐ       
+     
+p%           
+                         z  A   A          	     	@L         $0H`lxErmesh         >   >   Ѐ<      	     
+     
+  $0H`lrmeshq   9u                Ԁ       
+         <   <   Ѐ<      
+     	     	P   $0H`lq  9u                 Ԁ       	       ԍ  >   >   Ѐ<      
+     	     	`  $0H`lrmeshq  9u        }        Ԁ       	         <   <   Ѐ<      	     
+     
+   $0H`lq  9u                 Ԁ       
+       s A   A          
+     
+M         $0H`lxLrmesh       T E   E   Ѐ       
+     
+%           
+                          ?   ?   Ѐ<      
+     	     	p        
+     ~                 1       Ԁ       	        b   b   <      	     
+     `      
            E  0   @  
 
- 	                                       Ԁ       
-         b   b   <           	     p      
+ 	                              ,       Ԁ       
+        b   b   <           	     `      
           E  0   @  
 
- 	                                b   b   <           	     p      
+ 	                               b   b   <           	     `      
           E  0   @  
 
- 	                                b   b   <           	     p      
+ 	                              / E   E   Ѐ       	     	%         
+                        	 b   b   <           	     `      
           E  0   @  
 
- 	                              H  b   b   <           	     p      
+ 	                              A b   b   <           	     `      
           E  0   @  
 
- 	                              	  b   b   <           	     p      
+ 	                              n b   b   <           	     `      
           E  0   @  
 
- 	                              2  b   b   <           	     p      
+ 	                               b   b   <           	     `      
           E  0   @  
 
- 	                              %  b   b   <           	     p      
+ 	                               b   b   <           	     `      
           E  0   @  
 
- 	                                A   A          
-     
-6M         $0H`lxKrmesh       T F   F          	     	˟S         $0H`lx
-/L7Mrmesh        b   b   <      	     
-           
+ 	                               b   b   <      	     
+     p      
            E  0   @  
 
  	                              ̡       Ԁ       
-       # b   b   <           	           
+       , b   b   <           	     p      
           E  0   @  
 
- 	                              G b   b   <           	           
+ 	                              ţ b   b   <           	     p      
           E  0   @  
 
- 	                              Τ b   b   <           	           
+ 	                               b   b   <           	     p      
           E  0   @  
 
- 	                              @ b   b   <           	           
+ 	                               b   b   <           	     p      
           E  0   @  
 
- 	                              @ b   b   <           	           
+ 	                              ĭ b   b   <           	     p      
           E  0   @  
 
- 	                               b   b   <           	           
+ 	                              ΰ b   b   <           	     p      
           E  0   @  
 
- 	                               b   b   <           	           
+ 	                              r b   b   <           	     p      
           E  0   @  
 
- 	                               -   -   Ѐ<           	     	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   Ѐ       
+ 	                              { -   -   Ѐ<           	     	rmeshu 	 4        N -   -   Ј<           	     	rmeshu 	 4        E -   -   Ј<           	     	rmeshu 	 4        E -   -   Ј<           	     	rmeshu 	 4        * -   -   Ј<           	     	rmeshu 	 4         -   -   Ј<           	     	rmeshu 	 4         -   -   Ј<           	     	rmeshu 	 4        V <   <   Ѐ<      
+     	     	                                     Ԁ       	       , F   F          	     	wT         $0H`lx
+EMrmesh       	 A   A          
      
-%           
-                            E   E   Ѐ       	     	%         
-                          A   A          
+_U         $0H`lxxTrmesh       z  A   A          	     	\         $0H`lx`Urmesh       s A   A          
      
-	y\         $0H`lxA[rmesh       t  E   E   Ѐ       
+ ]         $0H`lx\rmesh       , A   A          	     	c         $0H`lx]rmesh       	 A   A          
      
-%           
-	                           E   E   Ѐ       	     	%         
-	                        T A   A          	     	 b         $0H`lxy\rmesh        A   A          
+d         $0H`lxcrmesh       z  A   A          	     	:[k         $0H`lxdrmesh       s A   A          
      
-)d         $0H`lxbrmesh       t E   E   Ѐ       
+ 'Cl         $0H`lx[krmesh        E   E   Ѐ       
      
- %           
-
-                         À E   E   Ѐ       	     	%         
-
-                         A   A          	     	 +j         $0H`lxdrmesh         A   A          
+%           
+                         F E   E   Ѐ       	     	%         
+                        , A   A          	     	 Zr         $0H`lxClrmesh       	 A   A          
      
-Ik         $0H`lxjrmesh       T A   A          	     	0K$r         $0H`lxkrmesh        A   A          
+ Gs         $0H`lxrrmesh       
+ E   E   Ѐ       
      
- i\s         $0H`lx$rrmesh       4	 E   E   Ѐ       
+0%           
+                         
+ E   E   Ѐ       	     	%         
+                        z  A   A          	     	 zz         $0H`lxsrmesh       s A   A          
      
-0%           
-                         	 E   E   Ѐ       	     	@%         
-                         A   A          	     	Pky         $0H`lx\srmesh         A   A          
+@g{         $0H`lxzrmesh       T E   E   Ѐ       
      
-@z         $0H`lxyrmesh       T A   A          	     	`f         $0H`lxzrmesh        A   A          
+P%           
+	                          E   E   Ѐ       	     	0%         
+	                        , A   A          	     	@>         $0H`lx{rmesh       	 A   A          
      
-P         $0H`lxfrmesh        A   A          	     	p         $0H`lxrmesh    	   t   E   E   Ѐ       
+`&         $0H`lx?rmesh    	   z  A   A          	     	P߉         $0H`lx&rmesh    	   s A   A          
      
-`%   	        
-                      	      E   E   Ѐ       	     	% 	        
-                     	     A   A          
+pǊ         $0H`lxrmesh    	    E   E   Ѐ       
      
-p?         $0H`lxrmesh    	   t  E   E   Ѐ       
-     
-%   
-        
-                      	     E   E   Ѐ       	     	% 
-        
-                     	   T A   A          	     	˨         $0H`lx@rmesh    	    A   A          
-     
-         $0H`lxrmesh    	   t E   E   Ѐ       
+%           
+
+                      	    E   E   Ѐ       	     	`%         
+
+                     	   , A   A          	     	pڀ         $0H`lxȊrmesh    	   	 A   A          
      
-%           
-                      	   À E   E   Ѐ       	     	%         
-                     	    A   A          	     	I         $0H`lxrmesh    
\ No newline at end of file
+h         $0H`lxrmesh    
\ No newline at end of file
diff -Naur ns-3.25/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap ns-3.26/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	2016-10-03 20:57:08.357246778 -0700
+++ ns-3.26/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap	2016-10-03 19:49:01.662387541 -0700
@@ -1,338 +1,327 @@
-ò            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         ?  A   A          	     	 k?          $0H`lx $ rmesh        ?  >   >   Ѐ<      	     
+ò            i         <   <          	     	  z          $0H`lx rmesh          >   >   Ѐ<      	     
      
-    $0H`lrmeshq   9u         @  >   >   Ј<      	     
+    $0H`lrmeshq   9u           >   >   Ј<      	     
      
-    $0H`lrmeshq   9u         A  >   >   Ј<      	     
+    $0H`lrmeshq   9u           >   >   Ј<      	     
      
-    $0H`lrmeshq   9u         B  >   >   Ј<      	     
+    $0H`lrmeshq   9u           >   >   Ј<      	     
      
-    $0H`lrmeshq   9u         C  >   >   Ј<      	     
+    $0H`lrmeshq   9u           >   >   Ј<      	     
      
-    $0H`lrmeshq   9u         D  >   >   Ј<      	     
+    $0H`lrmeshq   9u           >   >   Ј<      	     
      
-    $0H`lrmeshq   9u         E  >   >   Ј<      	     
+    $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`lrmeshq   9u         g A   A          
      
-           $0H`lx ? rmesh        	  >   >   Ј<           	     	    $0H`lrmeshq   9u           >   >   Ј<           	     	    $0H`lrmeshq   9u           >   >   Ѐ<      
-     	     	0   $0H`lrmeshq   9u                 Ԁ       	          <   <   Ѐ<      	     
+ g         $0H`lx  rmesh         >   >   Ѐ<      
+     	     	   $0H`lrmeshq   9u                Ԁ       	         <   <   Ѐ<      	     
      
-      $0H`lq   9u                  Ԁ       
-        C  -   -   Ѐ<           	     	@ rmeshu   4           -   -   Ј<           	     	@ rmeshu   4           -   -   Ј<           	     	@ rmeshu   4           -   -   Ј<           	     	@ rmeshu   4           -   -   Ј<           	     	@ rmeshu   4         }  -   -   Ј<           	     	@ rmeshu   4         l        Ԁ               v        Ԁ                 >   >   Ѐ<      	     
+      $0H`lq   9u          	       Ԁ       
+        / >   >   Ѐ<      	     
      
-0   $0H`lrmeshq   9u                 Ԁ       
-          <   <   Ѐ<      
-     	     	P    $0H`lq  9u                  Ԁ       	        $ >   >   Ѐ<           	     	`   $0H`lrmeshq  9u         ' >   >   Ј<           	     	`   $0H`lrmeshq  9u         6 >   >   Ј<           	     	`   $0H`lrmeshq  9u         E >   >   Ј<           	     	`   $0H`lrmeshq  9u         9 >   >   Ј<           	     	`   $0H`lrmeshq  9u         Q >   >   Ј<           	     	`   $0H`lrmeshq  9u          F   F          	     	p          $0H`lx
- rmesh        ϩ       Ԁ               Y <   <   Ѐ<           	     	    $0H`lq  9u          7       Ԁ               h A   A          
+0   $0H`lrmeshq   9u         0 >   >   Ј<      	     
      
-@ h         $0H`lx rmesh        $ F   F          	     	          $0H`lx
-irmesh         A   A          
+0   $0H`lrmeshq   9u         1 >   >   Ј<      	     
      
-P 	         $0H`lx rmesh       } F   F          	     	 ˾         $0H`lx
-
-nrmesh       h A   A          
+0   $0H`lrmeshq   9u         2 >   >   Ј<      	     
      
-`          $0H`lx rmesh       $ F   F          	     	 _         $0H`lx
-rmesh         N   N          
-p      
+0   $0H`lrmeshq   9u         3 >   >   Ј<      	     
+     
+0   $0H`lrmeshq   9u         4 >   >   Ј<      	     
+     
+0   $0H`lrmeshq   9u         5 >   >   Ј<      	     
+     
+0   $0H`lrmeshq   9u         6 <   <   Ѐ<           	     	     $0H`lq   9u          7 >   >   Ѐ<           	     	0   $0H`lrmeshq   9u         8       Ԁ                -   -   Ѐ<      
+     	     	@ rmeshu  9                Ԁ       	         -   -   Ѐ<      	     
+     
+@ rmeshu  7                Ԁ       
+        % -   -   Ј<      
+     	     	@ rmeshu  9         5       Ԁ       	        
+1 A   A          	     	P 0         $0H`lxvrmesh        ,1 >   >   Ѐ<      	     
+     
+P   $0H`lrmeshq   9u         1       Ԁ       
+        _2 <   <   Ѐ<      
+     	     	`    $0H`lq  9u          o2       Ԁ       	        33 >   >   Ѐ<      
+     	     	p   $0H`lrmeshq  9u         C3       Ԁ       	        3 <   <   Ѐ<      	     
+     
+`    $0H`lq  9u          Q4       Ԁ       
+         A   A          
+     
+p          $0H`lx1rmesh         F   F          	     	          $0H`lx
+	rmesh       g; A   A          
+     
+ }         $0H`lxrmesh       /       Ԁ              0 -   -   Ѐ<           	     	 rmeshu  7        1 F   F          	     	 r         $0H`lx
+~rmesh       1 -   -   Ј<           	     	 rmeshu  7         A   A          
+     
+          $0H`lxsrmesh         N   N          
+      
                  
 
 
-         N   N          	      
-                
+         A   A          	     	          $0H`lxrmesh       ǐ        Ԁ              Q  <   <   Ѐ<           	     	    $0H`lq  9u         %  >   >   Ѐ<           	     	   $0H`lrmeshq  9u        :        Ԁ              g; A   A          
+     
+          $0H`lxrmesh       1 F   F          	     	 &         $0H`lx
+rmesh        A   A          
+     
+ a'         $0H`lx&rmesh           N   N          
+      
+                 
 
 
-       {  E   E   Ѐ       	     	 %                     
-             ?   ?   Ѐ<      	     
+       }  N   N          	      
+                
+
+
+         F   F          	     	 :V.         $0H`lx
+a'`'rmesh       g; A   A          
+     
+ '/         $0H`lxV.rmesh       1 F   F          	     	Z5         $0H`lx
+//rmesh        A   A          
+     
+ G6         $0H`lx5rmesh        E   E   Ѐ       	     	 %                     
+           7 ?   ?   Ѐ<      	     
      
-                       
-          F        Ԁ       
-         ?   ?   Ѐ<           	     	                    
-                  Ԁ                N   N   <      
+                       
+                 Ԁ       
+        ?   ?   Ѐ<           	     	0                   
+          9 ?   ?   Ј<           	     	0                   
+          Q ?   ?   Ј<           	     	0                   
+                 Ԁ              Ȕ N   N   <      
      	     
                         
      
 
-               Ԁ       	          b   b   <      	     
+       ؔ       Ԁ       	        b   b   <      	     
             
            E  0    @  
 
- 	                                      Ԁ       
-         b   b   <           	            
+ 	                              k       Ԁ       
+        b   b   <      	     
+           
+           E  0   @  
+
+ 	                                     Ԁ       
+       ~ b   b   <           	            
           E  0    @  
 
- 	                              3  N   N          	                      
+ 	                              ? b   b   <      	     
+            
+           E  0   @  
+
+ 	                               b   b   <           	           
+          E  0   @  
+
+ 	                               b   b   <           	           
+          E  0   @  
+
+ 	                              i b   b   <      	     
+            
+           E  0   @  
+
+ 	                               b   b   <      	     
+            
+           E  0   @  
+
+ 	                              y       Ԁ       
+       d b   b   <           	            
+          E  0   @  
+
+ 	                              ) N   N          	@                     
 
-       3  N   N   <      	     
-           
+       T N   N   <      	     
+     0      
                   
 
      
-       4        Ԁ       
-       5  N   N   <           	           
+              Ԁ       
+       E N   N          
+                     
+
+       ݫ N   N   <           	     0      
                  
 
      
-       6  N   N          
-                      
-
-       <        Ԁ              u=  b   b   <      
+              Ԁ               b   b   <      
      	     
                 E  0    @  
 
- 	                              =        Ԁ       	         A   A          
-     
- 	L         $0H`lx `rmesh       } F   F          	     	&         $0H`lx
-Lrmesh         b   b   <      	     
-            
-           E  0   @  
-
- 	                                     Ԁ       
-        b   b   <           	            
-          E  0   @  
-
- 	                                     Ԁ              ~ b   b   <      
+ 	                                     Ԁ       	        b   b   <      
+     	     
+                E  0    @  
+
+ 	                                     Ԁ       	              Ԁ              - b   b   <      
      	     
                  E  0   @  
 
- 	                                     Ԁ       	       h A   A          
-     
- )&         $0H`lx &rmesh       <       Ԁ               <   <   Ѐ<      
-     	     	                                      Ԁ       	        F   F          	     	0+-         $0H`lx
-&R&rmesh       
- -   -   Ѐ<           	     	@rmeshu  7            E   E   Ѐ       
-     
- %           
-                         8  E   E   Ѐ       	     	P%         
-                          A   A          
-     
- I.         $0H`lx -rmesh          E   E   Ѐ       
-     
- %           
-                         8! E   E   Ѐ       	     	`%         
-                        }       Ԁ              Q~ <   <   Ѐ<           	     	   $0H`lq  9u         7 >   >   Ѐ<           	     	  $0H`lrmeshq  9u        :       Ԁ              h A   A          
-     
- i/6         $0H`lx -rmesh         E   E   Ѐ       
-     
- %           
-                         8 E   E   Ѐ       	     	%         
-                               Ԁ               ?   ?   Ѐ<      
-     	     	      
-     f                        Ԁ       	        b   b   <      	     
-     0      
-           E  0   @  
-
- 	                               b   b   <      	     
-     0      
-           E  0   @  
-
- 	                              ͅ       Ԁ       
-        b   b   <           	     0      
-          E  0   @  
-
- 	                              g b   b   <      	     
-     @      
-           E  0   @  
-
- 	                               b   b   <           	     0      
-          E  0   @  
-
- 	                               b   b   <      	     
-     @      
-           E  0   @  
-
- 	                              '       Ԁ               ?   ?   Ѐ<      
-     	     	      
-                      ŋ       Ԁ       	        b   b   <      	     
+ 	                              =       Ԁ       	              Ԁ              X b   b   <      
+     	     
+0                E  0   @  
+
+ 	                              h       Ԁ       	           b   b   <      	     
      @      
-           E  0   @  
-
- 	                              ͍       Ԁ       
-        b   b   <           	     0      
-          E  0   @  
-
- 	                               b   b   <           	     @      
-          E  0   @  
+           E  0   @  
 
- 	                               b   b   <           	     @      
-          E  0   @  
+ 	                                       Ԁ       
+         b   b   <           	     @      
+          E  0   @  
 
- 	                                     Ԁ              \ b   b   <      
+ 	                              ,        Ԁ                b   b   <      
      	     
-0                E  0   @  
+@                E  0   @  
 
- 	                              l       Ԁ       	       T -   -   Ѐ<      	     
+ 	                                      Ԁ       	               Ԁ                -   -   Ѐ<           	     	Prmeshu  7        a  F   F          	     	`z=         $0H`lx
+66rmesh       >        Ԁ                -   -   Ѐ<           	     	prmeshu  4                Ԁ              g; A   A          
      
-rmeshu  4               Ԁ       
-       [ -   -   Ѐ<      
-     	     	rmeshu  7        k       Ԁ       	       ) F   F          	     	k<         $0H`lx
-/6h5rmesh       ] >   >   Ѐ<      	     
-     
-   $0H`lrmeshq   9u               Ԁ       
-       )  -   -   Ј<      
-     	     	rmeshu  4        9        Ԁ       	         -   -   Ѐ<      	     
-     
-0rmeshu  7        !       Ԁ       
-       8  /   /   Ѐ<           	     	        
-              <   <          
-     
-@=         $0H`lx rmesh         >   >   Ѐ<      
-     	     	  $0H`lrmeshq  9u                Ԁ       	         <   <   Ѐ<      	     
-     
-P   $0H`lq   9u                 Ԁ       
-         >   >   Ѐ<      	     
-     
-`  $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   Ѐ       
-     
-%           
-                         þ	 ?   ?   Ѐ<      
-     	     	@        
-   j                   Ӿ	       Ԁ       	       *	 b   b   <      	     
+ gD>         $0H`lx=rmesh       F >   >   Ѐ<           	     	  $0H`lrmeshq  9u        H       Ԁ              H       Ԁ              wI <   <   Ѐ<           	     	   $0H`lq  9u 	        Ty <   <   Ѐ<      
+     	     	                              dy       Ԁ       	         E   E   Ѐ       
+     
+0%           
+                         Ģ E   E   Ѐ       	     	%         
+                               Ԁ              / ?   ?   Ѐ<      
+     	     	      
+     !                 ?       Ԁ       	        b   b   <      	     
      P      
-           E  0   @  
-
- 	                              	       Ԁ       
-       	 b   b   <           	     P      
-          E  0   @  
-
- 	                              	 b   b   <      	     
-     `      
            E  0   @  
 
- 	                              	 E   E   Ѐ       	     	P%         
-                        g	 b   b   <      	     
-     `      
+ 	                               b   b   <      	     
+     P      
            E  0   @  
 
- 	                              @	       Ԁ       
-       	 b   b   <           	     `      
+ 	                                     Ԁ       
+        b   b   <           	     P      
           E  0   @  
 
- 	                              " ?   ?   Ѐ<           	     	`                     
-           E   E   Ѐ       	     	p%              s       
-            ?   ?   Ѐ<      	     
-     
-                      
-                 Ԁ       
-       E ?   ?   Ѐ<           	     	                   
-          ' ?   ?   Ј<           	     	                   
-                 Ԁ               b   b   <      
-     	     
-@                E  0   @  
-
- 	                                     Ԁ       	       [       Ԁ              " b   b   <      
-     	     
-P                E  0   @  
-
- 	                              2       Ԁ       	       $ F   F          	     	K         $0H`lx
-DErmesh           b   b   <      	     
-     p      
+ 	                              ǫ       Ԁ              p ?   ?   Ѐ<      
+     	     	      
+                             Ԁ       	       - F   F          	     	5E         $0H`lx
+6O>rmesh        -   -   Ѐ<      
+     	     	rmeshu  4               Ԁ       	       s -   -   Ѐ<      	     
+     
+@rmeshu  7               Ԁ       
+        A   A          
+     
+PE         $0H`lx6Ermesh       p >   >   Ј<      
+     	     	   $0H`lrmeshq  9u               Ԁ       	        -   -   Ѐ<      	     
+     
+`rmeshu  4        _       Ԁ       
+        -   -   Ѐ<      
+     	     	rmeshu  7               Ԁ       	       H	 /   /   Ѐ<           	     	        
+            	 E   E   Ѐ       	     	0%              ~       
+            
+ E   E   Ѐ       
+     
+p%           
+                           A   A          	     	@L         $0H`lxErmesh       '  >   >   Ѐ<      	     
+     
+  $0H`lrmeshq   9u        Ќ        Ԁ       
+       c  <   <   Ѐ<      
+     	     	P   $0H`lq  9u         s        Ԁ       	       @  >   >   Ѐ<      
+     	     	`  $0H`lrmeshq  9u        P        Ԁ       	         <   <   Ѐ<      	     
+     
+   $0H`lq  9u         C        Ԁ       
+       gs A   A          
+     
+M         $0H`lxLrmesh        E   E   Ѐ       
+     
+%           
+                          ?   ?   Ѐ<      
+     	     	p        
+     ~                        Ԁ       	        b   b   <      	     
+     `      
            E  0   @  
 
- 	                                       Ԁ       
-         b   b   <           	     p      
+ 	                              Y       Ԁ       
+        b   b   <           	     `      
           E  0   @  
 
- 	                              o  b   b   <           	     p      
+ 	                               E   E   Ѐ       	     	%         
+                         b   b   <           	     `      
           E  0   @  
 
- 	                                b   b   <           	     p      
+ 	                               b   b   <           	     `      
           E  0   @  
 
- 	                              2
-  b   b   <           	     p      
+ 	                               b   b   <           	     `      
           E  0   @  
 
- 	                                b   b   <           	     p      
+ 	                               b   b   <           	     `      
           E  0   @  
 
- 	                              %  b   b   <           	     p      
+ 	                              g b   b   <           	     `      
           E  0   @  
 
- 	                                A   A          
-     
-6M         $0H`lxKrmesh       U F   F          	     	˟S         $0H`lx
-/L7Mrmesh         b   b   <      	     
-           
+ 	                                b   b   <      	     
+     p      
            E  0   @  
 
  	                                     Ԁ       
-        b   b   <           	           
+       ɢ b   b   <           	     p      
           E  0   @  
 
- 	                               b   b   <           	           
+ 	                              b b   b   <           	     p      
           E  0   @  
 
- 	                              k b   b   <           	           
+ 	                               b   b   <           	     p      
           E  0   @  
 
- 	                              ݩ b   b   <           	           
+ 	                               b   b   <           	     p      
           E  0   @  
 
- 	                              ݳ b   b   <           	           
+ 	                              a b   b   <           	     p      
           E  0   @  
 
- 	                               b   b   <           	           
+ 	                              k b   b   <           	     p      
           E  0   @  
 
- 	                               b   b   <           	           
+ 	                               b   b   <           	     p      
           E  0   @  
 
- 	                              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          
+ 	                               -   -   Ѐ<           	     	rmeshu 	 4         -   -   Ј<           	     	rmeshu 	 4         -   -   Ј<           	     	rmeshu 	 4         -   -   Ј<           	     	rmeshu 	 4         -   -   Ј<           	     	rmeshu 	 4        d -   -   Ј<           	     	rmeshu 	 4        d -   -   Ј<           	     	rmeshu 	 4         <   <   Ѐ<      
+     	     	                                     Ԁ       	       - F   F          	     	wT         $0H`lx
+EMrmesh       	 A   A          
      
-T         $0H`lxSrmesh        A   A          	     	@[         $0H`lxTrmesh           E   E   Ѐ       
+_U         $0H`lxxTrmesh         A   A          	     	\         $0H`lx`Urmesh       gs A   A          
      
-%           
-                         8  E   E   Ѐ       	     	%         
-                          A   A          
+ ]         $0H`lx\rmesh        E   E   Ѐ       
      
-	y\         $0H`lxA[rmesh          E   E   Ѐ       
+%           
+                         
+- A   A          	     	c         $0H`lx]rmesh       	 A   A          
      
-%           
-	                         8! E   E   Ѐ       	     	%         
-	                        T A   A          	     	 b         $0H`lxy\rmesh        A   A          
+d         $0H`lxcrmesh         A   A          	     	:[k         $0H`lxdrmesh       gs A   A          
      
-)d         $0H`lxbrmesh         E   E   Ѐ       
+ 'Cl         $0H`lx[krmesh         E   E   Ѐ       
      
- %           
-
-                         8 E   E   Ѐ       	     	%         
-
-                         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          
-     
- i\s         $0H`lx$rrmesh       	 E   E   Ѐ       
+%           
+                          E   E   Ѐ       	     	%         
+                        
+- A   A          	     	 Zr         $0H`lxClrmesh       	 A   A          
      
-0%           
-                         	 E   E   Ѐ       	     	@%         
-                         A   A          	     	Pky         $0H`lx\srmesh         A   A          
+ Gs         $0H`lxrrmesh        
+ E   E   Ѐ       
      
-@z         $0H`lxyrmesh       T A   A          	     	`f         $0H`lxzrmesh        A   A          
+0%           
+                         
+ E   E   Ѐ       	     	%         
+                          A   A          	     	 zz         $0H`lxsrmesh       gs A   A          
      
-P         $0H`lxfrmesh        A   A          	     	p         $0H`lxrmesh    	       E   E   Ѐ       
+@g{         $0H`lxzrmesh        E   E   Ѐ       
      
-`%   	        
-                      	   8  E   E   Ѐ       	     	% 	        
-                     	     A   A          
+P%           
+	                         3 E   E   Ѐ       	     	0%         
+	                        
+- A   A          	     	@>         $0H`lx{rmesh       	 A   A          
      
-p?         $0H`lxrmesh    	      E   E   Ѐ       
+`&         $0H`lx?rmesh    	     A   A          	     	P߉         $0H`lx&rmesh    	   gs A   A          
      
-%   
-        
-                      	   8! E   E   Ѐ       	     	% 
-        
-                     	   T A   A          	     	˨         $0H`lx@rmesh    	    A   A          
+pǊ         $0H`lxrmesh    	    E   E   Ѐ       
      
-         $0H`lxrmesh    	     E   E   Ѐ       
+%           
+
+                      	   _ E   E   Ѐ       	     	`%         
+
+                     	   
+- A   A          	     	pڀ         $0H`lxȊrmesh    	   	 A   A          
      
-%           
-                      	   8 E   E   Ѐ       	     	%         
-                     	    A   A          	     	I         $0H`lxrmesh    
\ No newline at end of file
+h         $0H`lxrmesh    
\ No newline at end of file
diff -Naur ns-3.25/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap ns-3.26/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	2016-10-03 20:57:08.360246755 -0700
+++ ns-3.26/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap	2016-10-03 19:49:01.665387519 -0700
@@ -1,145 +1,144 @@
-ò            i         <   <                           $0H`lx rmesh          >   >   Ѐ<                    $0H`lrmeshq   9u                 Ԁ               O  <   <   Ѐ<                     $0H`lq   9u          _        Ԁ               +  >   >   Ѐ<                    $0H`lrmeshq   9u         ;        Ԁ                 <   <   Ѐ<                     $0H`lq  9u          -        Ԁ               JO A   A                 JO         $0H`lx  rmesh        #j A   A               0 i         $0H`lx Ormesh        j A   A               0 j         $0H`lx jrmesh         A   A               @ 
+ò            i         <   <                           $0H`lx rmesh        /  >   >   Ѐ<                    $0H`lrmeshq   9u                 Ԁ               s  <   <   Ѐ<                     $0H`lq   9u                  Ԁ               O  >   >   Ѐ<                    $0H`lrmeshq   9u         _        Ԁ                 <   <   Ѐ<                     $0H`lq  9u          l        Ԁ               JO A   A                 JO         $0H`lx  rmesh        #j A   A               0 i         $0H`lx Ormesh        j A   A               0 j         $0H`lx jrmesh         A   A               @ 
          $0H`lx rmesh       JO A   A               @          $0H`lx rmesh       #j A   A               P          $0H`lx rmesh       j A   A               P 2         $0H`lx rmesh       #  N   N          `                       
 
        #  N   N          `                      
 
-       $  E   E   Ѐ            p %                                    %  ?   ?   Ѐ<                p                                 %        Ԁ              &  N   N   <                                         
+       %  E   E   Ѐ            p %                                    +&  ?   ?   Ѐ<                p                                 ;&        Ԁ              '  N   N   <                                         
      
-       &        Ԁ              '        <                                  E      @  
+       '        Ԁ              Y)        <                                  E      @  
 
- 	 l                                                                                                             
-(        Ԁ              "K  N   N                                 
+ 	 l                                                                                                             i)        Ԁ              L  N   N                                 
 
-       ML  N   N   <                                        
+       M  N   N   <                                        
      
-       ]L        Ԁ              sM  N   N                                
+       M        Ԁ              N  N   N                                
 
-       M        <                                 E      @  
+       3O        <                                 E      @  
 
- 	 l                                                                                                             O        Ԁ              X        <                                  E     @  
+ 	 l                                                                                                             wP        Ԁ              X        <                                  E     @  
 
- 	 l                                                                                                             h        Ԁ                      <                                  E     @  
+ 	 l                                                                                                             h        Ԁ                      <                                  E     @  
 
- 	 l                                                                                                                     Ԁ                A   A                M         $0H`lx 3rmesh       JO A   A                         $0H`lx Mrmesh              <                0                 E     @  
+ 	 l                                                                                                             ]        Ԁ                A   A                M         $0H`lx 3rmesh       JO A   A                         $0H`lx Mrmesh              <                0                 E     @  
 
- 	 l                                                                                                                    Ԁ                     <                0                 E     @  
+ 	 l                                                                                                                    Ԁ              !       <                0                 E     @  
 
- 	 l                                                                                                             S       Ԁ              J       <                @                 E     @  
+ 	 l                                                                                                             e       Ԁ              J       <                @                 E     @  
 
- 	 l                                                                                                             K       Ԁ              _K       <                @                 E     @  
+ 	 l                                                                                                             K       Ԁ              K       <                @                 E     @  
 
- 	 l                                                                                                             L       Ԁ              H       <                P                 E     @  
+ 	 l                                                                                                             L       Ԁ              H       <                P                 E     @  
 
- 	 l                                                                                                             X       Ԁ                     <                P                 E     @  
+ 	 l                                                                                                             X       Ԁ                     <                P                 E     @  
 
- 	 l                                                                                                                    Ԁ                     <                `                 E     @  
+ 	 l                                                                                                                    Ԁ                     <                `                 E     @  
 
- 	 l                                                                                                                    Ԁ                     <                `                 E     @  
+ 	 l                                                                                                                    Ԁ              }       <                `                 E     @  
 
- 	 l                                                                                                             C       Ԁ                     <                p                 E     @  
+ 	 l                                                                                                                    Ԁ                     <                p                 E     @  
 
- 	 l                                                                                                                    Ԁ                     <                p                 E     @  
+ 	 l                                                                                                                    Ԁ              b       <                p                 E     @  
 
- 	 l                                                                                                             C       Ԁ              W       <                                 E     @  
+ 	 l                                                                                                                    Ԁ              W       <                                 E     @  
 
- 	 l                                                                                                             W       Ԁ              OX       <                                 E     @  
+ 	 l                                                                                                             W       Ԁ              XX       <                                 E     @  
 
- 	 l                                                                                                             CY       Ԁ              8       <                                 E     @  
+ 	 l                                                                                                             LY       Ԁ              8       <                                 E     @  
 
- 	 l                                                                                                             H       Ԁ                     <                                 E     @  
+ 	 l                                                                                                             H       Ԁ                     <                                 E     @  
 
- 	 l                                                                                                                    Ԁ                     <                                 E   	  @  
+ 	 l                                                                                                                    Ԁ                     <                                 E   	  @  
 
- 	 l                                                                                                                    Ԁ                     <                                 E   	  @  
+ 	 l                                                                                                                    Ԁ              d       <                                 E   	  @  
 
- 	 l                                                                                                                    Ԁ              ء       <                                 E   
+ 	 l                                                                                                             X       Ԁ              ء       <                                 E   
   @  
 
- 	 l                                                                                                                    Ԁ              ?       <                                 E   
+ 	 l                                                                                                                    Ԁ                     <                                 E   
   @  
 
- 	 l                                                                                                             3       Ԁ              (e       <                                 E     @  
+ 	 l                                                                                                                    Ԁ              (e       <                                 E     @  
 
- 	 l                                                                                                             8e       Ԁ              e       <                                 E     @  
+ 	 l                                                                                                             8e       Ԁ              e       <                                 E     @  
 
- 	 l                                                                                                             f       Ԁ              #j A   A                3&         $0H`lx rmesh       j A   A                t'         $0H`lx &rmesh       x(	       <                                 E     @  
+ 	 l                                                                                                             f       Ԁ              #j A   A                3&         $0H`lx rmesh       j A   A                t'         $0H`lx &rmesh       x(	       <                                 E     @  
 
- 	 l                                                                                                             (	       Ԁ              (	       <                                 E     @  
+ 	 l                                                                                                             (	       Ԁ              )	       <                                 E     @  
 
- 	 l                                                                                                             )	       Ԁ              	       <                                 E     @  
+ 	 l                                                                                                             *	       Ԁ              	       <                                 E     @  
 
- 	 l                                                                                                             	       Ԁ              /	       <                                 E     @  
+ 	 l                                                                                                             	       Ԁ              	       <                                 E     @  
 
- 	 l                                                                                                             #	       Ԁ              
+ 	 l                                                                                                             	       Ԁ              
        <                                 E     @  
 
  	 l                                                                                                             (
-       Ԁ              
+       Ԁ              
        <                                 E     @  
 
- 	 l                                                                                                             s
+ 	 l                                                                                                             
        Ԁ              hr       <                                 E     @  
 
- 	 l                                                                                                             xr       Ԁ              r       <                                 E     @  
+ 	 l                                                                                                             xr       Ԁ              2s       <                                 E     @  
 
- 	 l                                                                                                             s       Ԁ              5       <                                E     @  
+ 	 l                                                                                                             &t       Ԁ              5       <                                E     @  
 
- 	 l                                                                                                             5       Ԁ              5       <                                E     @  
+ 	 l                                                                                                             5       Ԁ              c6       <                                E     @  
 
- 	 l                                                                                                             6       Ԁ                     <                                 E     @  
+ 	 l                                                                                                             W7       Ԁ                     <                                 E     @  
 
- 	 l                                                                                                                    Ԁ              G       <                                 E     @  
+ 	 l                                                                                                                    Ԁ                     <                                 E     @  
 
- 	 l                                                                                                                    Ԁ              0       <                0                E     @  
+ 	 l                                                                                                                    Ԁ              0       <                0                E     @  
 
- 	 l                                                                                                             @       Ԁ                     <                0                E     @  
+ 	 l                                                                                                             @       Ԁ                     <                0                E     @  
 
- 	 l                                                                                                             c       Ԁ                     <                @                E     @  
+ 	 l                                                                                                             Ͻ       Ԁ                     <                @                E     @  
 
- 	 l                                                                                                                    Ԁ                     <                @                E     @  
+ 	 l                                                                                                                    Ԁ              S       <                @                E     @  
 
- 	 l                                                                                                                    Ԁ                       <                P                E     @  
+ 	 l                                                                                                                    Ԁ                       <                P                E     @  
 
- 	 l                                                                                                                      Ԁ                       <                P                E     @  
+ 	 l                                                                                                                      Ԁ              Q        <                P                E     @  
 
- 	 l                                                                                                                     Ԁ                      <                `                E     @  
+ 	 l                                                                                                                     Ԁ                      <                `                E     @  
 
- 	 l                                                                                                                     Ԁ              G        <                `                E     @  
+ 	 l                                                                                                                     Ԁ                      <                `                E     @  
 
- 	 l                                                                                                                     Ԁ                A   A                S.         $0H`lx u'rmesh       JO A   A                
+ 	 l                                                                                                             R        Ԁ                A   A                S.         $0H`lx u'rmesh       JO A   A                
 /         $0H`lx .rmesh       0       <                p                E     @  
 
- 	 l                                                                                                             @       Ԁ                     <                p                E     @  
+ 	 l                                                                                                             @       Ԁ                     <                p                E     @  
 
- 	 l                                                                                                             c       Ԁ              J       <                                E     @  
+ 	 l                                                                                                             ~       Ԁ              J       <                                E     @  
 
- 	 l                                                                                                             J       Ԁ              J       <                                E     @  
+ 	 l                                                                                                             J       Ԁ              \K       <                                E     @  
 
- 	 l                                                                                                             K       Ԁ                     <                                E     @  
+ 	 l                                                                                                             (L       Ԁ                     <                                E     @  
 
- 	 l                                                                                                                    Ԁ              7       <                                E     @  
+ 	 l                                                                                                                    Ԁ              I       <                                E     @  
 
- 	 l                                                                                                                    Ԁ                      <                                E     @  
+ 	 l                                                                                                                    Ԁ                      <                                E     @  
 
- 	 l                                                                                                             0       Ԁ                     <                                E     @  
+ 	 l                                                                                                             0       Ԁ                     <                                E     @  
 
- 	 l                                                                                                             S       Ԁ              H       <                                E     @  
+ 	 l                                                                                                                    Ԁ              H       <                                E     @  
 
- 	 l                                                                                                             X       Ԁ                     <                                E     @  
+ 	 l                                                                                                             X       Ԁ              ܔ       <                                E     @  
 
- 	 l                                                                                                             {       Ԁ              W       <                                E     @  
+ 	 l                                                                                                                    Ԁ              W       <                                E     @  
 
- 	 l                                                                                                             W       Ԁ              W       <                                E     @  
+ 	 l                                                                                                             W       Ԁ              >X       <                                E     @  
 
- 	 l                                                                                                             X       Ԁ                     <                                E     @  
+ 	 l                                                                                                             X       Ԁ                     <                                E     @  
 
- 	 l                                                                                                                    Ԁ              O       <                                E     @  
+ 	 l                                                                                                                    Ԁ                     <                                E     @  
 
- 	 l                                                                                                                    Ԁ              8       <                                E     @  
+ 	 l                                                                                                             h       Ԁ              8       <                                E     @  
 
- 	 l                                                                                                             H       Ԁ                     <                                E     @  
+ 	 l                                                                                                             H       Ԁ                     <                                E     @  
 
- 	 l                                                                                                             C       Ԁ                     <                                E     @  
+ 	 l                                                                                                                    Ԁ                     <                                E     @  
 
  	 l                                                                                                                    Ԁ                     <                                E     @  
 
@@ -149,93 +148,93 @@
 
  	 l                                                                                                             e       Ԁ              #j A   A                s06         $0H`lx /rmesh       j A   A                *6         $0H`lx 06rmesh       ((	       <                                E      @  
 
- 	 l                                                                                                             8(	       Ԁ              (	       <                                E      @  
+ 	 l                                                                                                             8(	       Ԁ              (	       <                                E      @  
 
- 	 l                                                                                                             3)	       Ԁ              x	       <                                 E   !  @  
+ 	 l                                                                                                             <)	       Ԁ              x	       <                                 E   !  @  
 
- 	 l                                                                                                             	       Ԁ              	       <                                 E   !  @  
+ 	 l                                                                                                             	       Ԁ              K	       <                                 E   !  @  
 
- 	 l                                                                                                             	       Ԁ              Ȯ
+ 	 l                                                                                                             	       Ԁ              Ȯ
        <                0                E   "  @  
 
  	 l                                                                                                             خ
-       Ԁ              /
+       Ԁ              
        <                0                E   "  @  
 
- 	 l                                                                                                             ӯ
+ 	 l                                                                                                             Q
        Ԁ              r       <                @                E   #  @  
 
  	 l                                                                                                             (r       Ԁ              r       <                @                E   #  @  
 
  	 l                                                                                                             #s       Ԁ              T5       <                P                E   $  @  
 
- 	 l                                                                                                             d5       Ԁ              5       <                P                E   $  @  
+ 	 l                                                                                                             d5       Ԁ              5       <                P                E   $  @  
 
- 	 l                                                                                                             _6       Ԁ                     <                `                E   %  @  
+ 	 l                                                                                                             q6       Ԁ                     <                `                E   %  @  
 
- 	 l                                                                                                                    Ԁ                     <                `                E   %  @  
+ 	 l                                                                                                                    Ԁ              J       <                `                E   %  @  
 
- 	 l                                                                                                                    Ԁ                     <                p                E   &  @  
+ 	 l                                                                                                                    Ԁ                     <                p                E   &  @  
 
- 	 l                                                                                                                    Ԁ              [       <                p                E   &  @  
+ 	 l                                                                                                                    Ԁ                     <                p                E   &  @  
 
- 	 l                                                                                                                    Ԁ              D       <                                E   '  @  
+ 	 l                                                                                                                    Ԁ              D       <                                E   '  @  
 
- 	 l                                                                                                             T       Ԁ                     <                                E   '  @  
+ 	 l                                                                                                             T       Ԁ                     <                                E   '  @  
 
- 	 l                                                                                                             ;       Ԁ              T         <                                E   (  @  
+ 	 l                                                                                                                    Ԁ              T         <                                E   (  @  
 
- 	 l                                                                                                             d         Ԁ                       <                                E   (  @  
+ 	 l                                                                                                             d         Ԁ              B        <                                E   (  @  
 
- 	 l                                                                                                             K        Ԁ                      <                                E   )  @  
+ 	 l                                                                                                                     Ԁ                      <                                E   )  @  
 
- 	 l                                                                                                                     Ԁ                      <                                E   )  @  
+ 	 l                                                                                                                     Ԁ              &        <                                E   )  @  
 
- 	 l                                                                                                                     Ԁ                A   A                =         $0H`lx 6rmesh       JO A   A                JX>         $0H`lx =rmesh              <                                E   *  @  
+ 	 l                                                                                                                     Ԁ                A   A                =         $0H`lx 6rmesh       JO A   A                JX>         $0H`lx =rmesh              <                                E   *  @  
 
- 	 l                                                                                                                    Ԁ              [       <                                E   *  @  
+ 	 l                                                                                                                    Ԁ              Ǉ       <                                E   *  @  
 
- 	 l                                                                                                                    Ԁ              DJ       <                                E   +  @  
+ 	 l                                                                                                             W       Ԁ              DJ       <                                E   +  @  
 
- 	 l                                                                                                             TJ       Ԁ              J       <                                E   +  @  
+ 	 l                                                                                                             TJ       Ԁ              J       <                                E   +  @  
 
- 	 l                                                                                                             ;K       Ԁ                     <                                E   ,  @  
+ 	 l                                                                                                             VK       Ԁ                     <                                E   ,  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   ,  @  
+ 	 l                                                                                                                    Ԁ              U       <                                E   ,  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   -  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   -  @  
 
- 	 l                                                                                                                    Ԁ              K       <                                E   -  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   -  @  
 
- 	 l                                                                                                                    Ԁ                      <                                E   .  @  
+ 	 l                                                                                                             5       Ԁ                      <                                E   .  @  
 
- 	 l                                                                                                             0       Ԁ                     <                                E   .  @  
+ 	 l                                                                                                             0       Ԁ                     <                                E   .  @  
 
- 	 l                                                                                                                    Ԁ              pW       <                                 E   /  @  
+ 	 l                                                                                                                    Ԁ              pW       <                                 E   /  @  
 
- 	 l                                                                                                             W       Ԁ              W       <                                 E   /  @  
+ 	 l                                                                                                             W       Ԁ              (X       <                                 E   /  @  
 
- 	 l                                                                                                             SX       Ԁ                     <                                E   0  @  
+ 	 l                                                                                                             X       Ԁ                     <                                E   0  @  
 
- 	 l                                                                                                                    Ԁ              '       <                                E   0  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   0  @  
 
- 	 l                                                                                                                    Ԁ                     <                                 E   1  @  
+ 	 l                                                                                                                    Ԁ                     <                                 E   1  @  
 
- 	 l                                                                                                                     Ԁ              w       <                                 E   1  @  
+ 	 l                                                                                                                     Ԁ                     <                                 E   1  @  
 
- 	 l                                                                                                                    Ԁ              `       <                0                E   2  @  
+ 	 l                                                                                                             D       Ԁ              `       <                0                E   2  @  
 
- 	 l                                                                                                             p       Ԁ              ǡ       <                0                E   2  @  
+ 	 l                                                                                                             p       Ԁ              С       <                0                E   2  @  
 
- 	 l                                                                                                             C       Ԁ              d       <                @                E   3  @  
+ 	 l                                                                                                             L       Ԁ              d       <                @                E   3  @  
 
- 	 l                                                                                                             d       Ԁ              e       <                @                E   3  @  
+ 	 l                                                                                                             d       Ԁ              _e       <                @                E   3  @  
 
- 	 l                                                                                                             e       Ԁ              #j A   A                rE         $0H`lx X>rmesh       j A   A                jE         $0H`lx sErmesh        (	       <                P                E   4  @  
+ 	 l                                                                                                             e       Ԁ              #j A   A                rE         $0H`lx X>rmesh       j A   A                jE         $0H`lx sErmesh        (	       <                P                E   4  @  
 
- 	 l                                                                                                             (	       Ԁ              g(	       <                P                E   4  @  
+ 	 l                                                                                                             (	       Ԁ              (	       <                P                E   4  @  
 
- 	 l                                                                                                             (	       Ԁ              P	       <                `                E   5  @  
+ 	 l                                                                                                             O)	       Ԁ              P	       <                `                E   5  @  
 
  	 l                                                                                                             `	       Ԁ              	       <                `                E   5  @  
 
@@ -243,461 +242,463 @@
        <                p                E   6  @  
 
  	 l                                                                                                             
-       Ԁ              
+       Ԁ              
        <                p                E   6  @  
 
- 	 l                                                                                                             
+ 	 l                                                                                                             
        Ԁ              q       <                                E   7  @  
 
- 	 l                                                                                                              r       Ԁ              Wr       <                                E   7  @  
+ 	 l                                                                                                              r       Ԁ              {r       <                                E   7  @  
 
- 	 l                                                                                                             r       Ԁ              45       <                                E   8  @  
+ 	 l                                                                                                             r       Ԁ              45       <                                E   8  @  
 
- 	 l                                                                                                             D5       Ԁ              5       <                                E   8  @  
+ 	 l                                                                                                             D5       Ԁ              5       <                                E   8  @  
 
- 	 l                                                                                                             6       Ԁ                     <                                E   9  @  
+ 	 l                                                                                                             V6       Ԁ                     <                                E   9  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   9  @  
+ 	 l                                                                                                                    Ԁ              *       <                                E   9  @  
 
- 	 l                                                                                                             [       Ԁ              Ի       <                                E   :  @  
+ 	 l                                                                                                                    Ԁ              Ի       <                                E   :  @  
 
- 	 l                                                                                                                    Ԁ              ;       <                                E   :  @  
+ 	 l                                                                                                                    Ԁ              _       <                                E   :  @  
 
- 	 l                                                                                                                    Ԁ              $       <                                E   ;  @  
+ 	 l                                                                                                             ϼ       Ԁ              $       <                                E   ;  @  
 
- 	 l                                                                                                             4       Ԁ                     <                                E   ;  @  
+ 	 l                                                                                                             4       Ԁ                     <                                E   ;  @  
 
- 	 l                                                                                                                    Ԁ              4         <                                E   <  @  
+ 	 l                                                                                                                    Ԁ              4         <                                E   <  @  
 
- 	 l                                                                                                             D         Ԁ                       <                                E   <  @  
+ 	 l                                                                                                             D         Ԁ                       <                                E   <  @  
 
- 	 l                                                                                                                     Ԁ                      <                                E   =  @  
+ 	 l                                                                                                             /        Ԁ                      <                                E   =  @  
 
- 	 l                                                                                                                     Ԁ                      <                                E   =  @  
+ 	 l                                                                                                                     Ԁ              N        <                                E   =  @  
 
- 	 l                                                                                                             [        Ԁ                A   A                M         $0H`lx Ermesh       JO A   A                M         $0H`lx Mrmesh       Ԇ       <                                E   >  @  
+ 	 l                                                                                                                     Ԁ                A   A                M         $0H`lx Ermesh       JO A   A                M         $0H`lx Mrmesh       Ԇ       <                                E   >  @  
 
- 	 l                                                                                                                    Ԁ              ;       <                                E   >  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   >  @  
 
- 	 l                                                                                                                    Ԁ              $J       <                                 E   ?  @  
+ 	 l                                                                                                                    Ԁ              $J       <                                 E   ?  @  
 
- 	 l                                                                                                             4J       Ԁ              J       <                                 E   ?  @  
+ 	 l                                                                                                             4J       Ԁ              J       <                                 E   ?  @  
 
- 	 l                                                                                                             J       Ԁ              t       <                                E   @  @  
+ 	 l                                                                                                             CK       Ԁ              t       <                                E   @  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   @  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   @  @  
 
- 	 l                                                                                                             K       Ԁ                     <                                 E   A  @  
+ 	 l                                                                                                             x       Ԁ                     <                                 E   A  @  
 
- 	 l                                                                                                                    Ԁ              +       <                                 E   A  @  
+ 	 l                                                                                                                    Ԁ              |       <                                 E   A  @  
 
- 	 l                                                                                                                    Ԁ                     <                0                E   B  @  
+ 	 l                                                                                                                    Ԁ                     <                0                E   B  @  
 
- 	 l                                                                                                                     Ԁ              w       <                0                E   B  @  
+ 	 l                                                                                                                     Ԁ                     <                0                E   B  @  
 
- 	 l                                                                                                                    Ԁ              `W       <                @                E   C  @  
+ 	 l                                                                                                             \       Ԁ              `W       <                @                E   C  @  
 
- 	 l                                                                                                             pW       Ԁ              W       <                @                E   C  @  
+ 	 l                                                                                                             pW       Ԁ              W       <                @                E   C  @  
 
- 	 l                                                                                                             3X       Ԁ                     <                P                E   D  @  
+ 	 l                                                                                                             EX       Ԁ                     <                P                E   D  @  
 
- 	 l                                                                                                                    Ԁ                     <                P                E   D  @  
+ 	 l                                                                                                                    Ԁ                     <                P                E   D  @  
 
- 	 l                                                                                                                    Ԁ                      <                `                E   E  @  
+ 	 l                                                                                                                    Ԁ                      <                `                E   E  @  
 
- 	 l                                                                                                                    Ԁ              g       <                `                E   E  @  
+ 	 l                                                                                                                    Ԁ                     <                `                E   E  @  
 
- 	 l                                                                                                                    Ԁ              P       <                p                E   F  @  
+ 	 l                                                                                                             Q       Ԁ              P       <                p                E   F  @  
 
- 	 l                                                                                                             `       Ԁ                     <                p                E   F  @  
+ 	 l                                                                                                             `       Ԁ              #       <                p                E   F  @  
 
- 	 l                                                                                                             #       Ԁ              d       <                                E   G  @  
+ 	 l                                                                                                                    Ԁ              d       <                                E   G  @  
 
- 	 l                                                                                                             d       Ԁ              e       <                                E   G  @  
+ 	 l                                                                                                             d       Ԁ              =e       <                                E   G  @  
 
- 	 l                                                                                                             se       Ԁ              #j A   A                T         $0H`lx Mrmesh       j A   A                ;U         $0H`lx Trmesh       '	       <                                E   H  @  
+ 	 l                                                                                                             e       Ԁ              #j A   A                T         $0H`lx Mrmesh       j A   A                ;U         $0H`lx Trmesh       '	       <                                E   H  @  
 
- 	 l                                                                                                              (	       Ԁ              W(	       <                                E   H  @  
+ 	 l                                                                                                              (	       Ԁ              (	       <                                E   H  @  
 
- 	 l                                                                                                             (	       Ԁ              @	       <                                E   I  @  
+ 	 l                                                                                                             )	       Ԁ              @	       <                                E   I  @  
 
- 	 l                                                                                                             P	       Ԁ              	       <                                E   I  @  
+ 	 l                                                                                                             P	       Ԁ              	       <                                E   I  @  
 
- 	 l                                                                                                             	       Ԁ              
+ 	 l                                                                                                             I	       Ԁ              
        <                                E   J  @  
 
  	 l                                                                                                             
-       Ԁ              
+       Ԁ              ?
        <                                E   J  @  
 
- 	 l                                                                                                             c
+ 	 l                                                                                                             
        Ԁ              q       <                                E   K  @  
 
- 	 l                                                                                                             q       Ԁ              Gr       <                                E   K  @  
+ 	 l                                                                                                             q       Ԁ              r       <                                E   K  @  
 
- 	 l                                                                                                             r       Ԁ              05       <                                E   L  @  
+ 	 l                                                                                                             s       Ԁ              05       <                                E   L  @  
 
- 	 l                                                                                                             @5       Ԁ              5       <                                E   L  @  
+ 	 l                                                                                                             @5       Ԁ              5       <                                E   L  @  
 
- 	 l                                                                                                             6       Ԁ                     <                                E   M  @  
+ 	 l                                                                                                             6       Ԁ                     <                                E   M  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   M  @  
+ 	 l                                                                                                                    Ԁ              A       <                                E   M  @  
 
- 	 l                                                                                                             S       Ԁ              л       <                                E   N  @  
+ 	 l                                                                                                                    Ԁ              л       <                                E   N  @  
 
- 	 l                                                                                                                    Ԁ              7       <                                E   N  @  
+ 	 l                                                                                                                    Ԁ              R       <                                E   N  @  
 
- 	 l                                                                                                                    Ԁ                      <                                 E   O  @  
+ 	 l                                                                                                                    Ԁ                      <                                 E   O  @  
 
- 	 l                                                                                                             0       Ԁ                     <                                 E   O  @  
+ 	 l                                                                                                             0       Ԁ                     <                                 E   O  @  
 
- 	 l                                                                                                                    Ԁ              0         <                                E   P  @  
+ 	 l                                                                                                                    Ԁ              0         <                                E   P  @  
 
- 	 l                                                                                                             @         Ԁ                       <                                E   P  @  
+ 	 l                                                                                                             @         Ԁ                      <                                E   P  @  
 
- 	 l                                                                                                                     Ԁ                      <                                 E   Q  @  
+ 	 l                                                                                                             o        Ԁ                      <                                 E   Q  @  
 
  	 l                                                                                                                     Ԁ                      <                                 E   Q  @  
 
  	 l                                                                                                             S        Ԁ                A   A               V\         $0H`lx <Urmesh       JO A   A               \         $0H`lx V\rmesh       І       <                0                E   R  @  
 
- 	 l                                                                                                                    Ԁ              7       <                0                E   R  @  
+ 	 l                                                                                                                    Ԁ              @       <                0                E   R  @  
 
- 	 l                                                                                                                    Ԁ               J       <                @                E   S  @  
+ 	 l                                                                                                                    Ԁ               J       <                @                E   S  @  
 
- 	 l                                                                                                             0J       Ԁ              J       <                @                E   S  @  
+ 	 l                                                                                                             0J       Ԁ              J       <                @                E   S  @  
 
- 	 l                                                                                                             J       Ԁ              p       <                P                E   T  @  
+ 	 l                                                                                                             DK       Ԁ              p       <                P                E   T  @  
 
- 	 l                                                                                                                    Ԁ                     <                P                E   T  @  
+ 	 l                                                                                                                    Ԁ                     <                P                E   T  @  
 
- 	 l                                                                                                             C       Ԁ                     <                `                E   U  @  
+ 	 l                                                                                                             y       Ԁ                     <                `                E   U  @  
 
- 	 l                                                                                                                    Ԁ              '       <                `                E   U  @  
+ 	 l                                                                                                                    Ԁ              K       <                `                E   U  @  
 
- 	 l                                                                                                                    Ԁ                     <                p                E   V  @  
+ 	 l                                                                                                                    Ԁ                     <                p                E   V  @  
 
- 	 l                                                                                                                     Ԁ              w       <                p                E   V  @  
+ 	 l                                                                                                                     Ԁ                     <                p                E   V  @  
 
- 	 l                                                                                                                    Ԁ              `W       <                                E   W  @  
+ 	 l                                                                                                             X       Ԁ              `W       <                                E   W  @  
 
- 	 l                                                                                                             pW       Ԁ              W       <                                E   W  @  
+ 	 l                                                                                                             pW       Ԁ              W       <                                E   W  @  
 
- 	 l                                                                                                             3X       Ԁ                     <                                E   X  @  
+ 	 l                                                                                                             <X       Ԁ                     <                                E   X  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   X  @  
+ 	 l                                                                                                                    Ԁ              2       <                                E   X  @  
 
- 	 l                                                                                                                    Ԁ                      <                                E   Y  @  
+ 	 l                                                                                                                    Ԁ                      <                                E   Y  @  
 
- 	 l                                                                                                                    Ԁ              g       <                                E   Y  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   Y  @  
 
- 	 l                                                                                                                    Ԁ              P       <                                E   Z  @  
+ 	 l                                                                                                                    Ԁ              P       <                                E   Z  @  
 
- 	 l                                                                                                             `       Ԁ                     <                                E   Z  @  
+ 	 l                                                                                                             `       Ԁ                     <                                E   Z  @  
 
- 	 l                                                                                                             #       Ԁ              d       <                                E   [  @  
+ 	 l                                                                                                                    Ԁ              d       <                                E   [  @  
 
- 	 l                                                                                                             d       Ԁ              e       <                                E   [  @  
+ 	 l                                                                                                             d       Ԁ              "e       <                                E   [  @  
 
- 	 l                                                                                                             se       Ԁ              #j A   A                3c         $0H`lx \rmesh       j A   A                }d         $0H`lx crmesh       '	       <                                E   \  @  
+ 	 l                                                                                                             e       Ԁ              #j A   A                3c         $0H`lx \rmesh       j A   A                }d         $0H`lx crmesh       '	       <                                E   \  @  
 
- 	 l                                                                                                              (	       Ԁ              W(	       <                                E   \  @  
+ 	 l                                                                                                              (	       Ԁ              (	       <                                E   \  @  
 
- 	 l                                                                                                             (	       Ԁ              @	       <                                E   ]  @  
+ 	 l                                                                                                             )	       Ԁ              @	       <                                E   ]  @  
 
- 	 l                                                                                                             P	       Ԁ              	       <                                E   ]  @  
+ 	 l                                                                                                             P	       Ԁ              	       <                                E   ]  @  
 
- 	 l                                                                                                             	       Ԁ              
+ 	 l                                                                                                             7	       Ԁ              
        <                                E   ^  @  
 
  	 l                                                                                                             
-       Ԁ              
+       Ԁ              	
        <                                E   ^  @  
 
- 	 l                                                                                                             c
+ 	 l                                                                                                             u
        Ԁ              q       <                                 E   _  @  
 
  	 l                                                                                                             q       Ԁ              Gr       <                                 E   _  @  
 
  	 l                                                                                                             r       Ԁ              05       <                                E   `  @  
 
- 	 l                                                                                                             @5       Ԁ              5       <                                E   `  @  
+ 	 l                                                                                                             @5       Ԁ              5       <                                E   `  @  
 
- 	 l                                                                                                             6       Ԁ                     <                                 E   a  @  
+ 	 l                                                                                                             B6       Ԁ                     <                                 E   a  @  
 
- 	 l                                                                                                                    Ԁ                     <                                 E   a  @  
+ 	 l                                                                                                                    Ԁ              8       <                                 E   a  @  
 
- 	 l                                                                                                             S       Ԁ              л       <                0                E   b  @  
+ 	 l                                                                                                                    Ԁ              л       <                0                E   b  @  
 
- 	 l                                                                                                                    Ԁ              7       <                0                E   b  @  
+ 	 l                                                                                                                    Ԁ              m       <                0                E   b  @  
 
- 	 l                                                                                                                    Ԁ                      <                @                E   c  @  
+ 	 l                                                                                                             ټ       Ԁ                      <                @                E   c  @  
 
  	 l                                                                                                             0       Ԁ                     <                @                E   c  @  
 
  	 l                                                                                                                    Ԁ              0         <                P                E   d  @  
 
- 	 l                                                                                                             @         Ԁ                       <                P                E   d  @  
+ 	 l                                                                                                             @         Ԁ                       <                P                E   d  @  
 
- 	 l                                                                                                                     Ԁ                      <                `                E   e  @  
+ 	 l                                                                                                             f        Ԁ                      <                `                E   e  @  
 
- 	 l                                                                                                                     Ԁ                      <                `                E   e  @  
+ 	 l                                                                                                                     Ԁ              S        <                `                E   e  @  
 
- 	 l                                                                                                             S        Ԁ                A   A               0Sk         $0H`lx ~drmesh       JO A   A               0
+ 	 l                                                                                                                     Ԁ                A   A               0Sk         $0H`lx ~drmesh       JO A   A               0
 l         $0H`lx krmesh       І       <                p                E   f  @  
 
- 	 l                                                                                                                    Ԁ              7       <                p                E   f  @  
+ 	 l                                                                                                                    Ԁ                     <                p                E   f  @  
 
- 	 l                                                                                                                    Ԁ              dJ E   E   Ѐ            @%                                   J ?   ?   Ѐ<                @                                J       Ԁ              =K       <                                E   g  @  
+ 	 l                                                                                                                    Ԁ              dJ E   E   Ѐ            @%                                   J ?   ?   Ѐ<                @                                J       Ԁ              K       <                                E   g  @  
 
- 	 l                                                                                                             MK       Ԁ              K       <                                E   g  @  
+ 	 l                                                                                                             K       Ԁ              L       <                                E   g  @  
 
- 	 l                                                                                                             L       Ԁ              p       <                                E   h  @  
+ 	 l                                                                                                             M       Ԁ              p       <                                E   h  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   h  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   h  @  
 
- 	 l                                                                                                             C       Ԁ                     <                                E   i  @  
+ 	 l                                                                                                             y       Ԁ                     <                                E   i  @  
 
- 	 l                                                                                                                    Ԁ              '       <                                E   i  @  
+ 	 l                                                                                                                    Ԁ              x       <                                E   i  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   j  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   j  @  
 
- 	 l                                                                                                                     Ԁ              w       <                                E   j  @  
+ 	 l                                                                                                                     Ԁ                     <                                E   j  @  
 
- 	 l                                                                                                                    Ԁ              `W       <                                E   k  @  
+ 	 l                                                                                                             O       Ԁ              `W       <                                E   k  @  
 
- 	 l                                                                                                             pW       Ԁ              W       <                                E   k  @  
+ 	 l                                                                                                             pW       Ԁ              W       <                                E   k  @  
 
- 	 l                                                                                                             3X       Ԁ                     <                                E   l  @  
+ 	 l                                                                                                             WX       Ԁ                     <                                E   l  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   l  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   l  @  
 
- 	 l                                                                                                                    Ԁ                      <                                E   m  @  
+ 	 l                                                                                                             
+       Ԁ                      <                                E   m  @  
 
- 	 l                                                                                                                    Ԁ              g       <                                E   m  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   m  @  
 
- 	 l                                                                                                                    Ԁ              P       <                                E   n  @  
+ 	 l                                                                                                             -       Ԁ              P       <                                E   n  @  
 
- 	 l                                                                                                             `       Ԁ                     <                                E   n  @  
+ 	 l                                                                                                             `       Ԁ              >       <                                E   n  @  
 
- 	 l                                                                                                             #       Ԁ              d       <                                 E   o  @  
+ 	 l                                                                                                                    Ԁ              d       <                                 E   o  @  
 
- 	 l                                                                                                             d       Ԁ              e       <                                 E   o  @  
+ 	 l                                                                                                             d       Ԁ              e       <                                 E   o  @  
 
- 	 l                                                                                                             se       Ԁ              #j A   A               Ps9s         $0H`lx lrmesh       j A   A               P*s         $0H`lx 9srmesh       '	       <                                E   p  @  
+ 	 l                                                                                                             e       Ԁ              #j A   A               Ps9s         $0H`lx lrmesh       j A   A               P*s         $0H`lx 9srmesh       '	       <                                E   p  @  
 
- 	 l                                                                                                              (	       Ԁ              W(	       <                                E   p  @  
+ 	 l                                                                                                              (	       Ԁ              (	       <                                E   p  @  
 
- 	 l                                                                                                             (	       Ԁ              @	       <                                 E   q  @  
+ 	 l                                                                                                             (	       Ԁ              @	       <                                 E   q  @  
 
- 	 l                                                                                                             P	       Ԁ              	       <                                 E   q  @  
+ 	 l                                                                                                             P	       Ԁ              	       <                                 E   q  @  
 
- 	 l                                                                                                             	       Ԁ              
+ 	 l                                                                                                             	       Ԁ              
        <                0                E   r  @  
 
  	 l                                                                                                             
-       Ԁ              
+       Ԁ              
        <                0                E   r  @  
 
- 	 l                                                                                                             c
+ 	 l                                                                                                             
        Ԁ              q       <                @                E   s  @  
 
- 	 l                                                                                                             q       Ԁ              Gr       <                @                E   s  @  
+ 	 l                                                                                                             q       Ԁ              r       <                @                E   s  @  
 
- 	 l                                                                                                             r       Ԁ              05       <                P                E   t  @  
+ 	 l                                                                                                             s       Ԁ              05       <                P                E   t  @  
 
- 	 l                                                                                                             @5       Ԁ              5       <                P                E   t  @  
+ 	 l                                                                                                             @5       Ԁ              5       <                P                E   t  @  
 
- 	 l                                                                                                             6       Ԁ                     <                `                E   u  @  
+ 	 l                                                                                                             '6       Ԁ                     <                `                E   u  @  
 
- 	 l                                                                                                                    Ԁ                     <                `                E   u  @  
+ 	 l                                                                                                                    Ԁ              S       <                `                E   u  @  
 
- 	 l                                                                                                             S       Ԁ              л       <                p                E   v  @  
+ 	 l                                                                                                                    Ԁ              л       <                p                E   v  @  
 
- 	 l                                                                                                                    Ԁ              7       <                p                E   v  @  
+ 	 l                                                                                                                    Ԁ                     <                p                E   v  @  
 
- 	 l                                                                                                                    Ԁ                      <                                E   w  @  
+ 	 l                                                                                                             *       Ԁ                      <                                E   w  @  
 
- 	 l                                                                                                             0       Ԁ                     <                                E   w  @  
+ 	 l                                                                                                             0       Ԁ                     <                                E   w  @  
 
- 	 l                                                                                                                    Ԁ              0         <                                E   x  @  
+ 	 l                                                                                                             V       Ԁ              0         <                                E   x  @  
 
- 	 l                                                                                                             @         Ԁ                       <                                E   x  @  
+ 	 l                                                                                                             @         Ԁ                      <                                E   x  @  
 
- 	 l                                                                                                                     Ԁ                      <                                E   y  @  
+ 	 l                                                                                                                     Ԁ                      <                                E   y  @  
 
- 	 l                                                                                                                     Ԁ                      <                                E   y  @  
+ 	 l                                                                                                                     Ԁ              A        <                                E   y  @  
 
- 	 l                                                                                                             S        Ԁ                A   A               `z         $0H`lx srmesh       JO A   A               `Ja{         $0H`lx zrmesh       І       <                                E   z  @  
+ 	 l                                                                                                                     Ԁ                A   A               `z         $0H`lx srmesh       JO A   A               `Ja{         $0H`lx zrmesh       І       <                                E   z  @  
 
- 	 l                                                                                                                    Ԁ              7       <                                E   z  @  
+ 	 l                                                                                                                    Ԁ              d       <                                E   z  @  
 
- 	 l                                                                                                                    Ԁ               J       <                                E   {  @  
+ 	 l                                                                                                             Ї       Ԁ               J       <                                E   {  @  
 
- 	 l                                                                                                             0J       Ԁ              J       <                                E   {  @  
+ 	 l                                                                                                             0J       Ԁ              J       <                                E   {  @  
 
- 	 l                                                                                                             J       Ԁ              p       <                                E   |  @  
+ 	 l                                                                                                             2K       Ԁ              p       <                                E   |  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   |  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   |  @  
 
- 	 l                                                                                                             C       Ԁ                     <                                E   }  @  
+ 	 l                                                                                                             g       Ԁ                     <                                E   }  @  
 
- 	 l                                                                                                                    Ԁ              '       <                                E   }  @  
+ 	 l                                                                                                                    Ԁ              9       <                                E   }  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   ~  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   ~  @  
 
  	 l                                                                                                                     Ԁ              w       <                                E   ~  @  
 
  	 l                                                                                                                    Ԁ              `W       <                                 E     @  
 
- 	 l                                                                                                             pW       Ԁ              W       <                                 E     @  
+ 	 l                                                                                                             pW       Ԁ              X       <                                 E     @  
 
- 	 l                                                                                                             3X       Ԁ                     <                                E     @  
+ 	 l                                                                                                             rX       Ԁ                     <                                E     @  
 
- 	 l                                                                                                                    Ԁ                     <                                E     @  
+ 	 l                                                                                                                    Ԁ              q       <                                E     @  
 
- 	 l                                                                                                                    Ԁ                      <                                 E     @  
+ 	 l                                                                                                                    Ԁ                      <                                 E     @  
 
- 	 l                                                                                                                    Ԁ              g       <                                 E     @  
+ 	 l                                                                                                                    Ԁ                     <                                 E     @  
 
- 	 l                                                                                                                    Ԁ              P       <                0                E     @  
+ 	 l                                                                                                                     Ԁ              P       <                0                E     @  
 
- 	 l                                                                                                             `       Ԁ                     <                0                E     @  
+ 	 l                                                                                                             `       Ԁ              ɡ       <                0                E     @  
 
- 	 l                                                                                                             #       Ԁ              d       <                @                E     @  
+ 	 l                                                                                                             5       Ԁ              d       <                @                E     @  
 
- 	 l                                                                                                             d       Ԁ              e       <                @                E     @  
+ 	 l                                                                                                             d       Ԁ              |e       <                @                E     @  
 
- 	 l                                                                                                             se       Ԁ              #j A   A               p{         $0H`lx a{rmesh       j A   A               pj         $0H`lx |rmesh       '	       <                P                E     @  
+ 	 l                                                                                                             e       Ԁ              #j A   A               p{         $0H`lx a{rmesh       j A   A               pj         $0H`lx |rmesh       '	       <                P                E     @  
 
- 	 l                                                                                                              (	       Ԁ              W(	       <                P                E     @  
+ 	 l                                                                                                              (	       Ԁ              (	       <                P                E     @  
 
- 	 l                                                                                                             (	       Ԁ              @	       <                `                E     @  
+ 	 l                                                                                                             /)	       Ԁ              @	       <                `                E     @  
 
- 	 l                                                                                                             P	       Ԁ              	       <                `                E     @  
+ 	 l                                                                                                             P	       Ԁ              .	       <                `                E     @  
 
- 	 l                                                                                                             	       Ԁ              
+ 	 l                                                                                                             	       Ԁ              
        <                p                E     @  
 
  	 l                                                                                                             
-       Ԁ              
+       Ԁ              l
        <                p                E     @  
 
- 	 l                                                                                                             c
+ 	 l                                                                                                             د
        Ԁ              q       <                                E     @  
 
- 	 l                                                                                                             q       Ԁ              Gr       <                                E     @  
+ 	 l                                                                                                             q       Ԁ              kr       <                                E     @  
 
- 	 l                                                                                                             r       Ԁ              05       <                                E     @  
+ 	 l                                                                                                             r       Ԁ              05       <                                E     @  
 
- 	 l                                                                                                             @5       Ԁ              5       <                                E     @  
+ 	 l                                                                                                             @5       Ԁ              6       <                                E     @  
 
- 	 l                                                                                                             6       Ԁ                     <                                E     @  
+ 	 l                                                                                                             x6       Ԁ                     <                                E     @  
 
- 	 l                                                                                                                    Ԁ                     <                                E     @  
+ 	 l                                                                                                                    Ԁ                     <                                E     @  
 
- 	 l                                                                                                             S       Ԁ              л       <                                E     @  
+ 	 l                                                                                                                    Ԁ              л       <                                E     @  
 
- 	 l                                                                                                                    Ԁ              7       <                                E     @  
+ 	 l                                                                                                                    Ԁ                     <                                E     @  
 
- 	 l                                                                                                                    Ԁ                      <                                E     @  
+ 	 l                                                                                                                    Ԁ                      <                                E     @  
 
- 	 l                                                                                                             0       Ԁ                     <                                E     @  
+ 	 l                                                                                                             0       Ԁ                     <                                E     @  
 
- 	 l                                                                                                                    Ԁ           	   0         <                                E     @  
+ 	 l                                                                                                             h       Ԁ           	   0         <                                E     @  
 
- 	 l                                                                                                          	   @         Ԁ           	            <                                E     @  
+ 	 l                                                                                                          	   @         Ԁ           	            <                                E     @  
 
- 	 l                                                                                                          	           Ԁ           	           <                                E     @  
+ 	 l                                                                                                          	   '        Ԁ           	           <                                E     @  
 
- 	 l                                                                                                          	           Ԁ           	           <                                E     @  
+ 	 l                                                                                                          	           Ԁ           	   e        <                                E     @  
 
- 	 l                                                                                                          	   S        Ԁ           	     A   A                        $0H`lx rmesh    	   JO A   A                        $0H`lx rmesh    	   І       <                                E     @  
+ 	 l                                                                                                          	           Ԁ           	     A   A                        $0H`lx rmesh    	   JO A   A                        $0H`lx rmesh    	   І       <                                E     @  
 
- 	 l                                                                                                          	          Ԁ           	   7       <                                E     @  
+ 	 l                                                                                                          	          Ԁ           	          <                                E     @  
 
- 	 l                                                                                                          	          Ԁ           	    J       <                 	                E     @  
+ 	 l                                                                                                          	   *       Ԁ           	    J       <                 	                E     @  
 
- 	 l                                                                                                          	   0J       Ԁ           	   J       <                 	                E     @  
+ 	 l                                                                                                          	   0J       Ԁ           	   K       <                 	                E     @  
 
- 	 l                                                                                                          	   J       Ԁ           	   p       <                	                E     @  
+ 	 l                                                                                                          	   qK       Ԁ           	   p       <                	                E     @  
 
- 	 l                                                                                                          	          Ԁ           	          <                	                E     @  
+ 	 l                                                                                                          	          Ԁ           	   (       <                	                E     @  
 
- 	 l                                                                                                          	   C       Ԁ           	          <                 	                E     @  
+ 	 l                                                                                                          	          Ԁ           	          <                 	                E     @  
 
- 	 l                                                                                                          	          Ԁ           	   '       <                 	                E     @  
+ 	 l                                                                                                          	          Ԁ           	   9       <                 	                E     @  
 
- 	 l                                                                                                          	          Ԁ           	          <                0	                E     @  
+ 	 l                                                                                                          	          Ԁ           	          <                0	                E     @  
 
- 	 l                                                                                                          	           Ԁ           	   w       <                0	                E     @  
+ 	 l                                                                                                          	           Ԁ           	          <                0	                E     @  
 
- 	 l                                                                                                          	          Ԁ           	   `W       <                @	                E     @  
+ 	 l                                                                                                          	          Ԁ           	   `W       <                @	                E     @  
 
- 	 l                                                                                                          	   pW       Ԁ           	   W       <                @	                E     @  
+ 	 l                                                                                                          	   pW       Ԁ           	   X       <                @	                E     @  
 
- 	 l                                                                                                          	   3X       Ԁ           	          <                P	                E     @  
+ 	 l                                                                                                          	   rX       Ԁ           	          <                P	                E     @  
 
- 	 l                                                                                                          	          Ԁ           	          <                P	                E     @  
+ 	 l                                                                                                          	          Ԁ           	   M       <                P	                E     @  
 
- 	 l                                                                                                          	          Ԁ           	           <                `	                E     @  
+ 	 l                                                                                                          	          Ԁ           	           <                `	                E     @  
 
- 	 l                                                                                                          	          Ԁ           	   g       <                `	                E     @  
+ 	 l                                                                                                          	          Ԁ           	          <                `	                E     @  
 
- 	 l                                                                                                          	          Ԁ           	   P       <                p	                E     @  
+ 	 l                                                                                                          	          Ԁ           	   P       <                p	                E     @  
 
- 	 l                                                                                                          	   `       Ԁ           	          <                p	                E     @  
+ 	 l                                                                                                          	   `       Ԁ           	   ҡ       <                p	                E     @  
 
- 	 l                                                                                                          	   #       Ԁ           	   d       <                	                E     @  
+ 	 l                                                                                                          	   >       Ԁ           	   d       <                	                E     @  
 
- 	 l                                                                                                          	   d       Ԁ           	   e       <                	                E     @  
+ 	 l                                                                                                          	   d       Ԁ           	   e       <                	                E     @  
 
- 	 l                                                                                                          	   se       Ԁ           	   #j A   A                        $0H`lx rmesh    	   j A   A               D         $0H`lx rmesh    	   '	       <                	                E     @  
+ 	 l                                                                                                          	   |e       Ԁ           	   #j A   A                        $0H`lx rmesh    	   j A   A               D         $0H`lx rmesh    	   '	       <                	                E     @  
 
- 	 l                                                                                                          	    (	       Ԁ           	   W(	       <                	                E     @  
+ 	 l                                                                                                          	    (	       Ԁ           	   (	       <                	                E     @  
 
- 	 l                                                                                                          	   (	       Ԁ           	   @	       <                	                E     @  
+ 	 l                                                                                                          	   J)	       Ԁ           	   @	       <                	                E     @  
 
- 	 l                                                                                                          	   P	       Ԁ           	   	       <                	                E     @  
+ 	 l                                                                                                          	   P	       Ԁ           	   
+	       <                	                E     @  
 
- 	 l                                                                                                          	   	       Ԁ           	   
+ 	 l                                                                                                          	   v	       Ԁ           	   
        <                	                E     @  
 
  	 l                                                                                                          	   
-       Ԁ           	   
+       Ԁ           	   Q
        <                	                E     @  
 
- 	 l                                                                                                          	   c
+ 	 l                                                                                                          	   
        Ԁ           	   q       <                	                E     @  
 
- 	 l                                                                                                          	   q       Ԁ           	   Gr       <                	                E     @  
+ 	 l                                                                                                          	   q       Ԁ           	   r       <                	                E     @  
 
- 	 l                                                                                                          	   r       Ԁ           	   05       <                	                E     @  
+ 	 l                                                                                                          	   :s       Ԁ           	   05       <                	                E     @  
 
- 	 l                                                                                                          	   @5       Ԁ           	   5       <                	                E     @  
+ 	 l                                                                                                          	   @5       Ԁ           	   6       <                	                E     @  
 
- 	 l                                                                                                          	   6       Ԁ           	          <                	                E     @  
+ 	 l                                                                                                          	   x6       Ԁ           	          <                	                E     @  
 
- 	 l                                                                                                          	          Ԁ           	          <                	                E     @  
+ 	 l                                                                                                          	          Ԁ           	   &       <                	                E     @  
 
- 	 l                                                                                                          	   S       Ԁ           	   л       <                	                E     @  
+ 	 l                                                                                                          	          Ԁ           	   л       <                	                E     @  
 
- 	 l                                                                                                          	          Ԁ           	   7       <                	                E     @  
+ 	 l                                                                                                          	          Ԁ           	   @       <                	                E     @  
 
- 	 l                                                                                                          	          Ԁ           	           <                 
+ 	 l                                                                                                          	          Ԁ           	           <                 
                 E     @  
 
- 	 l                                                                                                          	   0       Ԁ           	          <                 
+ 	 l                                                                                                          	   0       Ԁ           	          <                 
                 E     @  
 
- 	 l                                                                                                          	          Ԁ           
+ 	 l                                                                                                          	   q       Ԁ           
    JO A   A                        $0H`lx rmesh    
    g -   -   Ѐ<                rmeshu  4     
-   h -   -   Ј<                rmeshu  4     
+   h -   -   Ј<                rmeshu  4     
    ai -   -   Ј<                rmeshu  4     
-    j -   -   Ј<                rmeshu  4     
-   j -   -   Ј<                rmeshu  4     
-   k -   -   Ј<                rmeshu  4     
-   Sl -   -   Ј<                rmeshu  4     
+   j -   -   Ј<                rmeshu  4     
+   j -   -   Ј<                rmeshu  4     
+   6k -   -   Ј<                rmeshu  4     
+   l -   -   Ј<                rmeshu  4     
    j A   A               ꆡ         $0H`lx rmesh       J/ <   <               
          $0H`lx rmesh       j <   <               *Ѱ         $0H`lx rmesh       J7 <   <               JR         $0H`lx rmesh       j <   <                j߿         $0H`lx rmesh       J  <   <               H         $0H`lx rmesh       j <   <                         $0H`lx rmesh       J  <   <               0ʒ         $0H`lx rmesh       j <   <               @K         $0H`lx rmesh    
\ No newline at end of file
diff -Naur ns-3.25/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap ns-3.26/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	2016-10-03 20:57:08.362246739 -0700
+++ ns-3.26/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap	2016-10-03 19:49:01.667387504 -0700
@@ -1,144 +1,144 @@
-ò            i         <   <                           $0H`lx rmesh          >   >   Ѐ<                    $0H`lrmeshq   9u                 Ԁ                 <   <   Ѐ<                     $0H`lq   9u                  Ԁ                 >   >   Ѐ<                    $0H`lrmeshq   9u         g        Ԁ                 <   <   Ѐ<                     $0H`lq  9u                  Ԁ               O A   A                 JO         $0H`lx  rmesh        i A   A               0 i         $0H`lx Ormesh         A   A               0 j         $0H`lx jrmesh         A   A               @ 
+ò            i         <   <                           $0H`lx rmesh          >   >   Ѐ<                    $0H`lrmeshq   9u                 Ԁ                 <   <   Ѐ<                     $0H`lq   9u                  Ԁ                 >   >   Ѐ<                    $0H`lrmeshq   9u                 Ԁ               0  <   <   Ѐ<                     $0H`lq  9u          @        Ԁ               O A   A                 JO         $0H`lx  rmesh        i A   A               0 i         $0H`lx Ormesh         A   A               0 j         $0H`lx jrmesh         A   A               @ 
          $0H`lx rmesh       O A   A               @          $0H`lx rmesh       i A   A               P          $0H`lx rmesh        A   A               P 2         $0H`lx rmesh       (#  N   N          `                       
 
        S$  N   N          `                      
 
-       %  E   E   Ѐ            p %                                    8%  ?   ?   Ѐ<                p                                 %        Ԁ              &  N   N   <                                         
+       %  E   E   Ѐ            p %                                    %  ?   ?   Ѐ<                p                                 g&        Ԁ              '  N   N   <                                         
      
-       &        Ԁ              &        <                                  E      @  
+       '        Ԁ              Q(        <                                  E      @  
 
- 	 l                                                                                                             6(        Ԁ              K  N   N                                 
+ 	 l                                                                                                             )        Ԁ              M  N   N                                 
 
-       K  N   N   <                                        
+       YM  N   N   <                                        
      
-       L        Ԁ              L  N   N                                
+       N        Ԁ              RN  N   N                                
 
-       N        <                                 E      @  
+       ;P        <                                 E      @  
 
- 	 l                                                                                                             N        Ԁ              P        <                                  E     @  
+ 	 l                                                                                                             KP        Ԁ              P        <                                  E     @  
 
- 	 l                                                                                                                     Ԁ                      <                                  E     @  
+ 	 l                                                                                                                     Ԁ              !        <                                  E     @  
 
- 	 l                                                                                                                     Ԁ                A   A                M         $0H`lx 3rmesh       O A   A                         $0H`lx Mrmesh              <                0                 E     @  
+ 	 l                                                                                                             1        Ԁ                A   A                M         $0H`lx 3rmesh       O A   A                         $0H`lx Mrmesh              <                0                 E     @  
 
- 	 l                                                                                                                    Ԁ                     <                0                 E     @  
+ 	 l                                                                                                                    Ԁ              )       <                0                 E     @  
 
- 	 l                                                                                                             '       Ԁ              I       <                @                 E     @  
+ 	 l                                                                                                             9       Ԁ              I       <                @                 E     @  
 
- 	 l                                                                                                             4K       Ԁ              gL       <                @                 E     @  
+ 	 l                                                                                                             4K       Ԁ              L       <                @                 E     @  
 
- 	 l                                                                                                             wL       Ԁ              @       <                P                 E     @  
+ 	 l                                                                                                             L       Ԁ              @       <                P                 E     @  
 
- 	 l                                                                                                                    Ԁ                     <                P                 E     @  
+ 	 l                                                                                                                    Ԁ                     <                P                 E     @  
 
- 	 l                                                                                                                    Ԁ                     <                `                 E     @  
+ 	 l                                                                                                                    Ԁ                     <                `                 E     @  
 
- 	 l                                                                                                                    Ԁ                     <                `                 E     @  
+ 	 l                                                                                                                    Ԁ                     <                `                 E     @  
 
- 	 l                                                                                                                    Ԁ                     <                p                 E     @  
+ 	 l                                                                                                                    Ԁ                     <                p                 E     @  
 
- 	 l                                                                                                             Ԕ       Ԁ                     <                p                 E     @  
+ 	 l                                                                                                             Ԕ       Ԁ              j       <                p                 E     @  
 
- 	 l                                                                                                                    Ԁ              0W       <                                 E     @  
+ 	 l                                                                                                             z       Ԁ              0W       <                                 E     @  
 
- 	 l                                                                                                             $X       Ԁ              Y       <                                 E     @  
+ 	 l                                                                                                             $X       Ԁ              Y       <                                 E     @  
 
- 	 l                                                                                                             Y       Ԁ                     <                                 E     @  
+ 	 l                                                                                                              Y       Ԁ                     <                                 E     @  
 
- 	 l                                                                                                             t       Ԁ              W       <                                 E     @  
+ 	 l                                                                                                             t       Ԁ                     <                                 E     @  
 
- 	 l                                                                                                             g       Ԁ                     <                                 E   	  @  
+ 	 l                                                                                                                    Ԁ                     <                                 E   	  @  
 
- 	 l                                                                                                                    Ԁ                     <                                 E   	  @  
+ 	 l                                                                                                                    Ԁ                     <                                 E   	  @  
 
- 	 l                                                                                                                    Ԁ                      <                                 E   
+ 	 l                                                                                                             ,       Ԁ                      <                                 E   
   @  
 
- 	 l                                                                                                                    Ԁ                     <                                 E   
+ 	 l                                                                                                                    Ԁ              H       <                                 E   
   @  
 
- 	 l                                                                                                                    Ԁ              pd       <                                 E     @  
+ 	 l                                                                                                             X       Ԁ              pd       <                                 E     @  
 
- 	 l                                                                                                             de       Ԁ              Gf       <                                 E     @  
+ 	 l                                                                                                             de       Ԁ              f       <                                 E     @  
 
- 	 l                                                                                                             Wf       Ԁ              i A   A                3&         $0H`lx rmesh        A   A                t'         $0H`lx &rmesh       '	       <                                 E     @  
+ 	 l                                                                                                             f       Ԁ              i A   A                3&         $0H`lx rmesh        A   A                t'         $0H`lx &rmesh       '	       <                                 E     @  
 
- 	 l                                                                                                             (	       Ԁ              )	       <                                 E     @  
+ 	 l                                                                                                             (	       Ԁ              )	       <                                 E     @  
 
- 	 l                                                                                                             )	       Ԁ              	       <                                 E     @  
+ 	 l                                                                                                             )	       Ԁ              	       <                                 E     @  
 
- 	 l                                                                                                             	       Ԁ              	       <                                 E     @  
+ 	 l                                                                                                             	       Ԁ              e	       <                                 E     @  
 
- 	 l                                                                                                             	       Ԁ              `
+ 	 l                                                                                                             u	       Ԁ              `
        <                                 E     @  
 
  	 l                                                                                                             T
-       Ԁ              7
+       Ԁ              v
        <                                 E     @  
 
- 	 l                                                                                                             G
+ 	 l                                                                                                             
        Ԁ              q       <                                 E     @  
 
- 	 l                                                                                                             r       Ԁ              s       <                                 E     @  
+ 	 l                                                                                                             r       Ԁ              s       <                                 E     @  
 
- 	 l                                                                                                             s       Ԁ               5       <                                E     @  
+ 	 l                                                                                                             s       Ԁ               5       <                                E     @  
 
- 	 l                                                                                                             5       Ԁ              6       <                                E     @  
+ 	 l                                                                                                             5       Ԁ              7       <                                E     @  
 
- 	 l                                                                                                             6       Ԁ              P       <                                 E     @  
+ 	 l                                                                                                             +7       Ԁ              P       <                                 E     @  
 
- 	 l                                                                                                                    Ԁ                     <                                 E     @  
+ 	 l                                                                                                                    Ԁ              C       <                                 E     @  
 
- 	 l                                                                                                                    Ԁ                     <                0                E     @  
+ 	 l                                                                                                             S       Ԁ                     <                0                E     @  
 
- 	 l                                                                                                             l       Ԁ              '       <                0                E     @  
+ 	 l                                                                                                             l       Ԁ                     <                0                E     @  
 
- 	 l                                                                                                             7       Ԁ              ~       <                @                E     @  
+ 	 l                                                                                                                    Ԁ              ~       <                @                E     @  
 
- 	 l                                                                                                                    Ԁ              w       <                @                E     @  
+ 	 l                                                                                                                    Ԁ                     <                @                E     @  
 
- 	 l                                                                                                                    Ԁ                        <                P                E     @  
+ 	 l                                                                                                                    Ԁ                        <                P                E     @  
 
- 	 l                                                                                                                      Ԁ                      <                P                E     @  
+ 	 l                                                                                                                      Ԁ                      <                P                E     @  
 
- 	 l                                                                                                                     Ԁ              P        <                `                E     @  
+ 	 l                                                                                                                     Ԁ              P        <                `                E     @  
 
- 	 l                                                                                                                     Ԁ                      <                `                E     @  
+ 	 l                                                                                                                     Ԁ                      <                `                E     @  
 
- 	 l                                                                                                                     Ԁ                A   A                S.         $0H`lx u'rmesh       O A   A                
+ 	 l                                                                                                             &        Ԁ                A   A                S.         $0H`lx u'rmesh       O A   A                
 /         $0H`lx .rmesh              <                p                E     @  
 
- 	 l                                                                                                             l       Ԁ              '       <                p                E     @  
+ 	 l                                                                                                             l       Ԁ              B       <                p                E     @  
 
- 	 l                                                                                                             7       Ԁ              I       <                                E     @  
+ 	 l                                                                                                             R       Ԁ              I       <                                E     @  
 
- 	 l                                                                                                             J       Ԁ              wK       <                                E     @  
+ 	 l                                                                                                             J       Ԁ              K       <                                E     @  
 
- 	 l                                                                                                             K       Ԁ              @       <                                E     @  
+ 	 l                                                                                                             K       Ԁ              @       <                                E     @  
 
- 	 l                                                                                                                    Ԁ                     <                                E     @  
+ 	 l                                                                                                                    Ԁ                     <                                E     @  
 
- 	 l                                                                                                                    Ԁ                     <                                E     @  
+ 	 l                                                                                                                    Ԁ                     <                                E     @  
 
- 	 l                                                                                                             \       Ԁ                     <                                E     @  
+ 	 l                                                                                                             \       Ԁ              z       <                                E     @  
 
- 	 l                                                                                                             '       Ԁ                     <                                E     @  
+ 	 l                                                                                                                    Ԁ                     <                                E     @  
 
- 	 l                                                                                                                    Ԁ              ?       <                                E     @  
+ 	 l                                                                                                                    Ԁ              l       <                                E     @  
 
- 	 l                                                                                                             O       Ԁ              0W       <                                E     @  
+ 	 l                                                                                                             |       Ԁ              0W       <                                E     @  
 
- 	 l                                                                                                             W       Ԁ              gX       <                                E     @  
+ 	 l                                                                                                             W       Ԁ              X       <                                E     @  
 
- 	 l                                                                                                             wX       Ԁ                     <                                E     @  
+ 	 l                                                                                                             X       Ԁ                     <                                E     @  
 
- 	 l                                                                                                             $       Ԁ                     <                                E     @  
+ 	 l                                                                                                             $       Ԁ              ,       <                                E     @  
 
- 	 l                                                                                                                    Ԁ                     <                                E     @  
+ 	 l                                                                                                             <       Ԁ                     <                                E     @  
 
- 	 l                                                                                                             t       Ԁ                     <                                E     @  
+ 	 l                                                                                                             t       Ԁ              O       <                                E     @  
 
- 	 l                                                                                                                    Ԁ                      <                                E     @  
+ 	 l                                                                                                             _       Ԁ                      <                                E     @  
 
  	 l                                                                                                             ġ       Ԁ              W       <                                E     @  
 
@@ -148,93 +148,93 @@
 
  	 l                                                                                                             e       Ԁ              i A   A                s06         $0H`lx /rmesh        A   A                *6         $0H`lx 06rmesh       '	       <                                E      @  
 
- 	 l                                                                                                             d(	       Ԁ              (	       <                                E      @  
+ 	 l                                                                                                             d(	       Ԁ               )	       <                                E      @  
 
- 	 l                                                                                                             )	       Ԁ              	       <                                 E   !  @  
+ 	 l                                                                                                             )	       Ԁ              	       <                                 E   !  @  
 
- 	 l                                                                                                             	       Ԁ              G	       <                                 E   !  @  
+ 	 l                                                                                                             	       Ԁ              	       <                                 E   !  @  
 
- 	 l                                                                                                             W	       Ԁ              `
+ 	 l                                                                                                             	       Ԁ              `
        <                0                E   "  @  
 
  	 l                                                                                                             
-       Ԁ              
+       Ԁ              
        <                0                E   "  @  
 
- 	 l                                                                                                             
+ 	 l                                                                                                             %
        Ԁ              q       <                @                E   #  @  
 
  	 l                                                                                                             Tr       Ԁ              r       <                @                E   #  @  
 
  	 l                                                                                                             r       Ԁ               5       <                P                E   $  @  
 
- 	 l                                                                                                             5       Ԁ              #6       <                P                E   $  @  
+ 	 l                                                                                                             5       Ԁ              56       <                P                E   $  @  
 
- 	 l                                                                                                             36       Ԁ              P       <                `                E   %  @  
+ 	 l                                                                                                             E6       Ԁ              P       <                `                E   %  @  
 
- 	 l                                                                                                                    Ԁ              _       <                `                E   %  @  
+ 	 l                                                                                                                    Ԁ                     <                `                E   %  @  
 
- 	 l                                                                                                             o       Ԁ                     <                p                E   &  @  
+ 	 l                                                                                                                    Ԁ                     <                p                E   &  @  
 
- 	 l                                                                                                             0       Ԁ                     <                p                E   &  @  
+ 	 l                                                                                                             0       Ԁ              ܼ       <                p                E   &  @  
 
- 	 l                                                                                                                    Ԁ              ~       <                                E   '  @  
+ 	 l                                                                                                                    Ԁ              ~       <                                E   '  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   '  @  
+ 	 l                                                                                                                    Ԁ              P       <                                E   '  @  
 
- 	 l                                                                                                                    Ԁ                        <                                E   (  @  
+ 	 l                                                                                                             `       Ԁ                        <                                E   (  @  
 
- 	 l                                                                                                                      Ԁ                      <                                E   (  @  
+ 	 l                                                                                                                      Ԁ                      <                                E   (  @  
 
- 	 l                                                                                                                     Ԁ              P        <                                E   )  @  
+ 	 l                                                                                                                     Ԁ              P        <                                E   )  @  
 
- 	 l                                                                                                                     Ԁ              _        <                                E   )  @  
+ 	 l                                                                                                                     Ԁ              z        <                                E   )  @  
 
- 	 l                                                                                                             o        Ԁ                A   A                =         $0H`lx 6rmesh       O A   A                JX>         $0H`lx =rmesh              <                                E   *  @  
+ 	 l                                                                                                                     Ԁ                A   A                =         $0H`lx 6rmesh       O A   A                JX>         $0H`lx =rmesh              <                                E   *  @  
 
- 	 l                                                                                                             0       Ԁ                     <                                E   *  @  
+ 	 l                                                                                                             0       Ԁ                     <                                E   *  @  
 
- 	 l                                                                                                                    Ԁ              I       <                                E   +  @  
+ 	 l                                                                                                             +       Ԁ              I       <                                E   +  @  
 
- 	 l                                                                                                             J       Ԁ              J       <                                E   +  @  
+ 	 l                                                                                                             J       Ԁ              K       <                                E   +  @  
 
- 	 l                                                                                                             K       Ԁ              @       <                                E   ,  @  
+ 	 l                                                                                                             *K       Ԁ              @       <                                E   ,  @  
 
- 	 l                                                                                                                    Ԁ              O       <                                E   ,  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   ,  @  
 
- 	 l                                                                                                             _       Ԁ                     <                                E   -  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   -  @  
 
- 	 l                                                                                                                     Ԁ                     <                                E   -  @  
+ 	 l                                                                                                                     Ԁ                     <                                E   -  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   .  @  
+ 	 l                                                                                                             	       Ԁ                     <                                E   .  @  
 
- 	 l                                                                                                             \       Ԁ              ۔       <                                E   .  @  
+ 	 l                                                                                                             \       Ԁ              b       <                                E   .  @  
 
- 	 l                                                                                                                    Ԁ              0W       <                                 E   /  @  
+ 	 l                                                                                                             r       Ԁ              0W       <                                 E   /  @  
 
- 	 l                                                                                                             W       Ԁ              X       <                                 E   /  @  
+ 	 l                                                                                                             W       Ԁ              hX       <                                 E   /  @  
 
- 	 l                                                                                                             'X       Ԁ                     <                                E   0  @  
+ 	 l                                                                                                             xX       Ԁ                     <                                E   0  @  
 
- 	 l                                                                                                                    Ԁ              g       <                                E   0  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   0  @  
 
- 	 l                                                                                                             w       Ԁ                     <                                 E   1  @  
+ 	 l                                                                                                                    Ԁ                     <                                 E   1  @  
 
- 	 l                                                                                                             L       Ԁ                     <                                 E   1  @  
+ 	 l                                                                                                             L       Ԁ                     <                                 E   1  @  
 
- 	 l                                                                                                                    Ԁ                      <                0                E   2  @  
+ 	 l                                                                                                                    Ԁ                      <                0                E   2  @  
 
- 	 l                                                                                                                    Ԁ                     <                0                E   2  @  
+ 	 l                                                                                                                    Ԁ                     <                0                E   2  @  
 
- 	 l                                                                                                                    Ԁ              pd       <                @                E   3  @  
+ 	 l                                                                                                                     Ԁ              pd       <                @                E   3  @  
 
- 	 l                                                                                                             d       Ԁ              We       <                @                E   3  @  
+ 	 l                                                                                                             d       Ԁ              e       <                @                E   3  @  
 
- 	 l                                                                                                             ge       Ԁ              i A   A                rE         $0H`lx X>rmesh        A   A                jE         $0H`lx sErmesh       '	       <                P                E   4  @  
+ 	 l                                                                                                             e       Ԁ              i A   A                rE         $0H`lx X>rmesh        A   A                jE         $0H`lx sErmesh       '	       <                P                E   4  @  
 
- 	 l                                                                                                             <(	       Ԁ              (	       <                P                E   4  @  
+ 	 l                                                                                                             <(	       Ԁ              )	       <                P                E   4  @  
 
- 	 l                                                                                                             (	       Ԁ              	       <                `                E   5  @  
+ 	 l                                                                                                             #)	       Ԁ              	       <                `                E   5  @  
 
  	 l                                                                                                             	       Ԁ              	       <                `                E   5  @  
 
@@ -242,479 +242,479 @@
        <                p                E   6  @  
 
  	 l                                                                                                             ܮ
-       Ԁ              G
+       Ԁ              Y
        <                p                E   6  @  
 
- 	 l                                                                                                             W
+ 	 l                                                                                                             i
        Ԁ              q       <                                E   7  @  
 
- 	 l                                                                                                             ,r       Ԁ              r       <                                E   7  @  
+ 	 l                                                                                                             ,r       Ԁ              r       <                                E   7  @  
 
- 	 l                                                                                                             r       Ԁ               5       <                                E   8  @  
+ 	 l                                                                                                             r       Ԁ               5       <                                E   8  @  
 
- 	 l                                                                                                             p5       Ԁ              5       <                                E   8  @  
+ 	 l                                                                                                             p5       Ԁ              6       <                                E   8  @  
 
- 	 l                                                                                                             5       Ԁ              P       <                                E   9  @  
+ 	 l                                                                                                             *6       Ԁ              P       <                                E   9  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   9  @  
+ 	 l                                                                                                                    Ԁ              ^       <                                E   9  @  
 
- 	 l                                                                                                             /       Ԁ                     <                                E   :  @  
+ 	 l                                                                                                             n       Ԁ                     <                                E   :  @  
 
- 	 l                                                                                                                    Ԁ              o       <                                E   :  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   :  @  
 
- 	 l                                                                                                                    Ԁ              ~       <                                E   ;  @  
+ 	 l                                                                                                                    Ԁ              ~       <                                E   ;  @  
 
- 	 l                                                                                                             `       Ԁ                     <                                E   ;  @  
+ 	 l                                                                                                             `       Ԁ                     <                                E   ;  @  
 
- 	 l                                                                                                                    Ԁ                        <                                E   <  @  
+ 	 l                                                                                                                    Ԁ                        <                                E   <  @  
 
- 	 l                                                                                                             p         Ԁ                       <                                E   <  @  
+ 	 l                                                                                                             p         Ԁ                       <                                E   <  @  
 
- 	 l                                                                                                                      Ԁ              P        <                                E   =  @  
+ 	 l                                                                                                                     Ԁ              P        <                                E   =  @  
 
- 	 l                                                                                                                     Ԁ                      <                                E   =  @  
+ 	 l                                                                                                                     Ԁ                      <                                E   =  @  
 
- 	 l                                                                                                             /        Ԁ                A   A                M         $0H`lx Ermesh       O A   A                M         $0H`lx Mrmesh              <                                E   >  @  
+ 	 l                                                                                                                     Ԁ                A   A                M         $0H`lx Ermesh       O A   A                M         $0H`lx Mrmesh              <                                E   >  @  
 
- 	 l                                                                                                                    Ԁ              o       <                                E   >  @  
+ 	 l                                                                                                                    Ԁ              ۇ       <                                E   >  @  
 
- 	 l                                                                                                                    Ԁ              I       <                                 E   ?  @  
+ 	 l                                                                                                                    Ԁ              I       <                                 E   ?  @  
 
- 	 l                                                                                                             `J       Ԁ              J       <                                 E   ?  @  
+ 	 l                                                                                                             `J       Ԁ              K       <                                 E   ?  @  
 
- 	 l                                                                                                             J       Ԁ              @       <                                E   @  @  
+ 	 l                                                                                                             K       Ԁ              @       <                                E   @  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   @  @  
+ 	 l                                                                                                                    Ԁ              <       <                                E   @  @  
 
- 	 l                                                                                                                    Ԁ                     <                                 E   A  @  
+ 	 l                                                                                                             L       Ԁ                     <                                 E   A  @  
 
- 	 l                                                                                                                     Ԁ              _       <                                 E   A  @  
+ 	 l                                                                                                                     Ԁ                     <                                 E   A  @  
 
- 	 l                                                                                                             o       Ԁ                     <                0                E   B  @  
+ 	 l                                                                                                                    Ԁ                     <                0                E   B  @  
 
- 	 l                                                                                                             L       Ԁ                     <                0                E   B  @  
+ 	 l                                                                                                             L       Ԁ                      <                0                E   B  @  
 
- 	 l                                                                                                                    Ԁ              0W       <                @                E   C  @  
+ 	 l                                                                                                             0       Ԁ              0W       <                @                E   C  @  
 
- 	 l                                                                                                             W       Ԁ              W       <                @                E   C  @  
+ 	 l                                                                                                             W       Ԁ              	X       <                @                E   C  @  
 
- 	 l                                                                                                             X       Ԁ                     <                P                E   D  @  
+ 	 l                                                                                                             X       Ԁ                     <                P                E   D  @  
 
- 	 l                                                                                                                    Ԁ              G       <                P                E   D  @  
+ 	 l                                                                                                                    Ԁ                     <                P                E   D  @  
 
- 	 l                                                                                                             W       Ԁ                     <                `                E   E  @  
+ 	 l                                                                                                                    Ԁ                     <                `                E   E  @  
 
- 	 l                                                                                                             <       Ԁ                     <                `                E   E  @  
+ 	 l                                                                                                             <       Ԁ                     <                `                E   E  @  
 
- 	 l                                                                                                                    Ԁ                      <                p                E   F  @  
+ 	 l                                                                                                             %       Ԁ                      <                p                E   F  @  
 
- 	 l                                                                                                                    Ԁ                     <                p                E   F  @  
+ 	 l                                                                                                                    Ԁ              S       <                p                E   F  @  
 
- 	 l                                                                                                                    Ԁ              pd       <                                E   G  @  
+ 	 l                                                                                                             c       Ԁ              pd       <                                E   G  @  
 
- 	 l                                                                                                             d       Ԁ              7e       <                                E   G  @  
+ 	 l                                                                                                             d       Ԁ              me       <                                E   G  @  
 
- 	 l                                                                                                             Ge       Ԁ              i A   A                T         $0H`lx Mrmesh        A   A                ;U         $0H`lx Trmesh       '	       <                                E   H  @  
+ 	 l                                                                                                             }e       Ԁ              i A   A                T         $0H`lx Mrmesh        A   A                ;U         $0H`lx Trmesh       '	       <                                E   H  @  
 
- 	 l                                                                                                             ,(	       Ԁ              (	       <                                E   H  @  
+ 	 l                                                                                                             ,(	       Ԁ              (	       <                                E   H  @  
 
- 	 l                                                                                                             (	       Ԁ              	       <                                E   I  @  
+ 	 l                                                                                                             (	       Ԁ              	       <                                E   I  @  
 
- 	 l                                                                                                             |	       Ԁ              	       <                                E   I  @  
+ 	 l                                                                                                             |	       Ԁ              	       <                                E   I  @  
 
- 	 l                                                                                                             	       Ԁ              `
+ 	 l                                                                                                             	       Ԁ              `
        <                                E   J  @  
 
  	 l                                                                                                             ̮
-       Ԁ              '
+       Ԁ              o
        <                                E   J  @  
 
- 	 l                                                                                                             7
+ 	 l                                                                                                             
        Ԁ              q       <                                E   K  @  
 
- 	 l                                                                                                             r       Ԁ              wr       <                                E   K  @  
+ 	 l                                                                                                             r       Ԁ              r       <                                E   K  @  
 
- 	 l                                                                                                             r       Ԁ               5       <                                E   L  @  
+ 	 l                                                                                                             r       Ԁ               5       <                                E   L  @  
 
- 	 l                                                                                                             l5       Ԁ              5       <                                E   L  @  
+ 	 l                                                                                                             l5       Ԁ              5       <                                E   L  @  
 
- 	 l                                                                                                             5       Ԁ              P       <                                E   M  @  
+ 	 l                                                                                                             5       Ԁ              P       <                                E   M  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   M  @  
+ 	 l                                                                                                                    Ԁ              q       <                                E   M  @  
 
- 	 l                                                                                                             '       Ԁ                     <                                E   N  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   N  @  
 
- 	 l                                                                                                                    Ԁ              g       <                                E   N  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   N  @  
 
- 	 l                                                                                                             w       Ԁ              ~       <                                 E   O  @  
+ 	 l                                                                                                                    Ԁ              ~       <                                 E   O  @  
 
- 	 l                                                                                                             \       Ԁ                     <                                 E   O  @  
+ 	 l                                                                                                             \       Ԁ                     <                                 E   O  @  
 
- 	 l                                                                                                                    Ԁ                        <                                E   P  @  
+ 	 l                                                                                                                    Ԁ                        <                                E   P  @  
 
- 	 l                                                                                                             l         Ԁ                       <                                E   P  @  
+ 	 l                                                                                                             l         Ԁ              3        <                                E   P  @  
 
- 	 l                                                                                                                      Ԁ              P        <                                 E   Q  @  
+ 	 l                                                                                                             C        Ԁ              P        <                                 E   Q  @  
 
  	 l                                                                                                                     Ԁ                      <                                 E   Q  @  
 
  	 l                                                                                                             '        Ԁ                A   A               V\         $0H`lx <Urmesh       O A   A               \         $0H`lx V\rmesh              <                0                E   R  @  
 
- 	 l                                                                                                                    Ԁ              g       <                0                E   R  @  
+ 	 l                                                                                                                    Ԁ              p       <                0                E   R  @  
 
- 	 l                                                                                                             w       Ԁ              I       <                @                E   S  @  
+ 	 l                                                                                                                    Ԁ              I       <                @                E   S  @  
 
- 	 l                                                                                                             \J       Ԁ              J       <                @                E   S  @  
+ 	 l                                                                                                             \J       Ԁ              K       <                @                E   S  @  
 
- 	 l                                                                                                             J       Ԁ              @       <                P                E   T  @  
+ 	 l                                                                                                             K       Ԁ              @       <                P                E   T  @  
 
- 	 l                                                                                                                    Ԁ                     <                P                E   T  @  
+ 	 l                                                                                                                    Ԁ              =       <                P                E   T  @  
 
- 	 l                                                                                                                    Ԁ                     <                `                E   U  @  
+ 	 l                                                                                                             M       Ԁ                     <                `                E   U  @  
 
- 	 l                                                                                                                    Ԁ              W       <                `                E   U  @  
+ 	 l                                                                                                                    Ԁ              {       <                `                E   U  @  
 
- 	 l                                                                                                             g       Ԁ                     <                p                E   V  @  
+ 	 l                                                                                                                    Ԁ                     <                p                E   V  @  
 
- 	 l                                                                                                             L       Ԁ                     <                p                E   V  @  
+ 	 l                                                                                                             L       Ԁ                     <                p                E   V  @  
 
- 	 l                                                                                                                    Ԁ              0W       <                                E   W  @  
+ 	 l                                                                                                             ,       Ԁ              0W       <                                E   W  @  
 
- 	 l                                                                                                             W       Ԁ              W       <                                E   W  @  
+ 	 l                                                                                                             W       Ԁ               X       <                                E   W  @  
 
- 	 l                                                                                                             X       Ԁ                     <                                E   X  @  
+ 	 l                                                                                                             X       Ԁ                     <                                E   X  @  
 
- 	 l                                                                                                                    Ԁ              G       <                                E   X  @  
+ 	 l                                                                                                                    Ԁ              b       <                                E   X  @  
 
- 	 l                                                                                                             W       Ԁ                     <                                E   Y  @  
+ 	 l                                                                                                             r       Ԁ                     <                                E   Y  @  
 
- 	 l                                                                                                             <       Ԁ                     <                                E   Y  @  
+ 	 l                                                                                                             <       Ԁ                     <                                E   Y  @  
 
- 	 l                                                                                                                    Ԁ                      <                                E   Z  @  
+ 	 l                                                                                                                    Ԁ                      <                                E   Z  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   Z  @  
+ 	 l                                                                                                                    Ԁ              J       <                                E   Z  @  
 
- 	 l                                                                                                                    Ԁ              pd       <                                E   [  @  
+ 	 l                                                                                                             Z       Ԁ              pd       <                                E   [  @  
 
- 	 l                                                                                                             d       Ԁ              7e       <                                E   [  @  
+ 	 l                                                                                                             d       Ԁ              Re       <                                E   [  @  
 
- 	 l                                                                                                             Ge       Ԁ              i A   A                3c         $0H`lx \rmesh        A   A                }d         $0H`lx crmesh       '	       <                                E   \  @  
+ 	 l                                                                                                             be       Ԁ              i A   A                3c         $0H`lx \rmesh        A   A                }d         $0H`lx crmesh       '	       <                                E   \  @  
 
- 	 l                                                                                                             ,(	       Ԁ              (	       <                                E   \  @  
+ 	 l                                                                                                             ,(	       Ԁ              (	       <                                E   \  @  
 
- 	 l                                                                                                             (	       Ԁ              	       <                                E   ]  @  
+ 	 l                                                                                                             (	       Ԁ              	       <                                E   ]  @  
 
- 	 l                                                                                                             |	       Ԁ              	       <                                E   ]  @  
+ 	 l                                                                                                             |	       Ԁ              	       <                                E   ]  @  
 
- 	 l                                                                                                             	       Ԁ              `
+ 	 l                                                                                                             	       Ԁ              `
        <                                E   ^  @  
 
  	 l                                                                                                             ̮
-       Ԁ              '
+       Ԁ              9
        <                                E   ^  @  
 
- 	 l                                                                                                             7
+ 	 l                                                                                                             I
        Ԁ              q       <                                 E   _  @  
 
  	 l                                                                                                             r       Ԁ              wr       <                                 E   _  @  
 
  	 l                                                                                                             r       Ԁ               5       <                                E   `  @  
 
- 	 l                                                                                                             l5       Ԁ              5       <                                E   `  @  
+ 	 l                                                                                                             l5       Ԁ              6       <                                E   `  @  
 
- 	 l                                                                                                             5       Ԁ              P       <                                 E   a  @  
+ 	 l                                                                                                             6       Ԁ              P       <                                 E   a  @  
 
- 	 l                                                                                                                    Ԁ                     <                                 E   a  @  
+ 	 l                                                                                                                    Ԁ              h       <                                 E   a  @  
 
- 	 l                                                                                                             '       Ԁ                     <                0                E   b  @  
+ 	 l                                                                                                             x       Ԁ                     <                0                E   b  @  
 
- 	 l                                                                                                                    Ԁ              g       <                0                E   b  @  
+ 	 l                                                                                                                    Ԁ                     <                0                E   b  @  
 
- 	 l                                                                                                             w       Ԁ              ~       <                @                E   c  @  
+ 	 l                                                                                                                    Ԁ              ~       <                @                E   c  @  
 
  	 l                                                                                                             \       Ԁ                     <                @                E   c  @  
 
  	 l                                                                                                                    Ԁ                        <                P                E   d  @  
 
- 	 l                                                                                                             l         Ԁ                       <                P                E   d  @  
+ 	 l                                                                                                             l         Ԁ              *        <                P                E   d  @  
 
- 	 l                                                                                                                      Ԁ              P        <                `                E   e  @  
+ 	 l                                                                                                             :        Ԁ              P        <                `                E   e  @  
 
- 	 l                                                                                                                     Ԁ                      <                `                E   e  @  
+ 	 l                                                                                                                     Ԁ                      <                `                E   e  @  
 
- 	 l                                                                                                             '        Ԁ                A   A               0Sk         $0H`lx ~drmesh       O A   A               0
+ 	 l                                                                                                                     Ԁ                A   A               0Sk         $0H`lx ~drmesh       O A   A               0
 l         $0H`lx krmesh              <                p                E   f  @  
 
- 	 l                                                                                                                    Ԁ              g       <                p                E   f  @  
+ 	 l                                                                                                                    Ԁ              ʇ       <                p                E   f  @  
 
- 	 l                                                                                                             w       Ԁ              I E   E   Ѐ            @%                                   J ?   ?   Ѐ<                @                                J       Ԁ              K       <                                E   g  @  
+ 	 l                                                                                                             ڇ       Ԁ              I E   E   Ѐ            @%                                   J ?   ?   Ѐ<                @                                J       Ԁ              K       <                                E   g  @  
 
- 	 l                                                                                                             yK       Ԁ              K       <                                E   g  @  
+ 	 l                                                                                                             K       Ԁ              L       <                                E   g  @  
 
- 	 l                                                                                                             K       Ԁ              @       <                                E   h  @  
+ 	 l                                                                                                             L       Ԁ              @       <                                E   h  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   h  @  
+ 	 l                                                                                                                    Ԁ              =       <                                E   h  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   i  @  
+ 	 l                                                                                                             M       Ԁ                     <                                E   i  @  
 
- 	 l                                                                                                                    Ԁ              W       <                                E   i  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   i  @  
 
- 	 l                                                                                                             g       Ԁ                     <                                E   j  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   j  @  
 
- 	 l                                                                                                             L       Ԁ                     <                                E   j  @  
+ 	 l                                                                                                             L       Ԁ                     <                                E   j  @  
 
- 	 l                                                                                                                    Ԁ              0W       <                                E   k  @  
+ 	 l                                                                                                             #       Ԁ              0W       <                                E   k  @  
 
- 	 l                                                                                                             W       Ԁ              W       <                                E   k  @  
+ 	 l                                                                                                             W       Ԁ              X       <                                E   k  @  
 
- 	 l                                                                                                             X       Ԁ                     <                                E   l  @  
+ 	 l                                                                                                             +X       Ԁ                     <                                E   l  @  
 
- 	 l                                                                                                                    Ԁ              G       <                                E   l  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   l  @  
 
- 	 l                                                                                                             W       Ԁ                     <                                E   m  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   m  @  
 
- 	 l                                                                                                             <       Ԁ                     <                                E   m  @  
+ 	 l                                                                                                             <       Ԁ                     <                                E   m  @  
 
- 	 l                                                                                                                    Ԁ                      <                                E   n  @  
+ 	 l                                                                                                                    Ԁ                      <                                E   n  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   n  @  
+ 	 l                                                                                                                    Ԁ              n       <                                E   n  @  
 
- 	 l                                                                                                                    Ԁ              pd       <                                 E   o  @  
+ 	 l                                                                                                             ~       Ԁ              pd       <                                 E   o  @  
 
- 	 l                                                                                                             d       Ԁ              7e       <                                 E   o  @  
+ 	 l                                                                                                             d       Ԁ              e       <                                 E   o  @  
 
- 	 l                                                                                                             Ge       Ԁ              i A   A               Ps9s         $0H`lx lrmesh        A   A               P*s         $0H`lx 9srmesh       '	       <                                E   p  @  
+ 	 l                                                                                                             e       Ԁ              i A   A               Ps9s         $0H`lx lrmesh        A   A               P*s         $0H`lx 9srmesh       '	       <                                E   p  @  
 
- 	 l                                                                                                             ,(	       Ԁ              (	       <                                E   p  @  
+ 	 l                                                                                                             ,(	       Ԁ              (	       <                                E   p  @  
 
- 	 l                                                                                                             (	       Ԁ              	       <                                 E   q  @  
+ 	 l                                                                                                             (	       Ԁ              	       <                                 E   q  @  
 
- 	 l                                                                                                             |	       Ԁ              	       <                                 E   q  @  
+ 	 l                                                                                                             |	       Ԁ              L	       <                                 E   q  @  
 
- 	 l                                                                                                             	       Ԁ              `
+ 	 l                                                                                                             \	       Ԁ              `
        <                0                E   r  @  
 
  	 l                                                                                                             ̮
-       Ԁ              '
+       Ԁ              K
        <                0                E   r  @  
 
- 	 l                                                                                                             7
+ 	 l                                                                                                             [
        Ԁ              q       <                @                E   s  @  
 
- 	 l                                                                                                             r       Ԁ              wr       <                @                E   s  @  
+ 	 l                                                                                                             r       Ԁ              r       <                @                E   s  @  
 
- 	 l                                                                                                             r       Ԁ               5       <                P                E   t  @  
+ 	 l                                                                                                             r       Ԁ               5       <                P                E   t  @  
 
- 	 l                                                                                                             l5       Ԁ              5       <                P                E   t  @  
+ 	 l                                                                                                             l5       Ԁ              5       <                P                E   t  @  
 
- 	 l                                                                                                             5       Ԁ              P       <                `                E   u  @  
+ 	 l                                                                                                             5       Ԁ              P       <                `                E   u  @  
 
- 	 l                                                                                                                    Ԁ                     <                `                E   u  @  
+ 	 l                                                                                                                    Ԁ                     <                `                E   u  @  
 
- 	 l                                                                                                             '       Ԁ                     <                p                E   v  @  
+ 	 l                                                                                                                    Ԁ                     <                p                E   v  @  
 
- 	 l                                                                                                                    Ԁ              g       <                p                E   v  @  
+ 	 l                                                                                                                    Ԁ                     <                p                E   v  @  
 
- 	 l                                                                                                             w       Ԁ              ~       <                                E   w  @  
+ 	 l                                                                                                                    Ԁ              ~       <                                E   w  @  
 
- 	 l                                                                                                             \       Ԁ                     <                                E   w  @  
+ 	 l                                                                                                             \       Ԁ                     <                                E   w  @  
 
- 	 l                                                                                                                    Ԁ                        <                                E   x  @  
+ 	 l                                                                                                             *       Ԁ                        <                                E   x  @  
 
- 	 l                                                                                                             l         Ԁ                       <                                E   x  @  
+ 	 l                                                                                                             l         Ԁ              N        <                                E   x  @  
 
- 	 l                                                                                                                      Ԁ              P        <                                E   y  @  
+ 	 l                                                                                                             ^        Ԁ              P        <                                E   y  @  
 
- 	 l                                                                                                                     Ԁ                      <                                E   y  @  
+ 	 l                                                                                                                     Ԁ              q        <                                E   y  @  
 
- 	 l                                                                                                             '        Ԁ                A   A               `z         $0H`lx srmesh       O A   A               `Ja{         $0H`lx zrmesh              <                                E   z  @  
+ 	 l                                                                                                                     Ԁ                A   A               `z         $0H`lx srmesh       O A   A               `Ja{         $0H`lx zrmesh              <                                E   z  @  
 
- 	 l                                                                                                                    Ԁ              g       <                                E   z  @  
+ 	 l                                                                                                                    Ԁ                     <                                E   z  @  
 
- 	 l                                                                                                             w       Ԁ              I       <                                E   {  @  
+ 	 l                                                                                                                    Ԁ              I       <                                E   {  @  
 
- 	 l                                                                                                             \J       Ԁ              J       <                                E   {  @  
+ 	 l                                                                                                             \J       Ԁ              J       <                                E   {  @  
 
- 	 l                                                                                                             J       Ԁ              @       <                                E   |  @  
+ 	 l                                                                                                             K       Ԁ              @       <                                E   |  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   |  @  
+ 	 l                                                                                                                    Ԁ              +       <                                E   |  @  
 
- 	 l                                                                                                                    Ԁ                     <                                E   }  @  
+ 	 l                                                                                                             ;       Ԁ                     <                                E   }  @  
 
- 	 l                                                                                                                    Ԁ              W       <                                E   }  @  
+ 	 l                                                                                                                    Ԁ              i       <                                E   }  @  
 
- 	 l                                                                                                             g       Ԁ                     <                                E   ~  @  
+ 	 l                                                                                                             y       Ԁ                     <                                E   ~  @  
 
  	 l                                                                                                             L       Ԁ                     <                                E   ~  @  
 
  	 l                                                                                                                    Ԁ              0W       <                                 E     @  
 
- 	 l                                                                                                             W       Ԁ              W       <                                 E     @  
+ 	 l                                                                                                             W       Ԁ              6X       <                                 E     @  
 
- 	 l                                                                                                             X       Ԁ                     <                                E     @  
+ 	 l                                                                                                             FX       Ԁ                     <                                E     @  
 
- 	 l                                                                                                                    Ԁ              G       <                                E     @  
+ 	 l                                                                                                                    Ԁ                     <                                E     @  
 
- 	 l                                                                                                             W       Ԁ                     <                                 E     @  
+ 	 l                                                                                                                    Ԁ                     <                                 E     @  
 
- 	 l                                                                                                             <       Ԁ                     <                                 E     @  
+ 	 l                                                                                                             <       Ԁ                     <                                 E     @  
 
- 	 l                                                                                                                    Ԁ                      <                0                E     @  
+ 	 l                                                                                                                    Ԁ                      <                0                E     @  
 
- 	 l                                                                                                                    Ԁ                     <                0                E     @  
+ 	 l                                                                                                                    Ԁ                     <                0                E     @  
 
- 	 l                                                                                                                    Ԁ              pd       <                @                E     @  
+ 	 l                                                                                                             	       Ԁ              pd       <                @                E     @  
 
- 	 l                                                                                                             d       Ԁ              7e       <                @                E     @  
+ 	 l                                                                                                             d       Ԁ              e       <                @                E     @  
 
- 	 l                                                                                                             Ge       Ԁ              i A   A               p{         $0H`lx a{rmesh        A   A               pj         $0H`lx |rmesh       '	       <                P                E     @  
+ 	 l                                                                                                             e       Ԁ              i A   A               p{         $0H`lx a{rmesh        A   A               pj         $0H`lx |rmesh       '	       <                P                E     @  
 
- 	 l                                                                                                             ,(	       Ԁ              (	       <                P                E     @  
+ 	 l                                                                                                             ,(	       Ԁ              (	       <                P                E     @  
 
- 	 l                                                                                                             (	       Ԁ              	       <                `                E     @  
+ 	 l                                                                                                             )	       Ԁ              	       <                `                E     @  
 
- 	 l                                                                                                             |	       Ԁ              	       <                `                E     @  
+ 	 l                                                                                                             |	       Ԁ              ^	       <                `                E     @  
 
- 	 l                                                                                                             	       Ԁ              `
+ 	 l                                                                                                             n	       Ԁ              `
        <                p                E     @  
 
  	 l                                                                                                             ̮
-       Ԁ              '
+       Ԁ              
        <                p                E     @  
 
- 	 l                                                                                                             7
+ 	 l                                                                                                             
        Ԁ              q       <                                E     @  
 
- 	 l                                                                                                             r       Ԁ              wr       <                                E     @  
+ 	 l                                                                                                             r       Ԁ              r       <                                E     @  
 
- 	 l                                                                                                             r       Ԁ               5       <                                E     @  
+ 	 l                                                                                                             r       Ԁ               5       <                                E     @  
 
- 	 l                                                                                                             l5       Ԁ              5       <                                E     @  
+ 	 l                                                                                                             l5       Ԁ              <6       <                                E     @  
 
- 	 l                                                                                                             5       Ԁ              P       <                                E     @  
+ 	 l                                                                                                             L6       Ԁ              P       <                                E     @  
 
- 	 l                                                                                                                    Ԁ                     <                                E     @  
+ 	 l                                                                                                                    Ԁ              M       <                                E     @  
 
- 	 l                                                                                                             '       Ԁ                     <                                E     @  
+ 	 l                                                                                                             ]       Ԁ                     <                                E     @  
 
- 	 l                                                                                                                    Ԁ              g       <                                E     @  
+ 	 l                                                                                                                    Ԁ              ܼ       <                                E     @  
 
- 	 l                                                                                                             w       Ԁ              ~       <                                E     @  
+ 	 l                                                                                                                    Ԁ              ~       <                                E     @  
 
- 	 l                                                                                                             \       Ԁ                     <                                E     @  
+ 	 l                                                                                                             \       Ԁ              ,       <                                E     @  
 
- 	 l                                                                                                                    Ԁ           	             <                                E     @  
+ 	 l                                                                                                             <       Ԁ           	             <                                E     @  
 
- 	 l                                                                                                          	   l         Ԁ           	            <                                E     @  
+ 	 l                                                                                                          	   l         Ԁ           	            <                                E     @  
 
- 	 l                                                                                                          	            Ԁ           	   P        <                                E     @  
+ 	 l                                                                                                          	            Ԁ           	   P        <                                E     @  
 
- 	 l                                                                                                          	           Ԁ           	           <                                E     @  
+ 	 l                                                                                                          	           Ԁ           	           <                                E     @  
 
- 	 l                                                                                                          	   '        Ԁ           	     A   A                        $0H`lx rmesh    	   O A   A                        $0H`lx rmesh    	          <                                E     @  
+ 	 l                                                                                                          	           Ԁ           	     A   A                        $0H`lx rmesh    	   O A   A                        $0H`lx rmesh    	          <                                E     @  
 
- 	 l                                                                                                          	          Ԁ           	   g       <                                E     @  
+ 	 l                                                                                                          	          Ԁ           	          <                                E     @  
 
- 	 l                                                                                                          	   w       Ԁ           	   I       <                 	                E     @  
+ 	 l                                                                                                          	          Ԁ           	   I       <                 	                E     @  
 
- 	 l                                                                                                          	   \J       Ԁ           	   J       <                 	                E     @  
+ 	 l                                                                                                          	   \J       Ԁ           	   5K       <                 	                E     @  
 
- 	 l                                                                                                          	   J       Ԁ           	   @       <                	                E     @  
+ 	 l                                                                                                          	   EK       Ԁ           	   @       <                	                E     @  
 
- 	 l                                                                                                          	          Ԁ           	          <                	                E     @  
+ 	 l                                                                                                          	          Ԁ           	   X       <                	                E     @  
 
- 	 l                                                                                                          	          Ԁ           	          <                 	                E     @  
+ 	 l                                                                                                          	   h       Ԁ           	          <                 	                E     @  
 
- 	 l                                                                                                          	          Ԁ           	   W       <                 	                E     @  
+ 	 l                                                                                                          	          Ԁ           	   i       <                 	                E     @  
 
- 	 l                                                                                                          	   g       Ԁ           	          <                0	                E     @  
+ 	 l                                                                                                          	   y       Ԁ           	          <                0	                E     @  
 
- 	 l                                                                                                          	   L       Ԁ           	          <                0	                E     @  
+ 	 l                                                                                                          	   L       Ԁ           	          <                0	                E     @  
 
- 	 l                                                                                                          	          Ԁ           	   0W       <                @	                E     @  
+ 	 l                                                                                                          	   Ҕ       Ԁ           	   0W       <                @	                E     @  
 
- 	 l                                                                                                          	   W       Ԁ           	   W       <                @	                E     @  
+ 	 l                                                                                                          	   W       Ԁ           	   6X       <                @	                E     @  
 
- 	 l                                                                                                          	   X       Ԁ           	          <                P	                E     @  
+ 	 l                                                                                                          	   FX       Ԁ           	          <                P	                E     @  
 
- 	 l                                                                                                          	          Ԁ           	   G       <                P	                E     @  
+ 	 l                                                                                                          	          Ԁ           	   }       <                P	                E     @  
 
- 	 l                                                                                                          	   W       Ԁ           	          <                `	                E     @  
+ 	 l                                                                                                          	          Ԁ           	          <                `	                E     @  
 
- 	 l                                                                                                          	   <       Ԁ           	          <                `	                E     @  
+ 	 l                                                                                                          	   <       Ԁ           	          <                `	                E     @  
 
- 	 l                                                                                                          	          Ԁ           	           <                p	                E     @  
+ 	 l                                                                                                          	          Ԁ           	           <                p	                E     @  
 
- 	 l                                                                                                          	          Ԁ           	          <                p	                E     @  
+ 	 l                                                                                                          	          Ԁ           	          <                p	                E     @  
 
- 	 l                                                                                                          	          Ԁ           	   pd       <                	                E     @  
+ 	 l                                                                                                          	          Ԁ           	   pd       <                	                E     @  
 
- 	 l                                                                                                          	   d       Ԁ           	   7e       <                	                E     @  
+ 	 l                                                                                                          	   d       Ԁ           	   @e       <                	                E     @  
 
- 	 l                                                                                                          	   Ge       Ԁ           	   i A   A                        $0H`lx rmesh    	    A   A               D         $0H`lx rmesh    	   '	       <                	                E     @  
+ 	 l                                                                                                          	   Pe       Ԁ           	   i A   A                        $0H`lx rmesh    	    A   A               D         $0H`lx rmesh    	   '	       <                	                E     @  
 
- 	 l                                                                                                          	   ,(	       Ԁ           	   (	       <                	                E     @  
+ 	 l                                                                                                          	   ,(	       Ԁ           	   )	       <                	                E     @  
 
- 	 l                                                                                                          	   (	       Ԁ           	   	       <                	                E     @  
+ 	 l                                                                                                          	   )	       Ԁ           	   	       <                	                E     @  
 
- 	 l                                                                                                          	   |	       Ԁ           	   	       <                	                E     @  
+ 	 l                                                                                                          	   |	       Ԁ           	   :	       <                	                E     @  
 
- 	 l                                                                                                          	   	       Ԁ           	   `
+ 	 l                                                                                                          	   J	       Ԁ           	   `
        <                	                E     @  
 
  	 l                                                                                                          	   ̮
-       Ԁ           	   '
+       Ԁ           	   
        <                	                E     @  
 
- 	 l                                                                                                          	   7
+ 	 l                                                                                                          	   
        Ԁ           	   q       <                	                E     @  
 
- 	 l                                                                                                          	   r       Ԁ           	   wr       <                	                E     @  
+ 	 l                                                                                                          	   r       Ԁ           	   r       <                	                E     @  
 
- 	 l                                                                                                          	   r       Ԁ           	    5       <                	                E     @  
+ 	 l                                                                                                          	   s       Ԁ           	    5       <                	                E     @  
 
- 	 l                                                                                                          	   l5       Ԁ           	   5       <                	                E     @  
+ 	 l                                                                                                          	   l5       Ԁ           	   <6       <                	                E     @  
 
- 	 l                                                                                                          	   5       Ԁ           	   P       <                	                E     @  
+ 	 l                                                                                                          	   L6       Ԁ           	   P       <                	                E     @  
 
- 	 l                                                                                                          	          Ԁ           	          <                	                E     @  
+ 	 l                                                                                                          	          Ԁ           	   V       <                	                E     @  
 
- 	 l                                                                                                          	   '       Ԁ           	          <                	                E     @  
+ 	 l                                                                                                          	   f       Ԁ           	          <                	                E     @  
 
- 	 l                                                                                                          	          Ԁ           	   g       <                	                E     @  
+ 	 l                                                                                                          	          Ԁ           	   p       <                	                E     @  
 
- 	 l                                                                                                          	   w       Ԁ           	   ~       <                 
+ 	 l                                                                                                          	          Ԁ           	   ~       <                 
                 E     @  
 
- 	 l                                                                                                          	   \       Ԁ           	          <                 
+ 	 l                                                                                                          	   \       Ԁ           	   5       <                 
                 E     @  
 
- 	 l                                                                                                          	          Ԁ           
+ 	 l                                                                                                          	   E       Ԁ           
              <                
                 E     @  
 
  	 l                                                                                                          
-            <                
+            <                
                 E     @  
 
  	 l                                                                                                          
-   U        <                
+            <                
                 E     @  
 
  	 l                                                                                                          
-           <                
+           <                
                 E     @  
 
  	 l                                                                                                          
-           <                
+           <                
                 E     @  
 
  	 l                                                                                                          
-           <                
+           <                
                 E     @  
 
  	 l                                                                                                          
-   i.        <                
+           <                
                 E     @  
 
  	 l                                                                                                          
@@ -722,38 +722,38 @@
                 E     @  
 
  	 l                                                                                                          
-           <                 
+   >        <                 
                 E     @  
 
  	 l                                                                                                          
-   *        <                 
+           <                 
                 E     @  
 
  	 l                                                                                                          
      A   A               _         $0H`lx Ermesh    
-           <                 
+           <                 
                 E     @  
 
  	 l                                                                                                          
-   1        <                 
+           <                 
                 E     @  
 
  	 l                                                                                                          
-   l        <                 
+   *        <                 
                 E     @  
 
  	 l                                                                                                          
-   `        <                 
+   l        <                 
                 E     @  
 
  	 l                                                                                                          
-     -   -   Ѐ<                rmeshu  4     
-   |  -   -   Ј<                rmeshu  4     
-   s  -   -   Ј<                rmeshu  4     
-   O  -   -   Ј<                rmeshu  4     
-   =  -   -   Ј<                rmeshu  4     
-     -   -   Ј<                rmeshu  4     
-     -   -   Ј<                rmeshu  4     
+     -   -   Ѐ<                rmeshu  4     
+     -   -   Ј<                rmeshu  4     
+   R  -   -   Ј<                rmeshu  4     
+   @  -   -   Ј<                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.25/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap ns-3.26/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	2016-10-03 20:57:08.364246724 -0700
+++ ns-3.26/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap	2016-10-03 19:49:01.669387489 -0700
@@ -1,108 +1,108 @@
-ò            i       &  >   >   Ѐ<                    $0H`lrmeshq   9u         )        Ԁ                       Ԁ               ~  <   <   Ѐ<                     $0H`lq  9u            A   A                           $0H`lx  rmesh        %  >   >   Ѐ<                    $0H`lrmeshq   9u                 Ԁ               X  <   <   Ѐ<                0    $0H`lq  9u          h        Ԁ               >  >   >   Ѐ<                @   $0H`lrmeshq  9u         N        Ԁ                 <   <   Ѐ<                     $0H`lq  9u          @        Ԁ               JO A   A                 JO         $0H`lx  rmesh        +b F   F               P a         $0H`lx
+ò            i       8  >   >   Ѐ<                    $0H`lrmeshq   9u         M        Ԁ               *        Ԁ               ϙ  <   <   Ѐ<                     $0H`lq  9u            A   A                           $0H`lx  rmesh        7  >   >   Ѐ<                    $0H`lrmeshq   9u                 Ԁ                 <   <   Ѐ<                0    $0H`lq  9u                  Ԁ               Y  >   >   Ѐ<                @   $0H`lrmeshq  9u         i        Ԁ                 <   <   Ѐ<                     $0H`lq  9u          v        Ԁ               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                                
+ zrmesh       j A   A               P 2         $0H`lx rmesh         N   N                                
 
-         N   N          `                      
+         N   N          `                      
 
-         E   E   Ѐ            p %                                      E   E   Ѐ             %                                         Ԁ              =  ?   ?   Ѐ<                                              M        Ԁ                N   N   <                                         
+         E   E   Ѐ            p %                                    2  E   E   Ѐ             %                                         Ԁ                ?   ?   Ѐ<                                                      Ԁ                N   N   <                                         
      
-       a        Ԁ                N   N   <                                        
+       ?        Ԁ              )  N   N   <                                        
      
-               Ԁ              3        <                                 E      @  
+       %        Ԁ              j        <                                 E      @  
 
- 	 l                                                                                                             C        Ԁ                N   N                                 
+ 	 l                                                                                                             z        Ԁ              X   N   N                                 
 
-         N   N                                
+       !  N   N                                
 
-               Ԁ                 N   N   <                                       
+       "        Ԁ              #  N   N   <                                       
      
-                Ԁ              +!        <                                 E      @  
+       #        Ԁ              $        <                                 E      @  
 
- 	 l                                                                                                             p"        Ԁ              #        <                                E      @  
+ 	 l                                                                                                             %        Ԁ              B'        <                                E      @  
 
  	 l                                                                                                               F   F                E         $0H`lx
  3rmesh       JO A   A                         $0H`lx Ermesh       0 N   N                                 
 
-       1 N   N   <                                         
+       %1 N   N   <                                         
      
-       1       Ԁ              2 N   N                                
+       1       Ԁ              2 N   N                                
 
-       b4       <                                  E      @  
+       4       <                                  E      @  
 
- 	 l                                                                                                             r4       Ԁ              J8 N   N                                 
+ 	 l                                                                                                             4       Ԁ              8 N   N                                 
 
-       v9 N   N   <                0                        
+       <: N   N   <                0                        
      
-       9       Ԁ              : N   N                                
+       L:       Ԁ              ?; N   N                                
 
-       s;       <                0                 E      @  
+       j;       <                0                 E      @  
 
- 	 l                                                                                                             <       Ԁ              g N   N                                 
+ 	 l                                                                                                             <       Ԁ              g N   N                                 
 
-        N   N                                
+        N   N                                
 
-       F$       Ԁ              % N   N   <                @                       
+       N&       Ԁ              ' N   N   <                @                       
      
-       %       Ԁ              @& 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      @  
+       -'       Ԁ              I( E   E   Ѐ             %              ,                  ( ?   ?   Ѐ<                                                 /)       Ԁ              Z)       <                @                 E      @  
 
  
- l                                                                                                             cH	       Ԁ              I	       <                                 E      @  
+ l                                                                                                             *       Ԁ              6+ ?   ?   Ѐ<                                             , E   E   Ѐ             %                                    Z.       <                                 E      @  
 
  
- l                                                                                                             L	 E   E   Ѐ            0%                                 	O	       Ԁ              O	 ?   ?   Ѐ<                @           ,                 O	       Ԁ              EQ	 N   N          P                     
+ l                                                                                                             2 N   N                                
 
-       pQ	 N   N   <                P                        
+       
+3 N   N   <                P                        
      
-       -R	       Ԁ              R	 N   N   <                0                       
-     
-       ZS	 N   N                                
+       3       Ԁ              3 N   N                                
 
-       X	       Ԁ              X	       <                P                E      @  
+       19       Ԁ              :       <                P                E      @  
 
  
- l                                                                                                             X	       Ԁ              D        Ԁ              '        <                `                E     @  
+ l                                                                                                             :       Ԁ              +b F   F               03&         $0H`lx
+ &rmesh       j A   A                t'         $0H`lx &rmesh       D        Ԁ                      <                `                E     @  
 
- 	 l                                                                                                             7        Ԁ                      <                `                 E     @  
+ 	 l                                                                                                                     Ԁ              S        <                `                 E     @  
 
- 	 l                                                                                                                     Ԁ                      <                @                E     @  
+ 	 l                                                                                                                     Ԁ                      <                @                E     @  
 
- 	 l                                                                                                               F   F               `S.         $0H`lx
+ 	 l                                                                                                               F   F               @S.         $0H`lx
  ].u'rmesh       JO A   A               
 /         $0H`lx .rmesh              <                p                 E     @  
 
- 	 l                                                                                                                    Ԁ              _       <                p                 E     @  
+ 	 l                                                                                                                    Ԁ                     <                p                 E     @  
 
- 	 l                                                                                                                    Ԁ                     <                                 E     @  
+ 	 l                                                                                                                    Ԁ                     <                                 E     @  
 
  
- l                                                                                                             t       Ԁ                     <                P                E     @  
+ l                                                                                                             t       Ԁ              
+       <                P                E     @  
 
  
- l                                                                                                             :!       Ԁ              S"       <                                E     @  
+ l                                                                                                             $"       Ԁ              +#       <                                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                                                                                                             ;#       Ԁ              +b F   F               Ps(6         $0H`lx
+ 5/rmesh       j A   A                *6         $0H`lx (6rmesh       D        Ԁ              0        <                                E     @  
 
- 	 l                                                                                                                     Ԁ              >        <                                 E     @  
+ 	 l                                                                                                             @        Ԁ                      <                                 E     @  
 
- 	 l                                                                                                             3        Ԁ                      <                `                E     @  
+ 	 l                                                                                                                     Ԁ              O        <                `                E     @  
 
- 	 l                                                                                                               F   F               =         $0H`lx
+ 	 l                                                                                                               F   F               `=         $0H`lx
  =6rmesh       JO A   A               0JX>         $0H`lx =rmesh              <                                 E     @  
 
- 	 l                                                                                                                    Ԁ              _       <                                 E     @  
+ 	 l                                                                                                                    Ԁ                     <                                 E     @  
 
- 	 l                                                                                                             S       Ԁ                     <                                 E     @  
+ 	 l                                                                                                                    Ԁ                     <                                 E     @  
 
  
- l                                                                                                             t       Ԁ                     <                p                E     @  
+ l                                                                                                             t       Ԁ              i       <                p                E     @  
 
  
- l                                                                                                                     Ԁ              "       <                                E     @  
+ l                                                                                                             N!       Ԁ              U"       <                                E     @  
 
  
- l                                                                                                             "       Ԁ              +b F   F               jE         $0H`lx
+ l                                                                                                             e"       Ԁ              +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.25/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap ns-3.26/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	2016-10-03 20:57:08.365246716 -0700
+++ ns-3.26/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap	2016-10-03 19:49:01.669387489 -0700
@@ -1,4 +1,4 @@
-ò            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
+ò            i       %  >   >   Ѐ<                    $0H`lrmeshq   9u         3&        Ԁ               '        Ԁ               '  <   <   Ѐ<                     $0H`lq  9u            A   A                 (          $0H`lx $ rmesh        ̖  >   >   Ѐ<                    $0H`lrmeshq   9u         u        Ԁ                 <   <   Ѐ<                0    $0H`lq  9u          !        Ԁ                 >   >   Ѐ<                @   $0H`lrmeshq  9u                 Ԁ               f  <   <   Ѐ<                     $0H`lq  9u                  Ԁ                 A   A                           $0H`lx  rmesh          >   >   Ѐ<                    $0H`lrmeshq   9u                 Ԁ                 <   <   Ѐ<                0    $0H`lq  9u                  Ԁ                 >   >   Ѐ<                @   $0H`lrmeshq  9u                 Ԁ               :  <   <   Ѐ<                     $0H`lq  9u          J        Ԁ               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
@@ -6,153 +6,152 @@
  rmesh       a F   F               p          $0H`lx
  zrmesh        A   A               P 2         $0H`lx rmesh         N   N                                 
 
-       3  N   N                                
+         N   N                                
 
-       ^  N   N          `                      
+       @  N   N          `                      
 
-       !  E   E   Ѐ            p %                                    p  E   E   Ѐ             %                                 s  ?   ?   Ѐ<                                                         Ԁ                ?   ?   Ѐ<                                              z        Ԁ              %  N   N   <                                         
+       o  E   E   Ѐ            p %                                      E   E   Ѐ             %                                   ?   ?   Ѐ<                                                         Ԁ              (  ?   ?   Ѐ<                                                      Ԁ                N   N   <                                         
      
-       5        Ԁ                N   N   <                                        
+               Ԁ                N   N   <                                        
      
-       H        Ԁ              {        <                                  E      @  
+       e        Ԁ                      <                                  E      @  
 
- 	 l                                                                                                                     Ԁ              *        <                                 E      @  
+ 	 l                                                                                                                     Ԁ              b        <                                 E      @  
 
- 	 l                                                                                                             o        Ԁ                N   N                                 
+ 	 l                                                                                                                     Ԁ                 N   N                                 
 
-       {  N   N                                
+       C!  N   N                                
 
-         N   N   <                                        
+       "  N   N   <                                        
      
-               Ԁ              2   N   N   <                                       
+       "        Ԁ              J#  N   N   <                                       
      
-                Ԁ              3"        <                                 E      @  
+       $        Ԁ              %        <                                 E      @  
 
- 	 l                                                                                                             C"        Ԁ              "        <                                E      @  
+ 	 l                                                                                                             %        Ԁ              :&        <                                E      @  
 
- 	 l                                                                                                             #        Ԁ              (%  N   N                                
+ 	 l                                                                                                             '        Ԁ              *(  N   N                                
 
          F   F                         $0H`lx
  rmesh         F   F                E         $0H`lx
  3rmesh       O A   A                         $0H`lx Ermesh       h0 N   N                                 
 
-       1 N   N   <                                         
+       1 N   N   <                                         
      
-       1       Ԁ              3 N   N                                
+       1       Ԁ              2 N   N                                
 
-       Z3       <                                  E      @  
+       e3 N   N                                
+
+       3       <                                  E      @  
 
- 	 l                                                                                                             4       Ԁ              8 N   N                                 
+ 	 l                                                                                                             4       Ԁ              %9 N   N                                 
 
-       8 N   N   <                0                        
+       9 N   N   <                0                        
      
-       9       Ԁ              : N   N                                
-
-       H; N   N                                
+       y:       Ԁ              : N   N                                
 
-       {<       <                0                 E      @  
+       r<       <                0                 E      @  
 
- 	 l                                                                                                             <       Ԁ               N   N                                 
+ 	 l                                                                                                             <       Ԁ              = N   N                                
 
-        N   N                                
+        N   N                                 
 
-       >  N   N                                
+       7 N   N                                
 
-       ;" ?   ?   Ѐ<                              ,                 _#       Ԁ              
-$ N   N   <                                        
+         N   N                                
+
+       " ?   ?   Ѐ<                              ,                 %$ E   E   Ѐ             %                                 %       Ԁ              & N   N   <                                        
      
-       $       Ԁ              	% E   E   Ѐ             %                                 4% N   N   <                @                       
+       !&       Ԁ              & N   N   <                @                       
      
-       %       Ԁ              @& 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      @  
+       Y'       Ԁ              ' E   E   Ѐ             %              ,                  ( ?   ?   Ѐ<                                                 )       Ԁ              b*       <                @                 E      @  
 
  
- l                                                                                                             7H	       Ԁ              H	       <                                 E      @  
+ l                                                                                                             r*       Ԁ              * ?   ?   Ѐ<                                             r+       Ԁ              , ?   ?   Ѐ<                           ,                 - E   E   Ѐ             %                                    R-       <                                 E      @  
 
  
- l                                                                                                             I	       Ԁ              K	       <                                 E      @  
+ l                                                                                                             .       Ԁ              0       <                                 E      @  
 
  
- l                                                                                                             <L	 E   E   Ѐ            0%                                 tM	 E   E   Ѐ             %              ,                  >N	       Ԁ              N	 ?   ?   Ѐ<                0                             N	       Ԁ              *O	 ?   ?   Ѐ<                @           ,                 O	       Ԁ              P	 N   N          @                     
+ l                                                                                                             1 N   N                                
 
-       P	 N   N          P                     
+       2 N   N                                
 
-       Q	 N   N   <                P                        
+       3 N   N   <                P                        
      
-        R	       Ԁ              iR	 N   N   <                0                       
+       3       Ԁ              3 N   N   <                0                       
      
-       &S	       Ԁ              S	 N   N                                
-
-       T	 N   N   <                                       
+       4       Ԁ              5 N   N   <                                       
      
-       VV	       Ԁ              W	       <                0                E      @  
+       V7       Ԁ              8       <                0                E      @  
 
  
- l                                                                                                             W	       Ԁ              /X	       <                P                E      @  
+ l                                                                                                             9       Ԁ              9       <                P                E      @  
 
  
- l                                                                                                             $Y	       Ԁ                      <                @                 E     @  
+ l                                                                                                             :       Ԁ              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                                                                                                                     Ԁ              o        <                `                E     @  
+ 	 l                                                                                                                     Ԁ                      <                `                E     @  
 
- 	 l                                                                                                             c        Ԁ                      <                `                 E     @  
+ 	 l                                                                                                                     Ԁ              [        <                `                 E     @  
 
- 	 l                                                                                                                     Ԁ              {        <                @                E     @  
+ 	 l                                                                                                             k        Ԁ                      <                @                E     @  
 
- 	 l                                                                                                                     Ԁ                F   F               P\.         $0H`lx
- -&rmesh         F   F               `S.         $0H`lx
+ 	 l                                                                                                             4        Ԁ                F   F               @\.         $0H`lx
+ -&rmesh         F   F               @S.         $0H`lx
  ].u'rmesh       O A   A               
 /         $0H`lx .rmesh       @       <                p                 E     @  
 
- 	 l                                                                                                             4       Ԁ              g       <                p                 E     @  
+ 	 l                                                                                                             4       Ԁ                     <                p                 E     @  
 
- 	 l                                                                                                             w       Ԁ              8       <                                 E     @  
+ 	 l                                                                                                                    Ԁ              8       <                                 E     @  
 
  
- l                                                                                                             H       Ԁ                     <                P                E     @  
+ l                                                                                                             H       Ԁ                     <                P                E     @  
 
  
- l                                                                                                                    Ԁ                     <                                 E     @  
+ l                                                                                                             F       Ԁ                     <                                 E     @  
 
  
- l                                                                                                                    Ԁ                      <                P                E     @  
+ l                                                                                                             v        Ԁ              !       <                P                E     @  
 
  
- l                                                                                                             !       Ԁ              !       <                                E     @  
+ l                                                                                                             !       Ԁ              s"       <                                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                                                                                                             h#       Ԁ              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                                                                                                                      Ԁ                      <                                E     @  
+ 	 l                                                                                                                     Ԁ              x        <                                E     @  
 
- 	 l                                                                                                                     Ԁ                      <                                 E     @  
+ 	 l                                                                                                             l        Ԁ                      <                                 E     @  
 
- 	 l                                                                                                                     Ԁ              x        <                `                E     @  
+ 	 l                                                                                                                     Ԁ              F        <                `                E     @  
 
- 	 l                                                                                                                     Ԁ                F   F               p(=         $0H`lx
- -=(6rmesh         F   F               =         $0H`lx
+ 	 l                                                                                                                     Ԁ                F   F               `(=         $0H`lx
+ -=(6rmesh         F   F               `=         $0H`lx
  =6rmesh       O A   A               0JX>         $0H`lx =rmesh       @       <                                 E     @  
 
- 	 l                                                                                                             4       Ԁ                     <                                 E     @  
+ 	 l                                                                                                             4       Ԁ              z       <                                 E     @  
 
- 	 l                                                                                                             '       Ԁ              8       <                                 E     @  
+ 	 l                                                                                                                    Ԁ              8       <                                 E     @  
 
  
- l                                                                                                             H       Ԁ                     <                p                E     @  
+ l                                                                                                             H       Ԁ                     <                p                E     @  
 
  
- l                                                                                                                    Ԁ                     <                0                E     @  
+ l                                                                                                                    Ԁ                      <                0                E     @  
 
  
- l                                                                                                                    Ԁ                      <                p                E     @  
+ l                                                                                                             /        Ԁ              !       <                p                E     @  
 
  
- l                                                                                                                     Ԁ              T!       <                                E     @  
+ l                                                                                                             "!       Ԁ              !       <                                E     @  
 
  
- l                                                                                                             I"       Ԁ              7 F   F               H@E         $0H`lx
- D=rmesh       a F   F               jE         $0H`lx
+ 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               @jE         $0H`lx kErmesh    
\ No newline at end of file
diff -Naur ns-3.25/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap ns-3.26/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	2016-10-03 20:57:08.367246701 -0700
+++ ns-3.26/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap	2016-10-03 19:49:01.669387489 -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        8  >   >   Ѐ<                    $0H`lrmeshq   9u         H        Ԁ                 <   <   Ѐ<                0    $0H`lq  9u          M        Ԁ                 >   >   Ѐ<                @   $0H`lrmeshq  9u         *        Ԁ               ϙ  <   <   Ѐ<                     $0H`lq  9u          ߙ        Ԁ                 A   A                           $0H`lx  rmesh                Ԁ                 <   <   Ѐ<                0    $0H`lq  9u          Y  >   >   Ѐ<                @   $0H`lrmeshq  9u         v        Ԁ                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
@@ -6,135 +6,138 @@
  rmesh       +b F   F               p          $0H`lx
  zrmesh         N   N                                 
 
-         N   N                                
+         N   N          `                      
 
-         E   E   Ѐ             %                                   ?   ?   Ѐ<                                                         Ԁ              =  ?   ?   Ѐ<                                              a        Ԁ                N   N   <                                        
+         N   N                                
+
+       2  E   E   Ѐ             %                                 ]  ?   ?   Ѐ<                                                         Ԁ                ?   ?   Ѐ<                                              ?        Ԁ              )  N   N   <                                        
      
-               Ԁ              s        <                                  E      @  
+       9        Ԁ                      <                                  E      @  
 
- 	 l                                                                                                                     Ԁ              3        <                                 E      @  
+ 	 l                                                                                                             %        Ԁ              j        <                                 E      @  
 
- 	 l                                                                                                               N   N                                
+ 	 l                                                                                                             !  N   N                                
 
-       &  N   N   <                                        
+       ?"  N   N   <                                        
      
-               Ԁ                 N   N   <                                       
+       "        Ԁ              #  N   N   <                                       
      
-       p"        Ԁ              #        <                                E      @  
+       }$  A   A               p          $0H`lx zrmesh       %        Ԁ              B'        <                                E      @  
 
- 	 l                                                                                                             #        Ԁ              }$  A   A               p          $0H`lx zrmesh       $  N   N                                
+ 	 l                                                                                                             R'        Ԁ              '  N   N                                
 
-       %  N   N                                
+       )  N   N                                
 
        (  F   F                         $0H`lx
  rmesh         F   F                E         $0H`lx
  3rmesh       0 N   N                                 
 
-       1 N   N                                
+       1       Ԁ              2 N   N                                
 
-       1       Ԁ              {2 N   N                                
+       e3 N   N                                
 
-       b4       <                                  E      @  
+       4       <                                  E      @  
 
- 	 l                                                                                                             v9 N   N   <                0                        
+ 	 l                                                                                                             <: N   N   <                0                        
      
-       : N   N                                
+       ?; N   N                                
 
-       : N   N                                
+       <       Ԁ              O= N   N                                
 
-       ; N   N                                
+       > N   N                                
 
-       <       Ԁ               N   N                                
+        N   N                                
 
-        N   N                                
+       *  N   N                                
 
-         N   N                                
+       _! N   N                                
 
-       ! E   E   Ѐ             %                                    ! ?   ?   Ѐ<                              ,                 w"       Ԁ              "# N   N   <                                         
+       X" E   E   Ѐ             %                                    z" ?   ?   Ѐ<                              ,                 "#       Ԁ              # E   E   Ѐ             %                                 $ N   N   <                                         
      
-       2#       Ԁ              # N   N   <                                        
+       $       Ԁ              % N   N   <                                        
      
-       F$       Ԁ              $ E   E   Ѐ             %                                 % N   N   <                @                       
+       N&       Ԁ              ' N   N   <                @                       
      
-       & 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      @  
+       I( E   E   Ѐ             %              ,                  /)       Ԁ              *       Ԁ              6+ ?   ?   Ѐ<                                             F+       Ԁ              + ?   ?   Ѐ<                           ,                 N,       Ԁ              Z.       <                                 E      @  
 
  
- l                                                                                                             I	       Ԁ              I	       <                                 E      @  
+ l                                                                                                             j.       Ԁ              /       <                                 E      @  
 
  
- l                                                                                                             BK	       Ԁ              K	 N   N                                 
+ l                                                                                                             W0       Ԁ              1 N   N                                 
 
-       L	 E   E   Ѐ            0%                                 L	 E   E   Ѐ             %              ,                  N	 ?   ?   Ѐ<                                                 N	       Ԁ              `N	 ?   ?   Ѐ<                0                             	O	       Ԁ              O	 ?   ?   Ѐ<                @           ,                 P	 N   N          @                     
+       H1 N   N                                
 
-       EQ	 N   N          P                     
+       2 N   N                                
 
-       -R	       Ԁ              R	 N   N   <                0                       
+       3       Ԁ              {4 N   N   <                0                       
      
-       R	       Ԁ              *T	 N   N   <                                       
+       4       Ԁ              5 N   N   <                                       
      
-       T	       Ԁ              V	       <                                 E      @  
+       5       Ԁ              7       <                                 E      @  
 
  
- l                                                                                                             *V	       Ԁ              V	       <                0                E      @  
+ l                                                                                                             *7       Ԁ              7       <                0                E      @  
 
  
- l                                                                                                             X	       Ԁ              X	       <                P                E      @  
+ l                                                                                                             19       Ԁ              :       <                P                E      @  
 
  
- l                                                                                                                       <                @                 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                                                                                                             D        Ԁ              '        <                `                E     @  
+ 	 l                                                                                                             D        Ԁ                      <                `                E     @  
 
- 	 l                                                                                                                     Ԁ                      <                @                E     @  
+ 	 l                                                                                                                     Ԁ                      <                @                E     @  
 
- 	 l                                                                                                                     Ԁ              }$  A   A                -         $0H`lx &rmesh       (  F   F               P\.         $0H`lx
- -&rmesh         F   F               `S.         $0H`lx
+ 	 l                                                                                                                     Ԁ              }$  A   A                -         $0H`lx &rmesh       (  F   F               @\.         $0H`lx
+ -&rmesh         F   F               @S.         $0H`lx
  ].u'rmesh              <                p                 E     @  
 
- 	 l                                                                                                                    Ԁ              t       Ԁ                     <                P                E     @  
+ 	 l                                                                                                                    Ԁ              t       Ԁ              
+       <                P                E     @  
 
  
- l                                                                                                                    Ԁ                     <                                 E     @  
+ l                                                                                                                    Ԁ                     <                                 E     @  
 
  
- l                                                                                                             S       Ԁ                     <                                  E     @  
+ l                                                                                                                    Ԁ              :        <                                  E     @  
 
  
- l                                                                                                                    Ԁ                     <                P                E     @  
+ l                                                                                                             J        Ԁ                      <                P                E     @  
 
  
- l                                                                                                             :!       Ԁ              S"       <                                E     @  
+ l                                                                                                             $"       Ԁ              +#       <                                E     @  
 
  
- 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
+ l                                                                                                              A   A                5         $0H`lx ].rmesh       H7 F   F               P5         $0H`lx
+ 5.rmesh       +b F   F               Ps(6         $0H`lx
  5/rmesh                 <                `                 E     @  
 
- 	 l                                                                                                                      Ԁ                      <                                E     @  
+ 	 l                                                                                                             D        Ԁ              0        <                                E     @  
 
- 	 l                                                                                                             3        Ԁ                      <                `                E     @  
+ 	 l                                                                                                                     Ԁ              O        <                `                E     @  
 
- 	 l                                                                                                                     Ԁ              }$  A   A                -=         $0H`lx 5rmesh       (  F   F               p(=         $0H`lx
- -=(6rmesh         F   F               =         $0H`lx
+ 	 l                                                                                                             _        Ԁ              }$  A   A               -=         $0H`lx 5rmesh       (  F   F               `(=         $0H`lx
+ -=(6rmesh         F   F               `=         $0H`lx
  =6rmesh              <                                 E     @  
 
- 	 l                                                                                                             S       Ԁ              t       Ԁ                     <                p                E     @  
+ 	 l                                                                                                                    Ԁ              t       Ԁ              i       <                p                E     @  
 
  
- l                                                                                                                    Ԁ                     <                0                E     @  
+ l                                                                                                             y       Ԁ                     <                0                E     @  
 
  
- l                                                                                                             S       Ԁ                     <                0                 E     @  
+ l                                                                                                             ]       Ԁ                     <                0                 E     @  
 
  
- l                                                                                                                    Ԁ                     <                p                E     @  
+ l                                                                                                                     Ԁ              Z        <                p                E     @  
 
  
- l                                                                                                                     Ԁ              "       <                                E     @  
+ l                                                                                                             N!       Ԁ              U"       <                                E     @  
 
  
- 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
+ l                                                                                                              A   A                -D         $0H`lx =rmesh       H7 F   F               pH@E         $0H`lx
+ D=rmesh       +b F   F               pjE         $0H`lx
  @EX>rmesh    
\ No newline at end of file
diff -Naur ns-3.25/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap ns-3.26/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	2016-10-03 20:57:08.367246701 -0700
+++ ns-3.26/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap	2016-10-03 19:49:01.670387482 -0700
@@ -1,76 +1,75 @@
-ò            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
+ò            i       $  <   <                 $          $0H`lx rmesh        %  >   >   Ѐ<                    $0H`lrmeshq   9u         .%        Ԁ               %  <   <   Ѐ<                     $0H`lq   9u          3&        Ԁ               p&  >   >   Ѐ<                    $0H`lrmeshq   9u         '        Ԁ               '  <   <   Ѐ<                     $0H`lq  9u          '        Ԁ                 A   A                 (          $0H`lx $ rmesh        u        Ԁ                 <   <   Ѐ<                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          `                      
+       i  N   N          `                      
 
-       s  ?   ?   Ѐ<                                                 H        Ԁ              {        <                                  E      @  
+         ?   ?   Ѐ<                                                 e        Ԁ                      <                                  E      @  
 
- 	 l                                                                                                               N   N   <                                        
+ 	 l                                                                                                             "  N   N   <                                        
      
-       #        Ԁ              $  A   A               p          $0H`lx zrmesh       (%  N   N                                
+       $  A   A               p          $0H`lx zrmesh       '        Ԁ              *(  N   N                                
 
-       S%  N   N                                
+       (  N   N                                
 
          F   F                         $0H`lx
- rmesh       1 N   N                                
+ rmesh       2 N   N                                
 
-       1 N   N                                
+       2 N   N                                
 
-       H; N   N                                
+       = N   N                                
 
-       s; N   N                                
+       > N   N                                
 
-       >  N   N                                
+         N   N                                
 
-       i  N   N                                
+         N   N                                
 
-       8! E   E   Ѐ             %                                    ;" ?   ?   Ѐ<                              ,                 K"       Ԁ              " N   N   <                                         
+       ! E   E   Ѐ             %                                    " ?   ?   Ѐ<                              ,                 "       Ԁ              %$ E   E   Ѐ             %                                 P$ N   N   <                                         
      
-       _#       Ԁ              
-$ N   N   <                                        
+       %       Ԁ              & N   N   <                                        
      
-       	% E   E   Ѐ             %                                 - A   A                I&         $0H`lx rmesh       7 F   F               Ȼ&         $0H`lx
- J&Ermesh       I	       Ԁ              K	       <                                 E      @  
+       r+       Ԁ              , ?   ?   Ѐ<                           ,                 ",       Ԁ              .       Ԁ              0       <                                 E      @  
 
  
- l                                                                                                             K	       Ԁ              lK	 N   N                                 
+ l                                                                                                             *0       Ԁ              0 N   N                                 
 
-       tM	 E   E   Ѐ             %              ,                  M	 ?   ?   Ѐ<                                                 >N	       Ԁ              N	 ?   ?   Ѐ<                0                             P	 N   N          @                     
+       1 N   N                                
 
-       &S	       Ԁ              T	 N   N   <                                       
+       4       Ԁ              5 N   N   <                                       
      
-       T	       Ԁ              U	       <                                 E      @  
+       5       Ԁ              6       <                                 E      @  
 
  
- l                                                                                                             VV	       Ԁ              W	       <                0                E      @  
+ l                                                                                                             V7       Ԁ              8       <                0                E      @  
 
  
- l                                                                                                                     <                @                 E     @  
+ l                                                                                                             - A   A                I&         $0H`lx rmesh       7 F   F               0Ȼ&         $0H`lx
+ J&Ermesh               <                @                 E     @  
 
- 	 l                                                                                                                     Ԁ              $  A   A                -         $0H`lx &rmesh         F   F               P\.         $0H`lx
- -&rmesh              Ԁ                     <                                 E     @  
+ 	 l                                                                                                             4        Ԁ              $  A   A                -         $0H`lx &rmesh         F   F               @\.         $0H`lx
+ -&rmesh       F       Ԁ                     <                                 E     @  
 
  
- l                                                                                                             &       Ԁ              }       <                                  E     @  
+ l                                                                                                                    Ԁ              1       <                                  E     @  
 
  
- l                                                                                                                    Ԁ                      <                P                E     @  
+ l                                                                                                             v        Ԁ              !       <                P                E     @  
 
  
- l                                                                                                             - A   A               5         $0H`lx ].rmesh       7 F   F               `5         $0H`lx
- 5.rmesh                <                `                 E     @  
+ l                                                                                                             - A   A                5         $0H`lx ].rmesh       7 F   F               P5         $0H`lx
+ 5.rmesh               <                `                 E     @  
 
- 	 l                                                                                                                     Ԁ              $  A   A                -=         $0H`lx 5rmesh         F   F               p(=         $0H`lx
- -=(6rmesh              Ԁ                     <                0                E     @  
+ 	 l                                                                                                                     Ԁ              $  A   A               -=         $0H`lx 5rmesh         F   F               `(=         $0H`lx
+ -=(6rmesh              Ԁ                      <                0                E     @  
 
  
- l                                                                                                             &       Ԁ              }       <                0                 E     @  
+ l                                                                                                             0       Ԁ                     <                0                 E     @  
 
  
- l                                                                                                                    Ԁ                      <                p                E     @  
+ l                                                                                                             /        Ԁ              !       <                p                E     @  
 
  
- l                                                                                                             - A   A               0-D         $0H`lx =rmesh       7 F   F               H@E         $0H`lx
+ l                                                                                                             - A   A                -D         $0H`lx =rmesh       7 F   F               pH@E         $0H`lx
  D=rmesh    
\ No newline at end of file
diff -Naur ns-3.25/src/mesh/test/dot11s/pmp-regression-test-0-1.pcap ns-3.26/src/mesh/test/dot11s/pmp-regression-test-0-1.pcap
--- ns-3.25/src/mesh/test/dot11s/pmp-regression-test-0-1.pcap	2016-10-03 20:57:08.368246693 -0700
+++ ns-3.26/src/mesh/test/dot11s/pmp-regression-test-0-1.pcap	2016-10-03 19:49:01.671387474 -0700
@@ -1 +1 @@
-ò            i         <   <                           $0H`lx rmesh          >   >   Ѐ<                    $0H`lrmeshq   9u                 Ԁ               O  <   <   Ѐ<                     $0H`lq   9u          _        Ԁ               +  >   >   Ѐ<                    $0H`lrmeshq   9u         ;        Ԁ                 <   <   Ѐ<                     $0H`lq  9u          -        Ԁ               JO A   A                 JO         $0H`lx  rmesh        #j A   A               0 i         $0H`lx Ormesh        j A   A               0 j         $0H`lx jrmesh    
\ No newline at end of file
+ò            i         <   <                           $0H`lx rmesh        /  >   >   Ѐ<                    $0H`lrmeshq   9u                 Ԁ               s  <   <   Ѐ<                     $0H`lq   9u                  Ԁ               O  >   >   Ѐ<                    $0H`lrmeshq   9u         _        Ԁ                 <   <   Ѐ<                     $0H`lq  9u          l        Ԁ               JO A   A                 JO         $0H`lx  rmesh        #j A   A               0 i         $0H`lx Ormesh        j A   A               0 j         $0H`lx jrmesh    
\ No newline at end of file
diff -Naur ns-3.25/src/mesh/test/dot11s/pmp-regression-test-1-1.pcap ns-3.26/src/mesh/test/dot11s/pmp-regression-test-1-1.pcap
--- ns-3.25/src/mesh/test/dot11s/pmp-regression-test-1-1.pcap	2016-10-03 20:57:08.368246693 -0700
+++ ns-3.26/src/mesh/test/dot11s/pmp-regression-test-1-1.pcap	2016-10-03 19:49:01.671387474 -0700
@@ -1 +1 @@
-ò            i         <   <                           $0H`lx rmesh          >   >   Ѐ<                    $0H`lrmeshq   9u                 Ԁ                 <   <   Ѐ<                     $0H`lq   9u                  Ԁ                 >   >   Ѐ<                    $0H`lrmeshq   9u         g        Ԁ                 <   <   Ѐ<                     $0H`lq  9u                  Ԁ               O A   A                 JO         $0H`lx  rmesh        i A   A               0 i         $0H`lx Ormesh         A   A               0 j         $0H`lx jrmesh    
\ No newline at end of file
+ò            i         <   <                           $0H`lx rmesh          >   >   Ѐ<                    $0H`lrmeshq   9u                 Ԁ                 <   <   Ѐ<                     $0H`lq   9u                  Ԁ                 >   >   Ѐ<                    $0H`lrmeshq   9u                 Ԁ               0  <   <   Ѐ<                     $0H`lq  9u          @        Ԁ               O A   A                 JO         $0H`lx  rmesh        i A   A               0 i         $0H`lx Ormesh         A   A               0 j         $0H`lx jrmesh    
\ No newline at end of file
diff -Naur ns-3.25/src/mesh/test/flame/flame-regression-test-0-1.pcap ns-3.26/src/mesh/test/flame/flame-regression-test-0-1.pcap
--- ns-3.25/src/mesh/test/flame/flame-regression-test-0-1.pcap	2016-10-03 20:57:08.371246669 -0700
+++ ns-3.26/src/mesh/test/flame/flame-regression-test-0-1.pcap	2016-10-03 19:49:01.673387459 -0700
@@ -1,79 +1,80 @@
-ò            i      t$  Z   Z                      @@               
+ò            i      $  Z   Z                      @@               
 
-       $  Z   Z   <                            @@                     
+       %  Z   Z   <                            @@                     
      
-       l%        Ԁ              9&  Z   Z   <                            @@                    
+       %        Ԁ              &  Z   Z   <                            @@                    
      
-       &  Z   Z                      @@               
+       B'  Z   Z                      @@               
 
-       )        Ԁ              *  n   n   <                            @@             E  0    @  
+       *        Ԁ              +  n   n   <                            @@             E  0    @  
 
- 	                              *        Ԁ              *  >   >                     @@                 C,  >   >                     @@                M  Z   Z                      @@                
+ 	                              +        Ԁ              z,  >   >                     @@                 -  >   >                     @@                N  Z   Z                      @@                
 
-       O  Z   Z                      @@               
+       P  Z   Z                      @@               
 
-       O        Ԁ              Q  Z   Z   <                           @@                    
+       Q        Ԁ              S  Z   Z   <                           @@                    
      
-       Q        Ԁ              =R  n   n   <                           @@              E  0    @  
+       S        Ԁ              T  n   n   <                           @@              E  0    @  
 
- 	                              &S        Ԁ              T  n   n   <                           @@             E  0    @  
+ 	                              U        Ԁ              V  n   n   <                           @@             E  0    @  
 
- 	                                     Ԁ              ` n   n   <                            @@             E  0    @  
+ 	                                     Ԁ              r n   n   <                            @@             E  0   @  
 
- 	                              p       Ԁ              ǈ n   n   <                            @@              E  0    @  
+ 	                                     Ԁ              ! n   n   <                            @@              E  0   @  
 
- 	                                     Ԁ               n   n   <                            @@             E  0    @  
+ 	                              
+       Ԁ               n   n   <                            @@             E  0   @  
 
- 	                              )       Ԁ                n   n   <                0           @@             E  0    @  
+ 	                              )       Ԁ              Z n   n   <                0           @@             E  0   @  
 
- 	                                     Ԁ              g n   n   <                0           @@              E  0    @  
+ 	                              j       Ԁ               n   n   <                0           @@              E  0   @  
 
- 	                              P       Ԁ              ' n   n   <                0           @@             E  0    @  
+ 	                                     Ԁ               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    @  
+ 	                                     Ԁ              i n   n   <                @           @@             E  0   @  
 
- 	                              i       Ԁ              @ n   n   <                P           @@             E  0    @  
+ 	                              i       Ԁ               n   n   <                P           @@             E  0   @  
 
- 	                              P       Ԁ               n   n   <                P           @@              E  0    @  
+ 	                                     Ԁ              d n   n   <                P           @@              E  0   @  
 
- 	                              Y n   n   <                P           @@              E  0    @  
+ 	                               n   n   <                P           @@              E  0   @  
 
- 	                              B       Ԁ                n   n   <                P           @@             E  0    @  
+ 	                                      Ԁ              f! n   n   <                P           @@             E  0   @  
 
- 	                               n   n               0           @@             E  0    @  
+ 	                               n   n               0           @@             E  0   @  
 
- 	                              Ϣ >   >          0           @@   	              f n   n   <                `           @@   
-           E  0    @  
+ 	                               >   >          0           @@   	              t 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   <                `           @@  	           E  0   @  
 
- 	                              )	       Ԁ              )	 n   n   <                p           @@              E  0    @  
+ 	                              )	       Ԁ              8*	 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
-       Ԁ              G
- n   n   <                           @@             E  0    @  
+ 	                              
+       Ԁ              
+ n   n   <                           @@             E  0   @  
 
- 	                           	   9 n   n   <                           @@             E  0    @  
+ 	                           	   9 n   n   <                           @@             E  0   @  
 
- 	                           	   9       Ԁ           
\ No newline at end of file
+ 	                           	   9       Ԁ           
\ No newline at end of file
diff -Naur ns-3.25/src/mesh/test/flame/flame-regression-test-1-1.pcap ns-3.26/src/mesh/test/flame/flame-regression-test-1-1.pcap
--- ns-3.25/src/mesh/test/flame/flame-regression-test-1-1.pcap	2016-10-03 20:57:08.371246669 -0700
+++ ns-3.26/src/mesh/test/flame/flame-regression-test-1-1.pcap	2016-10-03 19:49:01.674387452 -0700
@@ -1,104 +1,104 @@
 ò            i      #  Z   Z                      @@                
 
-       #  Z   Z                      @@               
+       #  Z   Z                      @@               
 
-       /%  Z   Z   <                            @@                     
+       %  Z   Z   <                            @@                     
      
-       ?%        Ԁ              %  Z   Z   <                            @@                    
+       %        Ԁ              /&  Z   Z   <                            @@                    
      
-       u&        Ԁ              |)  n   n   <                            @@              E  0    @  
+       &        Ԁ              *  n   n   <                            @@              E  0    @  
 
- 	                              )        Ԁ              )  n   n   <                            @@             E  0    @  
+ 	                              *        Ԁ              +  n   n   <                            @@             E  0    @  
 
- 	                              *        Ԁ              c+  >   >                     @@                 +  >   >                     @@                ,  >   >                     @@                HN  Z   Z                      @@                
+ 	                              +        Ԁ              ,  >   >                     @@                 -  >   >                     @@                K.  >   >                     @@                hO  Z   Z                      @@                
 
-       sN  Z   Z                      @@               
+       P  Z   Z                      @@               
 
-       O  Z   Z   <                           @@                     
+       Q  Z   Z   <                           @@                     
      
-       O        Ԁ              P  Z   Z                      @@               
+       Q        Ԁ              S  Z   Z                      @@               
 
-       EQ  Z   Z   <                           @@                    
+       FS  Z   Z   <                           @@                    
      
-       R        Ԁ              R  n   n   <                           @@              E  0    @  
+       T        Ԁ              _U  n   n   <                           @@              E  0    @  
 
- 	                              R        Ԁ              kS  n   n   <                           @@             E  0    @  
+ 	                              oU        Ԁ              U  n   n   <                           @@             E  0    @  
 
- 	                              TT        Ԁ              L n   n   <                            @@              E  0    @  
+ 	                              V        Ԁ              L n   n   <                            @@              E  0   @  
 
- 	                              \       Ԁ               n   n   <                            @@             E  0    @  
+ 	                              \       Ԁ              Ň n   n   <                            @@             E  0   @  
 
- 	                                     Ԁ              s n   n   <                            @@              E  0    @  
+ 	                                     Ԁ              ͉ n   n   <                            @@              E  0   @  
 
- 	                                     Ԁ               n   n   <                            @@             E  0    @  
+ 	                              ݉       Ԁ              4 n   n   <                            @@             E  0   @  
 
- 	                              ފ       Ԁ               n   n   <                0           @@              E  0    @  
+ 	                                     Ԁ               n   n   <                0           @@              E  0   @  
 
- 	                                     Ԁ              S n   n   <                0           @@             E  0    @  
+ 	                                     Ԁ               n   n   <                0           @@             E  0   @  
 
- 	                              <       Ԁ               n   n   <                0           @@              E  0    @  
+ 	                                     Ԁ              m n   n   <                0           @@              E  0   @  
 
- 	                              #       Ԁ              z n   n   <                0           @@             E  0    @  
+ 	                              }       Ԁ               n   n   <                0           @@             E  0   @  
 
- 	                              c       Ԁ               n   n   <                @           @@              E  0    @  
+ 	                                     Ԁ               n   n   <                @           @@              E  0   @  
 
- 	                                     Ԁ               n   n   <                @           @@             E  0    @  
+ 	                                     Ԁ               n   n   <                @           @@             E  0   @  
 
- 	                              ܕ       Ԁ               n   n   <                @           @@              E  0    @  
+ 	                                     Ԁ              L n   n   <                @           @@              E  0   @  
 
- 	                              Ö       Ԁ              k n   n   <                @           @@             E  0    @  
+ 	                              \       Ԁ               n   n   <                @           @@             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    @  
+ 	                                     Ԁ               n   n   <                P           @@              E  0   @  
 
- 	                                     Ԁ              l n   n   <                P           @@             E  0    @  
+ 	                                     Ԁ                n   n   <                P           @@             E  0   @  
 
- 	                              U        Ԁ              ̡ n   n               0           @@              E  0    @  
+ 	                              !       Ԁ              ̡ n   n               0           @@              E  0   @  
 
- 	                               n   n               0           @@             E  0    @  
+ 	                              Z n   n               0           @@             E  0   @  
 
- 	                              ; >   >          0           @@   	               n   n   <                `           @@   
-           E  0    @  
+ 	                               >   >          0           @@   	                n   n   <                `           @@   
+           E  0   @  
 
- 	                              "       Ԁ              ʤ >   >          @           @@  	              Υ >   >          @           @@  	              J n   n   <                `           @@  
-           E  0    @  
+ 	                              0       Ԁ               >   >          @           @@  	               >   >          @           @@  	              + 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   @  
 
- 	                              +	       Ԁ              
+ 	                              j,	       Ԁ              
  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    @  
+ 	                              
+       Ԁ              i
+ n   n   <                           @@             E  0   @  
 
- 	                              
-       Ԁ           	   6 n   n   <                           @@              E  0    @  
+ 	                              R
+       Ԁ           	   g7 n   n   <                           @@              E  0   @  
 
- 	                           	   6       Ԁ           	   P7 n   n   <                           @@             E  0    @  
+ 	                           	   w7       Ԁ           	   7 n   n   <                           @@             E  0   @  
 
- 	                           	   8 n   n   <                           @@             E  0    @  
+ 	                           	   9 n   n   <                           @@             E  0   @  
 
- 	                           	   9       Ԁ           
\ No newline at end of file
+ 	                           	   9       Ԁ           
\ No newline at end of file
diff -Naur ns-3.25/src/mesh/test/flame/flame-regression-test-2-1.pcap ns-3.26/src/mesh/test/flame/flame-regression-test-2-1.pcap
--- ns-3.25/src/mesh/test/flame/flame-regression-test-2-1.pcap	2016-10-03 20:57:08.372246662 -0700
+++ ns-3.26/src/mesh/test/flame/flame-regression-test-2-1.pcap	2016-10-03 19:49:01.674387452 -0700
@@ -1,82 +1,83 @@
 ò            i      (#  Z   Z                      @@                
 
-       t$  Z   Z                      @@               
+       $  Z   Z                      @@               
 
-       l%        Ԁ              9&  Z   Z   <                            @@                    
+       %        Ԁ              &  Z   Z   <                            @@                    
      
-       I&        Ԁ              &  n   n   <                            @@              E  0    @  
+       &        Ԁ              '  n   n   <                            @@              E  0    @  
 
- 	                              (  n   n   <                            @@              E  0    @  
+ 	                              )  n   n   <                            @@              E  0    @  
 
- 	                              )        Ԁ              *  n   n   <                            @@             E  0    @  
+ 	                              *        Ԁ              +  n   n   <                            @@             E  0    @  
 
- 	                              C,  >   >                     @@                n,  >   >                     @@                O  Z   Z                      @@               
+ 	                              -  >   >                     @@                -  >   >                     @@                P  Z   Z                      @@               
 
-       /O  Z   Z   <                           @@                     
+       0Q  Z   Z   <                           @@                     
      
-       O        Ԁ              TP  Z   Z                      @@               
+       Q        Ԁ              R  Z   Z                      @@               
 
-       Q  Z   Z   <                           @@                    
+       S  Z   Z   <                           @@                    
      
-       &S        Ԁ              T  n   n   <                           @@             E  0    @  
+       U        Ԁ              V  n   n   <                           @@             E  0    @  
 
- 	                              (T        Ԁ               n   n   <                            @@              E  0    @  
+ 	                              V        Ԁ               n   n   <                            @@              E  0   @  
 
- 	                                     Ԁ              ` n   n   <                            @@             E  0    @  
+ 	                                     Ԁ              r 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    @  
+ 	                              )       Ԁ              Z n   n   <                0           @@             E  0   @  
 
- 	                              P       Ԁ              ' n   n   <                0           @@             E  0    @  
+ 	                                     Ԁ               n   n   <                0           @@             E  0   @  
 
- 	                              7       Ԁ               n   n   <                @           @@              E  0    @  
+ 	                                     Ԁ               n   n   <                @           @@              E  0   @  
 
- 	                              ɔ       Ԁ               n   n   <                @           @@             E  0    @  
+ 	                              ɔ       Ԁ               n   n   <                @           @@             E  0   @  
 
- 	                                     Ԁ               n   n   <                @           @@             E  0    @  
+ 	                                     Ԁ              i n   n   <                @           @@             E  0   @  
 
- 	                              (       Ԁ               n   n   <                P           @@              E  0    @  
+ 	                              y       Ԁ               n   n   <                P           @@              E  0   @  
 
- 	                              i       Ԁ              @ n   n   <                P           @@             E  0    @  
+ 	                              i       Ԁ               n   n   <                P           @@             E  0   @  
 
- 	                              B       Ԁ                n   n   <                P           @@             E  0    @  
+ 	                                      Ԁ              f! n   n   <                P           @@             E  0   @  
 
- 	                              )        Ԁ                n   n               0           @@              E  0    @  
+ 	                              v!       Ԁ                n   n               0           @@              E  0   @  
 
- 	                               n   n               0           @@             E  0    @  
+ 	                               n   n               0           @@             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   <                `           @@  	           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
-       Ԁ              G
- n   n   <                           @@             E  0    @  
+ 	                              
+       Ԁ              
+ n   n   <                           @@             E  0   @  
 
- 	                              W
-       Ԁ           	    5 n   n   <                           @@              E  0    @  
+ 	                              &
+       Ԁ           	    5 n   n   <                           @@              E  0   @  
 
- 	                           	   =6 n   n   <                           @@              E  0    @  
+ 	                           	   6 n   n   <                           @@              E  0   @  
 
- 	                           	   &7       Ԁ           	   7 n   n   <                           @@             E  0    @  
+ 	                           	   7       Ԁ           	   {8 n   n   <                           @@             E  0   @  
 
- 	                           	   9 n   n   <                           @@             E  0    @  
+ 	                           	   9 n   n   <                           @@             E  0   @  
 
  	                           
\ No newline at end of file
diff -Naur ns-3.25/src/mobility/bindings/modulegen__gcc_ILP32.py ns-3.26/src/mobility/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/mobility/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.378246615 -0700
+++ ns-3.26/src/mobility/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.680387407 -0700
@@ -82,6 +82,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -176,6 +178,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -234,6 +240,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -424,6 +432,8 @@
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -1614,23 +1624,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1745,6 +1755,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -1766,10 +1781,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -1791,6 +1806,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -1806,6 +1825,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Vector2D_methods(root_module, cls):
@@ -1956,6 +1979,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3052,6 +3080,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -3714,16 +3806,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -3751,35 +3858,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -4038,6 +4140,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/mobility/bindings/modulegen__gcc_LP64.py ns-3.26/src/mobility/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/mobility/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.381246592 -0700
+++ ns-3.26/src/mobility/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.683387385 -0700
@@ -82,6 +82,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -176,6 +178,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -234,6 +240,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -424,6 +432,8 @@
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -1614,23 +1624,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1745,6 +1755,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -1766,10 +1781,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -1791,6 +1806,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -1806,6 +1825,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Vector2D_methods(root_module, cls):
@@ -1956,6 +1979,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3052,6 +3080,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -3714,16 +3806,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -3751,35 +3858,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -4038,6 +4140,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/mobility/examples/mobility-trace-example.cc ns-3.26/src/mobility/examples/mobility-trace-example.cc
--- ns-3.25/src/mobility/examples/mobility-trace-example.cc	2016-10-03 20:57:08.386246553 -0700
+++ ns-3.26/src/mobility/examples/mobility-trace-example.cc	2016-10-03 19:49:01.688387347 -0700
@@ -26,6 +26,9 @@
 
 int main (int argc, char *argv[])
 {
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
   NodeContainer sta;
   sta.Create (4);
   MobilityHelper mobility;
diff -Naur ns-3.25/src/mobility/model/position-allocator.cc ns-3.26/src/mobility/model/position-allocator.cc
--- ns-3.25/src/mobility/model/position-allocator.cc	2016-10-03 20:57:08.395246483 -0700
+++ ns-3.26/src/mobility/model/position-allocator.cc	2016-10-03 19:49:01.697387280 -0700
@@ -36,7 +36,8 @@
 PositionAllocator::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::PositionAllocator")
-    .SetParent<Object> ();
+    .SetParent<Object> ()
+    .SetGroupName ("Mobility");
   return tid;
 }
 
@@ -55,6 +56,7 @@
 {
   static TypeId tid = TypeId ("ns3::ListPositionAllocator")
     .SetParent<PositionAllocator> ()
+    .SetGroupName ("Mobility")
     .AddConstructor<ListPositionAllocator> ()
   ;
   return tid;
diff -Naur ns-3.25/src/mobility/model/waypoint-mobility-model.cc ns-3.26/src/mobility/model/waypoint-mobility-model.cc
--- ns-3.25/src/mobility/model/waypoint-mobility-model.cc	2016-10-03 20:57:08.400246444 -0700
+++ ns-3.26/src/mobility/model/waypoint-mobility-model.cc	2016-10-03 19:49:01.702387243 -0700
@@ -95,7 +95,7 @@
 
   if ( !m_lazyNotify )
     {
-      Simulator::Schedule (waypoint.time, &WaypointMobilityModel::Update, this);
+      Simulator::Schedule (waypoint.time - Simulator::Now (), &WaypointMobilityModel::Update, this);
     }
 }
 Waypoint
diff -Naur ns-3.25/src/mobility/test/waypoint-mobility-model-test.cc ns-3.26/src/mobility/test/waypoint-mobility-model-test.cc
--- ns-3.25/src/mobility/test/waypoint-mobility-model-test.cc	2016-10-03 20:57:08.405246405 -0700
+++ ns-3.26/src/mobility/test/waypoint-mobility-model-test.cc	2016-10-03 19:49:01.707387206 -0700
@@ -49,7 +49,7 @@
   virtual void DoRun (void);
   virtual void DoTeardown (void);
   void ForceUpdates (void);
-  void CourseChangeCallback (std::string path, Ptr<const MobilityModel> model);
+  void CourseChangeCallback (Ptr<const MobilityModel> model);
 };
 
 void
@@ -94,6 +94,7 @@
   for (i = mobilityStack.begin (); i != mobilityStack.end (); ++i)
     {
       Ptr<WaypointMobilityModel> mob = (*i)->GetObject<WaypointMobilityModel> ();
+      mob->TraceConnectWithoutContext ("CourseChange", MakeCallback (&WaypointMobilityModelNotifyTest::CourseChangeCallback, this));
 
       for ( std::deque<Waypoint>::iterator w = waypoints.begin (); w != waypoints.end (); ++w )
         {
@@ -107,9 +108,6 @@
       Simulator::Schedule (Seconds (updateTime), &WaypointMobilityModelNotifyTest::ForceUpdates, this);
     }
 
-  Config::Connect ("/NodeList/*/$ns3::WaypointMobilityModel/CourseChange",
-                   MakeCallback (&WaypointMobilityModelNotifyTest::CourseChangeCallback, this));
-
   Simulator::Stop (Seconds ((double)waypointCount + 2.0));
   Simulator::Run ();
   Simulator::Destroy ();
@@ -125,7 +123,7 @@
     }
 }
 void
-WaypointMobilityModelNotifyTest::CourseChangeCallback (std::string path, Ptr<const MobilityModel> model)
+WaypointMobilityModelNotifyTest::CourseChangeCallback (Ptr<const MobilityModel> model)
 {
   const Time now = Simulator::Now ();
   const double sec = now.GetSeconds ();
@@ -137,7 +135,7 @@
     {
       // All waypoints are on second boundaries only
       NS_TEST_EXPECT_MSG_EQ (sec - ((double)((int)sec)) + sec, sec,
-                             "Course didn't change on one second time boundary with NON-LAZY notifcations");
+                             "Course didn't change on one second time boundary with NON-LAZY notifications");
     }
   else
     {
@@ -147,11 +145,86 @@
     }
 }
 
+class WaypointMobilityModelAddWaypointTest : public TestCase
+{
+public:
+  WaypointMobilityModelAddWaypointTest ()
+    : TestCase ("Check Waypoint Mobility Model waypoint add")
+  {
+  }
+  virtual ~WaypointMobilityModelAddWaypointTest ()
+  {
+  }
+
+private:
+  Ptr<MobilityModel> m_mobilityModel;
+  uint32_t m_waypointCount;
+  uint32_t m_waypointCounter;
+  Waypoint m_nextWaypoint;
+private:
+  virtual void DoRun (void);
+  virtual void DoTeardown (void);
+  void CourseChangeCallback (Ptr<const MobilityModel> model);
+};
+
+
+void
+WaypointMobilityModelAddWaypointTest::DoTeardown (void)
+{
+  m_mobilityModel = 0;
+}
+
+void
+WaypointMobilityModelAddWaypointTest::DoRun (void)
+{
+  m_waypointCount = 10;
+  m_waypointCounter = 1;
+
+  ObjectFactory mobilityFactory;
+  mobilityFactory.SetTypeId ("ns3::WaypointMobilityModel");
+  mobilityFactory.Set ("LazyNotify", BooleanValue (false));
+
+  // Create a new mobility model.
+  m_mobilityModel = mobilityFactory.Create ()->GetObject<MobilityModel> ();
+  m_mobilityModel->TraceConnectWithoutContext ("CourseChange", MakeCallback (&WaypointMobilityModelAddWaypointTest::CourseChangeCallback, this));
+
+  // Add this mobility model to the stack.
+  Simulator::Schedule (Seconds (0.0), &Object::Initialize, m_mobilityModel);
+
+  Ptr<WaypointMobilityModel> mob = DynamicCast<WaypointMobilityModel> (m_mobilityModel);
+  Waypoint m_nextWaypoint (Seconds (m_waypointCounter), Vector (0.0, 0.0, 0.0));
+  mob->AddWaypoint (m_nextWaypoint);
+
+  Simulator::Stop (Seconds ((double)m_waypointCount + 2.0));
+  Simulator::Run ();
+  Simulator::Destroy ();
+}
+
+void
+WaypointMobilityModelAddWaypointTest::CourseChangeCallback (Ptr<const MobilityModel> model)
+{
+  const Time now = Simulator::Now ();
+  Ptr<WaypointMobilityModel> mob = DynamicCast<WaypointMobilityModel> (m_mobilityModel);
+
+  std::cout << now << " CourseChangeCallback" << std::endl;
+
+  NS_TEST_EXPECT_MSG_EQ (now, Seconds (m_waypointCounter), "Waypoint time not properly set");
+
+  if (now < Seconds ((double)m_waypointCount) )
+    {
+      m_waypointCounter ++;
+      m_nextWaypoint = Waypoint (Seconds (m_waypointCounter), Vector (0.0, 0.0, 0.0));
+      mob->AddWaypoint (m_nextWaypoint);
+
+    }
+}
+
 static struct WaypointMobilityModelTestSuite : public TestSuite
 {
   WaypointMobilityModelTestSuite () : TestSuite ("waypoint-mobility-model", UNIT)
   {
     AddTestCase (new WaypointMobilityModelNotifyTest (true), TestCase::QUICK);
     AddTestCase (new WaypointMobilityModelNotifyTest (false), TestCase::QUICK);
+    AddTestCase (new WaypointMobilityModelAddWaypointTest (), TestCase::QUICK);
   }
 } g_waypointMobilityModelTestSuite;
diff -Naur ns-3.25/src/mpi/bindings/modulegen__gcc_ILP32.py ns-3.26/src/mpi/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/mpi/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.408246382 -0700
+++ ns-3.26/src/mpi/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.710387183 -0700
@@ -100,6 +100,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -156,6 +158,10 @@
     module.add_class('CallbackImplBase', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     ## callback.h (module 'core'): ns3::CallbackValue [class]
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -313,6 +319,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -546,6 +554,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1822,23 +1835,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1953,6 +1966,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -1974,10 +1992,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -1999,6 +2017,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2014,6 +2036,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -2175,6 +2201,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -2713,6 +2744,70 @@
                    [param('ns3::CallbackBase', 'base')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
diff -Naur ns-3.25/src/mpi/bindings/modulegen__gcc_LP64.py ns-3.26/src/mpi/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/mpi/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.411246359 -0700
+++ ns-3.26/src/mpi/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.713387161 -0700
@@ -100,6 +100,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -156,6 +158,10 @@
     module.add_class('CallbackImplBase', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     ## callback.h (module 'core'): ns3::CallbackValue [class]
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -313,6 +319,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -546,6 +554,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1822,23 +1835,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1953,6 +1966,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -1974,10 +1992,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -1999,6 +2017,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2014,6 +2036,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -2175,6 +2201,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -2713,6 +2744,70 @@
                    [param('ns3::CallbackBase', 'base')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
diff -Naur ns-3.25/src/mpi/model/distributed-simulator-impl.cc ns-3.26/src/mpi/model/distributed-simulator-impl.cc
--- ns-3.25/src/mpi/model/distributed-simulator-impl.cc	2016-10-03 20:57:08.414246335 -0700
+++ ns-3.26/src/mpi/model/distributed-simulator-impl.cc	2016-10-03 19:49:01.716387139 -0700
@@ -115,7 +115,7 @@
   // before ::Run is entered, the m_currentUid will be zero
   m_currentUid = 0;
   m_currentTs = 0;
-  m_currentContext = 0xffffffff;
+  m_currentContext = Simulator::NO_CONTEXT;
   m_unscheduledEvents = 0;
   m_events = 0;
 }
diff -Naur ns-3.25/src/mpi/model/null-message-simulator-impl.cc ns-3.26/src/mpi/model/null-message-simulator-impl.cc
--- ns-3.25/src/mpi/model/null-message-simulator-impl.cc	2016-10-03 20:57:08.418246305 -0700
+++ ns-3.26/src/mpi/model/null-message-simulator-impl.cc	2016-10-03 19:49:01.720387109 -0700
@@ -82,7 +82,7 @@
   // before ::Run is entered, the m_currentUid will be zero
   m_currentUid = 0;
   m_currentTs = 0;
-  m_currentContext = 0xffffffff;
+  m_currentContext = Simulator::NO_CONTEXT;
   m_unscheduledEvents = 0;
   m_events = 0;
 
diff -Naur ns-3.25/src/mpi/wscript ns-3.26/src/mpi/wscript
--- ns-3.25/src/mpi/wscript	2016-10-03 20:57:08.420246289 -0700
+++ ns-3.26/src/mpi/wscript	2016-10-03 19:49:01.722387094 -0700
@@ -24,6 +24,10 @@
             for libpath in conf.env.LIBPATH_MPI:
                 if 'mpi' in libpath:
                     conf.env.append_value('LINKFLAGS_MPI', '-Wl,-rpath,'+libpath)
+                    # Bug #2437, using OpenMPI 1.6.5 (possibly later versions)
+                    # if upstream OpenMPI bug clears at some point, this
+                    # can be removed 
+                    # conf.env.append_value('CXXFLAGS', '-Wno-literal-suffix')
             conf.report_optional_feature("mpi", "MPI Support", True, '')            
         else:
             conf.report_optional_feature("mpi", "MPI Support", False, 'mpic++ not found')
diff -Naur ns-3.25/src/netanim/examples/colors-link-description.cc ns-3.26/src/netanim/examples/colors-link-description.cc
--- ns-3.25/src/netanim/examples/colors-link-description.cc	2016-10-03 20:57:08.453246033 -0700
+++ ns-3.26/src/netanim/examples/colors-link-description.cc	2016-10-03 19:49:01.755386848 -0700
@@ -127,9 +127,9 @@
   // Install on/off app on all right side nodes
   OnOffHelper clientHelper ("ns3::UdpSocketFactory", Address ());
   clientHelper.SetAttribute 
-    ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
+    ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=0.|Max=1.]"));
   clientHelper.SetAttribute 
-    ("OffTime", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
+    ("OffTime", StringValue ("ns3::UniformRandomVariable[Min=0.|Max=1.]"));
   ApplicationContainer clientApps;
 
   for (uint32_t i = 0; i < d.RightCount (); ++i)
diff -Naur ns-3.25/src/netanim/examples/resources-counters.cc ns-3.26/src/netanim/examples/resources-counters.cc
--- ns-3.25/src/netanim/examples/resources-counters.cc	2016-10-03 20:57:08.454246025 -0700
+++ ns-3.26/src/netanim/examples/resources-counters.cc	2016-10-03 19:49:01.756386841 -0700
@@ -153,9 +153,9 @@
   // Install on/off app on all right side nodes
   OnOffHelper clientHelper ("ns3::UdpSocketFactory", Address ());
   clientHelper.SetAttribute 
-    ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
+    ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=0.|Max=1.]"));
   clientHelper.SetAttribute 
-    ("OffTime", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
+    ("OffTime", StringValue ("ns3::UniformRandomVariable[Min=0.|Max=1.]"));
   ApplicationContainer clientApps;
 
   for (uint32_t i = 0; i < d.RightCount (); ++i)
diff -Naur ns-3.25/src/netanim/model/animation-interface.cc ns-3.26/src/netanim/model/animation-interface.cc
--- ns-3.25/src/netanim/model/animation-interface.cc	2016-10-03 20:57:08.459245986 -0700
+++ ns-3.26/src/netanim/model/animation-interface.cc	2016-10-03 19:49:01.761386804 -0700
@@ -1377,9 +1377,9 @@
   // Connect the callbacks
   Config::Connect ("/ChannelList/*/TxRxPointToPoint",
                    MakeCallback (&AnimationInterface::DevTxTrace, this));
-  Config::Connect ("NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/PhyTxBegin",
+  Config::Connect ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/PhyTxBegin",
                    MakeCallback (&AnimationInterface::WifiPhyTxBeginTrace, this));
-  Config::Connect ("NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/PhyRxBegin",
+  Config::Connect ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/PhyRxBegin",
                    MakeCallback (&AnimationInterface::WifiPhyRxBeginTrace, this));
   Config::ConnectWithoutContext ("/NodeList/*/$ns3::MobilityModel/CourseChange",
                    MakeCallback (&AnimationInterface::MobilityCourseChangeTrace, this));
diff -Naur ns-3.25/src/network/bindings/callbacks_list.py ns-3.26/src/network/bindings/callbacks_list.py
--- ns-3.25/src/network/bindings/callbacks_list.py	2016-10-03 20:57:08.463245955 -0700
+++ ns-3.26/src/network/bindings/callbacks_list.py	2016-10-03 19:49:01.764386781 -0700
@@ -6,6 +6,7 @@
     ['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::QueueItem>', '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.25/src/network/bindings/modulegen__gcc_ILP32.py ns-3.26/src/network/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/network/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.469245908 -0700
+++ ns-3.26/src/network/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.771386729 -0700
@@ -146,8 +146,8 @@
     module.add_class('PcapFile')
     ## 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_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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]
@@ -160,6 +160,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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')
     ## system-wall-clock-ms.h (module 'core'): ns3::SystemWallClockMs [class]
@@ -176,6 +178,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -210,22 +214,24 @@
     module.add_class('Queue', 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'])
+    ## queue-limits.h (module 'network'): ns3::QueueLimits [class]
+    module.add_class('QueueLimits', parent=root_module['ns3::Object'])
     ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [class]
     module.add_class('RadiotapHeader', parent=root_module['ns3::Header'])
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['FRAME_FLAG_NONE', 'FRAME_FLAG_CFP', 'FRAME_FLAG_SHORT_PREAMBLE', 'FRAME_FLAG_WEP', 'FRAME_FLAG_FRAGMENTED', 'FRAME_FLAG_FCS_INCLUDED', 'FRAME_FLAG_DATA_PADDING', 'FRAME_FLAG_BAD_FCS', 'FRAME_FLAG_SHORT_GUARD'], outer_class=root_module['ns3::RadiotapHeader'])
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['CHANNEL_FLAG_NONE', 'CHANNEL_FLAG_TURBO', 'CHANNEL_FLAG_CCK', 'CHANNEL_FLAG_OFDM', 'CHANNEL_FLAG_SPECTRUM_2GHZ', 'CHANNEL_FLAG_SPECTRUM_5GHZ', 'CHANNEL_FLAG_PASSIVE', 'CHANNEL_FLAG_DYNAMIC', 'CHANNEL_FLAG_GFSK'], outer_class=root_module['ns3::RadiotapHeader'])
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['MCS_KNOWN_NONE', 'MCS_KNOWN_BANDWIDTH', 'MCS_KNOWN_INDEX', 'MCS_KNOWN_GUARD_INTERVAL', 'MCS_KNOWN_HT_FORMAT', 'MCS_KNOWN_FEC_TYPE', 'MCS_KNOWN_STBC', 'MCS_KNOWN_NESS', 'MCS_KNOWN_NESS_BIT_1'], outer_class=root_module['ns3::RadiotapHeader'])
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['MCS_FLAGS_NONE', 'MCS_FLAGS_BANDWIDTH_40', 'MCS_FLAGS_BANDWIDTH_20L', 'MCS_FLAGS_BANDWIDTH_20U', 'MCS_FLAGS_GUARD_INTERVAL', 'MCS_FLAGS_HT_GREENFIELD', 'MCS_FLAGS_FEC_TYPE', 'MCS_FLAGS_STBC_STREAMS', 'MCS_FLAGS_NESS_BIT_0'], outer_class=root_module['ns3::RadiotapHeader'])
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['A_MPDU_STATUS_NONE', 'A_MPDU_STATUS_REPORT_ZERO_LENGTH', 'A_MPDU_STATUS_IS_ZERO_LENGTH', 'A_MPDU_STATUS_LAST_KNOWN', 'A_MPDU_STATUS_LAST', 'A_MPDU_STATUS_DELIMITER_CRC_ERROR', 'A_MPDU_STATUS_DELIMITER_CRC_KNOWN'], outer_class=root_module['ns3::RadiotapHeader'])
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['VHT_KNOWN_NONE', 'VHT_KNOWN_STBC', 'VHT_KNOWN_TXOP_PS_NOT_ALLOWED', 'VHT_KNOWN_GUARD_INTERVAL', 'VHT_KNOWN_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_KNOWN_LDPC_EXTRA_OFDM_SYMBOL', 'VHT_KNOWN_BEAMFORMED', 'VHT_KNOWN_BANDWIDTH', 'VHT_KNOWN_GROUP_ID', 'VHT_KNOWN_PARTIAL_AID'], outer_class=root_module['ns3::RadiotapHeader'])
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['VHT_FLAGS_NONE', 'VHT_FLAGS_STBC', 'VHT_FLAGS_TXOP_PS_NOT_ALLOWED', 'VHT_FLAGS_GUARD_INTERVAL', 'VHT_FLAGS_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_FLAGS__LDPC_EXTRA_OFDM_SYMBOL', 'VHT_FLAGS_BEAMFORMED'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::FrameFlag [enumeration]
+    module.add_enum('FrameFlag', ['FRAME_FLAG_NONE', 'FRAME_FLAG_CFP', 'FRAME_FLAG_SHORT_PREAMBLE', 'FRAME_FLAG_WEP', 'FRAME_FLAG_FRAGMENTED', 'FRAME_FLAG_FCS_INCLUDED', 'FRAME_FLAG_DATA_PADDING', 'FRAME_FLAG_BAD_FCS', 'FRAME_FLAG_SHORT_GUARD'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::ChannelFlags [enumeration]
+    module.add_enum('ChannelFlags', ['CHANNEL_FLAG_NONE', 'CHANNEL_FLAG_TURBO', 'CHANNEL_FLAG_CCK', 'CHANNEL_FLAG_OFDM', 'CHANNEL_FLAG_SPECTRUM_2GHZ', 'CHANNEL_FLAG_SPECTRUM_5GHZ', 'CHANNEL_FLAG_PASSIVE', 'CHANNEL_FLAG_DYNAMIC', 'CHANNEL_FLAG_GFSK'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::McsKnown [enumeration]
+    module.add_enum('McsKnown', ['MCS_KNOWN_NONE', 'MCS_KNOWN_BANDWIDTH', 'MCS_KNOWN_INDEX', 'MCS_KNOWN_GUARD_INTERVAL', 'MCS_KNOWN_HT_FORMAT', 'MCS_KNOWN_FEC_TYPE', 'MCS_KNOWN_STBC', 'MCS_KNOWN_NESS', 'MCS_KNOWN_NESS_BIT_1'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::McsFlags [enumeration]
+    module.add_enum('McsFlags', ['MCS_FLAGS_NONE', 'MCS_FLAGS_BANDWIDTH_40', 'MCS_FLAGS_BANDWIDTH_20L', 'MCS_FLAGS_BANDWIDTH_20U', 'MCS_FLAGS_GUARD_INTERVAL', 'MCS_FLAGS_HT_GREENFIELD', 'MCS_FLAGS_FEC_TYPE', 'MCS_FLAGS_STBC_STREAMS', 'MCS_FLAGS_NESS_BIT_0'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::AmpduFlags [enumeration]
+    module.add_enum('AmpduFlags', ['A_MPDU_STATUS_NONE', 'A_MPDU_STATUS_REPORT_ZERO_LENGTH', 'A_MPDU_STATUS_IS_ZERO_LENGTH', 'A_MPDU_STATUS_LAST_KNOWN', 'A_MPDU_STATUS_LAST', 'A_MPDU_STATUS_DELIMITER_CRC_ERROR', 'A_MPDU_STATUS_DELIMITER_CRC_KNOWN'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::VhtKnown [enumeration]
+    module.add_enum('VhtKnown', ['VHT_KNOWN_NONE', 'VHT_KNOWN_STBC', 'VHT_KNOWN_TXOP_PS_NOT_ALLOWED', 'VHT_KNOWN_GUARD_INTERVAL', 'VHT_KNOWN_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_KNOWN_LDPC_EXTRA_OFDM_SYMBOL', 'VHT_KNOWN_BEAMFORMED', 'VHT_KNOWN_BANDWIDTH', 'VHT_KNOWN_GROUP_ID', 'VHT_KNOWN_PARTIAL_AID'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::VhtFlags [enumeration]
+    module.add_enum('VhtFlags', ['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'])
     ## random-variable-stream.h (module 'core'): ns3::SequentialRandomVariable [class]
@@ -272,10 +278,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
     module.add_class('SocketFactory', parent=root_module['ns3::Object'])
     ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
@@ -286,6 +292,8 @@
     module.add_class('SocketIpv6HopLimitTag', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketIpv6TclassTag [class]
     module.add_class('SocketIpv6TclassTag', parent=root_module['ns3::Tag'])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketSetDontFragmentTag [class]
     module.add_class('SocketSetDontFragmentTag', parent=root_module['ns3::Tag'])
     ## nstime.h (module 'core'): ns3::Time [class]
@@ -346,8 +354,14 @@
     module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue [class]
     module.add_class('DropTailQueue', parent=root_module['ns3::Queue'])
+    ## dynamic-queue-limits.h (module 'network'): ns3::DynamicQueueLimits [class]
+    module.add_class('DynamicQueueLimits', parent=root_module['ns3::QueueLimits'])
     ## 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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -458,6 +472,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['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]
@@ -615,6 +631,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_addressUtils(module):
     root_module = module.get_root()
@@ -703,6 +722,7 @@
     register_Ns3PacketSocketTag_methods(root_module, root_module['ns3::PacketSocketTag'])
     register_Ns3PcapFileWrapper_methods(root_module, root_module['ns3::PcapFileWrapper'])
     register_Ns3Queue_methods(root_module, root_module['ns3::Queue'])
+    register_Ns3QueueLimits_methods(root_module, root_module['ns3::QueueLimits'])
     register_Ns3RadiotapHeader_methods(root_module, root_module['ns3::RadiotapHeader'])
     register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
     register_Ns3SequentialRandomVariable_methods(root_module, root_module['ns3::SequentialRandomVariable'])
@@ -724,12 +744,12 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -758,7 +778,10 @@
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3DropTailQueue_methods(root_module, root_module['ns3::DropTailQueue'])
+    register_Ns3DynamicQueueLimits_methods(root_module, root_module['ns3::DynamicQueueLimits'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -1244,6 +1267,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1785,6 +1813,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1798,6 +1831,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
@@ -3209,10 +3246,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3673,23 +3710,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3804,6 +3841,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -3830,10 +3872,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -3855,6 +3897,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -3870,6 +3916,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -4175,6 +4225,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -4474,10 +4529,19 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
@@ -4490,10 +4554,10 @@
     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]
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
@@ -4510,6 +4574,43 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3QueueLimits_methods(root_module, cls):
+    ## queue-limits.h (module 'network'): ns3::QueueLimits::QueueLimits() [constructor]
+    cls.add_constructor([])
+    ## queue-limits.h (module 'network'): ns3::QueueLimits::QueueLimits(ns3::QueueLimits const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueLimits const &', 'arg0')])
+    ## queue-limits.h (module 'network'): int32_t ns3::QueueLimits::Available() const [member function]
+    cls.add_method('Available', 
+                   'int32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## queue-limits.h (module 'network'): void ns3::QueueLimits::Completed(uint32_t count) [member function]
+    cls.add_method('Completed', 
+                   'void', 
+                   [param('uint32_t', 'count')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## queue-limits.h (module 'network'): static ns3::TypeId ns3::QueueLimits::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue-limits.h (module 'network'): void ns3::QueueLimits::Queued(uint32_t count) [member function]
+    cls.add_method('Queued', 
+                   'void', 
+                   [param('uint32_t', 'count')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## queue-limits.h (module 'network'): void ns3::QueueLimits::Reset() [member function]
+    cls.add_method('Reset', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3RadiotapHeader_methods(root_module, cls):
@@ -5109,6 +5210,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -5134,6 +5240,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -5282,6 +5393,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -5309,11 +5424,6 @@
                    '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', 
@@ -5376,52 +5486,6 @@
                    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_Ns3SocketFactory_methods(root_module, cls):
     ## socket-factory.h (module 'network'): ns3::SocketFactory::SocketFactory(ns3::SocketFactory const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SocketFactory const &', 'arg0')])
@@ -5623,6 +5687,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -6674,6 +6784,43 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
+    ## drop-tail-queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::DropTailQueue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3DynamicQueueLimits_methods(root_module, cls):
+    ## dynamic-queue-limits.h (module 'network'): ns3::DynamicQueueLimits::DynamicQueueLimits(ns3::DynamicQueueLimits const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DynamicQueueLimits const &', 'arg0')])
+    ## dynamic-queue-limits.h (module 'network'): ns3::DynamicQueueLimits::DynamicQueueLimits() [constructor]
+    cls.add_constructor([])
+    ## dynamic-queue-limits.h (module 'network'): int32_t ns3::DynamicQueueLimits::Available() const [member function]
+    cls.add_method('Available', 
+                   'int32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dynamic-queue-limits.h (module 'network'): void ns3::DynamicQueueLimits::Completed(uint32_t count) [member function]
+    cls.add_method('Completed', 
+                   'void', 
+                   [param('uint32_t', 'count')], 
+                   is_virtual=True)
+    ## dynamic-queue-limits.h (module 'network'): static ns3::TypeId ns3::DynamicQueueLimits::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## dynamic-queue-limits.h (module 'network'): void ns3::DynamicQueueLimits::Queued(uint32_t count) [member function]
+    cls.add_method('Queued', 
+                   'void', 
+                   [param('uint32_t', 'count')], 
+                   is_virtual=True)
+    ## dynamic-queue-limits.h (module 'network'): void ns3::DynamicQueueLimits::Reset() [member function]
+    cls.add_method('Reset', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     return
 
 def register_Ns3EmpiricalRandomVariable_methods(root_module, cls):
@@ -6710,6 +6857,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -7728,16 +7939,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -7765,35 +7991,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -8380,6 +8601,11 @@
     cls.add_constructor([param('ns3::PacketSocketClient const &', 'arg0')])
     ## packet-socket-client.h (module 'network'): ns3::PacketSocketClient::PacketSocketClient() [constructor]
     cls.add_constructor([])
+    ## packet-socket-client.h (module 'network'): uint8_t ns3::PacketSocketClient::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## packet-socket-client.h (module 'network'): static ns3::TypeId ns3::PacketSocketClient::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -9523,6 +9749,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/network/bindings/modulegen__gcc_LP64.py ns-3.26/src/network/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/network/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.476245854 -0700
+++ ns-3.26/src/network/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.778386677 -0700
@@ -146,8 +146,8 @@
     module.add_class('PcapFile')
     ## 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_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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]
@@ -160,6 +160,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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')
     ## system-wall-clock-ms.h (module 'core'): ns3::SystemWallClockMs [class]
@@ -176,6 +178,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -210,22 +214,24 @@
     module.add_class('Queue', 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'])
+    ## queue-limits.h (module 'network'): ns3::QueueLimits [class]
+    module.add_class('QueueLimits', parent=root_module['ns3::Object'])
     ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [class]
     module.add_class('RadiotapHeader', parent=root_module['ns3::Header'])
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['FRAME_FLAG_NONE', 'FRAME_FLAG_CFP', 'FRAME_FLAG_SHORT_PREAMBLE', 'FRAME_FLAG_WEP', 'FRAME_FLAG_FRAGMENTED', 'FRAME_FLAG_FCS_INCLUDED', 'FRAME_FLAG_DATA_PADDING', 'FRAME_FLAG_BAD_FCS', 'FRAME_FLAG_SHORT_GUARD'], outer_class=root_module['ns3::RadiotapHeader'])
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['CHANNEL_FLAG_NONE', 'CHANNEL_FLAG_TURBO', 'CHANNEL_FLAG_CCK', 'CHANNEL_FLAG_OFDM', 'CHANNEL_FLAG_SPECTRUM_2GHZ', 'CHANNEL_FLAG_SPECTRUM_5GHZ', 'CHANNEL_FLAG_PASSIVE', 'CHANNEL_FLAG_DYNAMIC', 'CHANNEL_FLAG_GFSK'], outer_class=root_module['ns3::RadiotapHeader'])
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['MCS_KNOWN_NONE', 'MCS_KNOWN_BANDWIDTH', 'MCS_KNOWN_INDEX', 'MCS_KNOWN_GUARD_INTERVAL', 'MCS_KNOWN_HT_FORMAT', 'MCS_KNOWN_FEC_TYPE', 'MCS_KNOWN_STBC', 'MCS_KNOWN_NESS', 'MCS_KNOWN_NESS_BIT_1'], outer_class=root_module['ns3::RadiotapHeader'])
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['MCS_FLAGS_NONE', 'MCS_FLAGS_BANDWIDTH_40', 'MCS_FLAGS_BANDWIDTH_20L', 'MCS_FLAGS_BANDWIDTH_20U', 'MCS_FLAGS_GUARD_INTERVAL', 'MCS_FLAGS_HT_GREENFIELD', 'MCS_FLAGS_FEC_TYPE', 'MCS_FLAGS_STBC_STREAMS', 'MCS_FLAGS_NESS_BIT_0'], outer_class=root_module['ns3::RadiotapHeader'])
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['A_MPDU_STATUS_NONE', 'A_MPDU_STATUS_REPORT_ZERO_LENGTH', 'A_MPDU_STATUS_IS_ZERO_LENGTH', 'A_MPDU_STATUS_LAST_KNOWN', 'A_MPDU_STATUS_LAST', 'A_MPDU_STATUS_DELIMITER_CRC_ERROR', 'A_MPDU_STATUS_DELIMITER_CRC_KNOWN'], outer_class=root_module['ns3::RadiotapHeader'])
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['VHT_KNOWN_NONE', 'VHT_KNOWN_STBC', 'VHT_KNOWN_TXOP_PS_NOT_ALLOWED', 'VHT_KNOWN_GUARD_INTERVAL', 'VHT_KNOWN_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_KNOWN_LDPC_EXTRA_OFDM_SYMBOL', 'VHT_KNOWN_BEAMFORMED', 'VHT_KNOWN_BANDWIDTH', 'VHT_KNOWN_GROUP_ID', 'VHT_KNOWN_PARTIAL_AID'], outer_class=root_module['ns3::RadiotapHeader'])
-    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
-    module.add_enum('', ['VHT_FLAGS_NONE', 'VHT_FLAGS_STBC', 'VHT_FLAGS_TXOP_PS_NOT_ALLOWED', 'VHT_FLAGS_GUARD_INTERVAL', 'VHT_FLAGS_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_FLAGS__LDPC_EXTRA_OFDM_SYMBOL', 'VHT_FLAGS_BEAMFORMED'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::FrameFlag [enumeration]
+    module.add_enum('FrameFlag', ['FRAME_FLAG_NONE', 'FRAME_FLAG_CFP', 'FRAME_FLAG_SHORT_PREAMBLE', 'FRAME_FLAG_WEP', 'FRAME_FLAG_FRAGMENTED', 'FRAME_FLAG_FCS_INCLUDED', 'FRAME_FLAG_DATA_PADDING', 'FRAME_FLAG_BAD_FCS', 'FRAME_FLAG_SHORT_GUARD'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::ChannelFlags [enumeration]
+    module.add_enum('ChannelFlags', ['CHANNEL_FLAG_NONE', 'CHANNEL_FLAG_TURBO', 'CHANNEL_FLAG_CCK', 'CHANNEL_FLAG_OFDM', 'CHANNEL_FLAG_SPECTRUM_2GHZ', 'CHANNEL_FLAG_SPECTRUM_5GHZ', 'CHANNEL_FLAG_PASSIVE', 'CHANNEL_FLAG_DYNAMIC', 'CHANNEL_FLAG_GFSK'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::McsKnown [enumeration]
+    module.add_enum('McsKnown', ['MCS_KNOWN_NONE', 'MCS_KNOWN_BANDWIDTH', 'MCS_KNOWN_INDEX', 'MCS_KNOWN_GUARD_INTERVAL', 'MCS_KNOWN_HT_FORMAT', 'MCS_KNOWN_FEC_TYPE', 'MCS_KNOWN_STBC', 'MCS_KNOWN_NESS', 'MCS_KNOWN_NESS_BIT_1'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::McsFlags [enumeration]
+    module.add_enum('McsFlags', ['MCS_FLAGS_NONE', 'MCS_FLAGS_BANDWIDTH_40', 'MCS_FLAGS_BANDWIDTH_20L', 'MCS_FLAGS_BANDWIDTH_20U', 'MCS_FLAGS_GUARD_INTERVAL', 'MCS_FLAGS_HT_GREENFIELD', 'MCS_FLAGS_FEC_TYPE', 'MCS_FLAGS_STBC_STREAMS', 'MCS_FLAGS_NESS_BIT_0'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::AmpduFlags [enumeration]
+    module.add_enum('AmpduFlags', ['A_MPDU_STATUS_NONE', 'A_MPDU_STATUS_REPORT_ZERO_LENGTH', 'A_MPDU_STATUS_IS_ZERO_LENGTH', 'A_MPDU_STATUS_LAST_KNOWN', 'A_MPDU_STATUS_LAST', 'A_MPDU_STATUS_DELIMITER_CRC_ERROR', 'A_MPDU_STATUS_DELIMITER_CRC_KNOWN'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::VhtKnown [enumeration]
+    module.add_enum('VhtKnown', ['VHT_KNOWN_NONE', 'VHT_KNOWN_STBC', 'VHT_KNOWN_TXOP_PS_NOT_ALLOWED', 'VHT_KNOWN_GUARD_INTERVAL', 'VHT_KNOWN_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_KNOWN_LDPC_EXTRA_OFDM_SYMBOL', 'VHT_KNOWN_BEAMFORMED', 'VHT_KNOWN_BANDWIDTH', 'VHT_KNOWN_GROUP_ID', 'VHT_KNOWN_PARTIAL_AID'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader::VhtFlags [enumeration]
+    module.add_enum('VhtFlags', ['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'])
     ## random-variable-stream.h (module 'core'): ns3::SequentialRandomVariable [class]
@@ -272,10 +278,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
     module.add_class('SocketFactory', parent=root_module['ns3::Object'])
     ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
@@ -286,6 +292,8 @@
     module.add_class('SocketIpv6HopLimitTag', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketIpv6TclassTag [class]
     module.add_class('SocketIpv6TclassTag', parent=root_module['ns3::Tag'])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketSetDontFragmentTag [class]
     module.add_class('SocketSetDontFragmentTag', parent=root_module['ns3::Tag'])
     ## nstime.h (module 'core'): ns3::Time [class]
@@ -346,8 +354,14 @@
     module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue [class]
     module.add_class('DropTailQueue', parent=root_module['ns3::Queue'])
+    ## dynamic-queue-limits.h (module 'network'): ns3::DynamicQueueLimits [class]
+    module.add_class('DynamicQueueLimits', parent=root_module['ns3::QueueLimits'])
     ## 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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -458,6 +472,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['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]
@@ -615,6 +631,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_addressUtils(module):
     root_module = module.get_root()
@@ -703,6 +722,7 @@
     register_Ns3PacketSocketTag_methods(root_module, root_module['ns3::PacketSocketTag'])
     register_Ns3PcapFileWrapper_methods(root_module, root_module['ns3::PcapFileWrapper'])
     register_Ns3Queue_methods(root_module, root_module['ns3::Queue'])
+    register_Ns3QueueLimits_methods(root_module, root_module['ns3::QueueLimits'])
     register_Ns3RadiotapHeader_methods(root_module, root_module['ns3::RadiotapHeader'])
     register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
     register_Ns3SequentialRandomVariable_methods(root_module, root_module['ns3::SequentialRandomVariable'])
@@ -724,12 +744,12 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -758,7 +778,10 @@
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3DropTailQueue_methods(root_module, root_module['ns3::DropTailQueue'])
+    register_Ns3DynamicQueueLimits_methods(root_module, root_module['ns3::DynamicQueueLimits'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -1244,6 +1267,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1785,6 +1813,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1798,6 +1831,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
@@ -3209,10 +3246,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3673,23 +3710,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3804,6 +3841,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -3830,10 +3872,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -3855,6 +3897,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -3870,6 +3916,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -4175,6 +4225,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -4474,10 +4529,19 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
@@ -4490,10 +4554,10 @@
     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]
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
@@ -4510,6 +4574,43 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3QueueLimits_methods(root_module, cls):
+    ## queue-limits.h (module 'network'): ns3::QueueLimits::QueueLimits() [constructor]
+    cls.add_constructor([])
+    ## queue-limits.h (module 'network'): ns3::QueueLimits::QueueLimits(ns3::QueueLimits const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueLimits const &', 'arg0')])
+    ## queue-limits.h (module 'network'): int32_t ns3::QueueLimits::Available() const [member function]
+    cls.add_method('Available', 
+                   'int32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## queue-limits.h (module 'network'): void ns3::QueueLimits::Completed(uint32_t count) [member function]
+    cls.add_method('Completed', 
+                   'void', 
+                   [param('uint32_t', 'count')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## queue-limits.h (module 'network'): static ns3::TypeId ns3::QueueLimits::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue-limits.h (module 'network'): void ns3::QueueLimits::Queued(uint32_t count) [member function]
+    cls.add_method('Queued', 
+                   'void', 
+                   [param('uint32_t', 'count')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## queue-limits.h (module 'network'): void ns3::QueueLimits::Reset() [member function]
+    cls.add_method('Reset', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3RadiotapHeader_methods(root_module, cls):
@@ -5109,6 +5210,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -5134,6 +5240,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -5282,6 +5393,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -5309,11 +5424,6 @@
                    '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', 
@@ -5376,52 +5486,6 @@
                    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_Ns3SocketFactory_methods(root_module, cls):
     ## socket-factory.h (module 'network'): ns3::SocketFactory::SocketFactory(ns3::SocketFactory const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SocketFactory const &', 'arg0')])
@@ -5623,6 +5687,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -6674,6 +6784,43 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
+    ## drop-tail-queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::DropTailQueue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3DynamicQueueLimits_methods(root_module, cls):
+    ## dynamic-queue-limits.h (module 'network'): ns3::DynamicQueueLimits::DynamicQueueLimits(ns3::DynamicQueueLimits const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DynamicQueueLimits const &', 'arg0')])
+    ## dynamic-queue-limits.h (module 'network'): ns3::DynamicQueueLimits::DynamicQueueLimits() [constructor]
+    cls.add_constructor([])
+    ## dynamic-queue-limits.h (module 'network'): int32_t ns3::DynamicQueueLimits::Available() const [member function]
+    cls.add_method('Available', 
+                   'int32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dynamic-queue-limits.h (module 'network'): void ns3::DynamicQueueLimits::Completed(uint32_t count) [member function]
+    cls.add_method('Completed', 
+                   'void', 
+                   [param('uint32_t', 'count')], 
+                   is_virtual=True)
+    ## dynamic-queue-limits.h (module 'network'): static ns3::TypeId ns3::DynamicQueueLimits::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## dynamic-queue-limits.h (module 'network'): void ns3::DynamicQueueLimits::Queued(uint32_t count) [member function]
+    cls.add_method('Queued', 
+                   'void', 
+                   [param('uint32_t', 'count')], 
+                   is_virtual=True)
+    ## dynamic-queue-limits.h (module 'network'): void ns3::DynamicQueueLimits::Reset() [member function]
+    cls.add_method('Reset', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     return
 
 def register_Ns3EmpiricalRandomVariable_methods(root_module, cls):
@@ -6710,6 +6857,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -7728,16 +7939,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -7765,35 +7991,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -8380,6 +8601,11 @@
     cls.add_constructor([param('ns3::PacketSocketClient const &', 'arg0')])
     ## packet-socket-client.h (module 'network'): ns3::PacketSocketClient::PacketSocketClient() [constructor]
     cls.add_constructor([])
+    ## packet-socket-client.h (module 'network'): uint8_t ns3::PacketSocketClient::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## packet-socket-client.h (module 'network'): static ns3::TypeId ns3::PacketSocketClient::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -9523,6 +9749,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/network/doc/queue-limits.rst ns-3.26/src/network/doc/queue-limits.rst
--- ns-3.25/src/network/doc/queue-limits.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/network/doc/queue-limits.rst	2016-10-03 19:49:01.782386647 -0700
@@ -0,0 +1,99 @@
+Queue limits
+------------
+
+.. heading hierarchy:
+   ------------- Chapter
+   ************* Section (#.#)
+   ============= Subsection (#.#.#)
+   ############# Paragraph (no number)
+
+This section documents the queue limits model, which is used by the traffic control
+to limit the NetDevices queueing delay. It operates on the transmission path of
+the network node.
+
+The reduction of the NetDevices queueing delay is essential to improve the effectiveness of
+Active Queue Management (AQM) algorithms.
+Careful assessment of the queueing delay includes a byte-based measure of the NetDevices
+queue length. In this design, traffic control can use different byte-based schemes to
+limit the queueing delay. Currently the only available scheme is DynamicQueueLimits, which is
+modelled after the dynamic queue limit library of Linux.
+
+Model Description
+*****************
+
+The source code for the model lives in the directory ``src/network/utils``.
+
+The model allows a byte-based measure of the netdevice queue. The byte-based measure
+more accurately approximates the time required to empty the queue than a packet-based measure.
+
+To inform the upper layers about the transmission of packets, NetDevices can call a couple
+of functions:
+
+* ``void NotifyQueuedBytes (uint32_t bytes)``: Report the number of bytes queued to the device queue
+* ``void NotifyTransmittedBytes (uint32_t bytes)``: Report the number of bytes transmitted by device
+
+Based on this information, the QueueLimits object can stop the transmission queue.
+
+In case of multiqueue NetDevices this mechanism is available for each queue.
+
+The QueueLimits model can be used on any NetDevice modelled in ns-3.
+
+Design
+======
+
+An abstract base class, class QueueLimits, is subclassed for specific
+byte-based limiting strategies.
+
+Common operations provided by the base class QueueLimits include:
+
+* ``void Reset ()``:  Reset queue limits state
+* ``void Completed (uint32_t count)``:  Record the number of completed bytes and recalculate the limit
+* ``int32_t Available () const``:  Return how many bytes can be queued
+* ``void Queued (uint32_t count)``:  Record number of bytes queued
+
+DynamicQueueLimits
+##################
+
+Dynamic queue limits (DQL) is a basic library implemented in the Linux kernel to limit the Ethernet
+queueing delay. DQL is a general purpose queue length controller. The goal of DQL is to calculate
+the limit as the minimum number of bytes needed to prevent starvation.
+
+Three attributes are defined in the DynamicQueueLimits class:
+
+* ``HoldTime``: The DQL algorithm hold time
+* ``MaxLimit``: Maximum limit
+* ``MinLimit``: Minimum limit
+
+The DQL algorithm hold time is 1 s. Reducing the HoldTime increases the responsiveness of
+DQL with consequent greater number of limit variation events. Conversely, increasing the HoldTime
+decreases the responsiveness of DQL with a minor number of limit variation events.
+The limit calculated by DQL is in the range from MinLimit to MaxLimit.
+The default values are respectively 0 and DQL_MAX_LIMIT.
+Increasing the MinLimit is recommended in case of higher NetDevice transmission rate (e.g. 1 Gbps)
+while reducing the MaxLimit is recommended in case of lower NetDevice transmission rate (e.g. 500 Kbps).
+
+There is one trace source in DynamicQueueLimits class that may be hooked:
+
+* ``Limit``: Limit value calculated by DQL
+
+Usage
+*****
+
+Helpers
+=======
+
+A typical usage pattern is to create a traffic control helper and configure
+the queue limits type and attributes from the helper, such as this example:
+
+.. sourcecode:: cpp
+
+  TrafficControlHelper tch;
+  uint32_t handle = tch.SetRootQueueDisc ("ns3::PfifoFastQueueDisc", "Limit", UintegerValue (1000));
+
+  tch.SetQueueLimits ("ns3::DynamicQueueLimits", "HoldTime", StringValue ("4ms"));
+
+then install the configuration on a NetDevices container
+
+.. sourcecode:: cpp
+
+  tch.Install (devices);
diff -Naur ns-3.25/src/network/doc/sockets-api.rst ns-3.26/src/network/doc/sockets-api.rst
--- ns-3.25/src/network/doc/sockets-api.rst	2016-10-03 20:57:08.480245823 -0700
+++ ns-3.26/src/network/doc/sockets-api.rst	2016-10-03 19:49:01.783386640 -0700
@@ -189,10 +189,130 @@
 to read the Packet data buffer, the fake buffer will be converted to
 a real (zeroed) buffer on the spot, and the efficiency will be lost there.
 
+.. _Socket-options:
+
 Socket options
 **************
 
-*to be completed*
+.. _Type-of-service:
+
+ToS (Type of Service)
+======================
+
+The native sockets API for ns-3 provides two public methods
+(of the Socket base class)::
+
+    void SetIpTos (uint8_t ipTos);
+    uint8_t GetIpTos (void) const;
+
+to set and get, respectively, the type of service associated with the socket.
+These methods are equivalent to using the IP_TOS option of BSD sockets.
+Clearly, setting the type of service only applies to sockets using the IPv4 protocol.
+However, users typically do not set the type of service associated with a socket
+through :cpp:func:`ns3::Socket::SetIpTos` because sockets are normally created
+by application helpers and users cannot get a pointer to the sockets.
+Instead, users can create an address of type :cpp:class:`ns3::InetSocketAddress`
+with the desired type of service value and pass it to the application helpers::
+
+    InetSocketAddress destAddress (ipv4Address, udpPort);
+    destAddress.SetTos (tos);
+    OnOffHelper onoff ("ns3::UdpSocketFactory", destAddress);
+
+For this to work, the application must eventually call the
+:cpp:func:`ns3::Socket::Connect()` method to connect to the provided
+destAddress and the Connect method of the particular socket type must
+support setting the type of service associated with a socket (by using
+the :cpp:func:`ns3::Socket::SetIpTos()` method). Currently, the socket
+types that support setting the type of service in such a way are
+:cpp:class:`ns3::UdpSocketImpl` and :cpp:class:`ns3::TcpSocketBase`.
+
+The type of service associated with a socket is then used to determine the value
+of the Type of Service field (renamed as Differentiated Services field by RFC
+2474) of the IPv4 header of the packets sent through that socket, as detailed
+in the next sections.
+
+
+Setting the ToS with UDP sockets
+#################################
+
+For IPv4 packets, the ToS field is set according to the following rules:
+
+* If the socket is connected, the ToS field is set to the ToS value associated
+  with the socket.
+
+* If the socket is not connected, the ToS field is set to the value specified
+  in the destination address (of type :cpp:class:`ns3::InetSocketAddress`) passed
+  to :cpp:func:`ns3::Socket::SendTo`, and the ToS value associated with the
+  socket is ignored.
+
+Setting the ToS with TCP sockets
+#################################
+
+For IPv4 packets, the ToS field is set to the ToS value associated with the
+socket.
+
+Priority
+=========
+
+The native sockets API for ns-3 provides two public methods
+(of the Socket base class)::
+
+    void SetPriority (uint8_t priority);
+    uint8_t GetPriority (void) const;
+
+to set and get, respectively, the priority associated with the socket.
+These methods are equivalent to using the SO_PRIORITY option of BSD sockets.
+Only values in the range 0..6 can be set through the above method.
+
+Note that setting the type of service associated with a socket (by calling
+:cpp:func:`ns3::Socket::SetIpTos()`) also sets the priority for the socket
+to the value that the :cpp:func:`ns3::Socket::IpTos2Priority()` function
+returns when it is passed the type of service value. This function
+is implemented after the Linux rt_tos2priority function, which takes
+an 8-bit value as input and returns a value which is a function of bits 3-6
+(where bit 0 is the most significant bit) of the input value:
+
+=========  ====================
+Bits 3-6   Priority
+=========  ====================
+ 0 to 3    0 (Best Effort)
+ 4 to 7    2 (Bulk)
+ 8 to 11   6 (Interactive)
+ 12 to 15  4 (Interactive Bulk)
+=========  ====================
+
+The rationale is that bits 3-6 of the Type of Service field were interpreted
+as the TOS subfield by (the obsolete) RFC 1349. Readers can refer to the
+doxygen documentation of :cpp:func:`ns3::Socket::IpTos2Priority()`
+for more information, including how DSCP values map onto priority values.
+
+The priority set for a socket (as described above) is then used to determine
+the priority of the packets sent through that socket, as detailed in the next
+sections. Currently, the socket types that support setting the packet priority
+are :cpp:class:`ns3::UdpSocketImpl`, :cpp:class:`ns3::TcpSocketBase` and
+:cpp:class:`ns3::PacketSocket`. The packet priority is used, e.g., by queuing
+disciplines such as the default PfifoFastQueueDisc to classify packets into
+distinct queues.
+
+Setting the priority with UDP sockets
+######################################
+
+If the packet is an IPv4 packet and the value to be inserted in the ToS field
+is not null, then the packet is assigned a priority based on such ToS value
+(according to the :cpp:func:`ns3::Socket::IpTos2Priority` function). Otherwise,
+the priority associated with the socket is assigned to the packet.
+
+Setting the priority with TCP sockets
+######################################
+
+Every packet is assigned a priority equal to the priority associated with the
+socket.
+
+Setting the priority with packet sockets
+#########################################
+
+Every packet is assigned a priority equal to the priority associated with the
+socket.
 
 Socket errno
 ************
diff -Naur ns-3.25/src/network/helper/trace-helper.cc ns-3.26/src/network/helper/trace-helper.cc
--- ns-3.25/src/network/helper/trace-helper.cc	2016-10-03 20:57:08.486245777 -0700
+++ ns-3.26/src/network/helper/trace-helper.cc	2016-10-03 19:49:01.789386595 -0700
@@ -49,7 +49,7 @@
 PcapHelper::CreateFile (
   std::string filename, 
   std::ios::openmode filemode,
-  uint32_t    dataLinkType, 
+  DataLinkType dataLinkType,
   uint32_t    snapLen, 
   int32_t     tzCorrection)
 {
diff -Naur ns-3.25/src/network/helper/trace-helper.h ns-3.26/src/network/helper/trace-helper.h
--- ns-3.25/src/network/helper/trace-helper.h	2016-10-03 20:57:08.487245769 -0700
+++ ns-3.26/src/network/helper/trace-helper.h	2016-10-03 19:49:01.789386595 -0700
@@ -38,13 +38,16 @@
 class PcapHelper
 {
 public:
-  //
-  // These are the data link types that will be written to the pcap file.  We
-  // don't include pcap-bpf.h to avoid an explicit dependency on the real pcap
-  // and we don't make an enumeration of all of the values to make it easy to
-  // pass new values in.
-  //
-  enum {
+  /**
+   * This enumeration holds the data link types that will be written to the pcap file.
+   *
+   * We don't include pcap-bpf.h to avoid an explicit dependency on the real pcap
+   * and we don't make an enumeration of all of the values to make it easy to
+   * pass new values in.
+   *
+   * For a list of Data Link Types see http://www.tcpdump.org/linktypes.html
+   */
+  enum DataLinkType {
     DLT_NULL = 0,
     DLT_EN10MB = 1,
     DLT_PPP = 9,
@@ -101,8 +104,11 @@
    * @param tzCorrection time zone correction to be applied to timestamps of packets
    * @returns a smart pointer to the Pcap file
    */
-  Ptr<PcapFileWrapper> CreateFile (std::string filename, std::ios::openmode filemode,
-                                   uint32_t dataLinkType,  uint32_t snapLen = std::numeric_limits<uint32_t>::max (), int32_t tzCorrection = 0);
+  Ptr<PcapFileWrapper> CreateFile (std::string filename,
+                                   std::ios::openmode filemode,
+                                   DataLinkType dataLinkType,
+                                   uint32_t snapLen = std::numeric_limits<uint32_t>::max (),
+                                   int32_t tzCorrection = 0);
   /**
    * @brief Hook a trace source to the default trace sink
    * 
diff -Naur ns-3.25/src/network/model/buffer.cc ns-3.26/src/network/model/buffer.cc
--- ns-3.25/src/network/model/buffer.cc	2016-10-03 20:57:08.489245753 -0700
+++ ns-3.26/src/network/model/buffer.cc	2016-10-03 19:49:01.792386572 -0700
@@ -1161,6 +1161,13 @@
   return m_dataEnd - m_dataStart;
 }
 
+uint32_t
+Buffer::Iterator::GetRemainingSize (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_dataEnd - m_current;
+}
+
 
 std::string 
 Buffer::Iterator::GetReadErrorMessage (void) const
diff -Naur ns-3.25/src/network/model/buffer.h ns-3.26/src/network/model/buffer.h
--- ns-3.25/src/network/model/buffer.h	2016-10-03 20:57:08.490245745 -0700
+++ ns-3.26/src/network/model/buffer.h	2016-10-03 19:49:01.792386572 -0700
@@ -376,6 +376,11 @@
      */
     uint32_t GetSize (void) const;
 
+    /**
+     * \returns the size left to read of the underlying buffer we are iterating
+     */
+    uint32_t GetRemainingSize (void) const;
+
 private:
     friend class Buffer;
     /**
diff -Naur ns-3.25/src/network/model/byte-tag-list.h ns-3.26/src/network/model/byte-tag-list.h
--- ns-3.25/src/network/model/byte-tag-list.h	2016-10-03 20:57:08.491245738 -0700
+++ ns-3.26/src/network/model/byte-tag-list.h	2016-10-03 19:49:01.793386565 -0700
@@ -122,7 +122,7 @@
      * \param offsetEnd offset to the end of the tag from the virtual byte buffer
      * \param adjustment adjustment to byte tag offsets
      */
-    Iterator (uint8_t *start, uint8_t *end, int32_t offsetStart, int32_t offsetEnd, int32_t m_adjustment);
+    Iterator (uint8_t *start, uint8_t *end, int32_t offsetStart, int32_t offsetEnd, int32_t adjustment);
 
     /**
      * \brief Prepare the iterator for the next tag
@@ -201,7 +201,7 @@
    */
   ByteTagList::Iterator Begin (int32_t offsetStart, int32_t offsetEnd) const;
 
-  /*
+  /**
    * Adjust the offsets stored internally by the adjustment delta.
    *
    * \param adjustment value to change stored offsets by
@@ -246,10 +246,10 @@
    */
   void Deallocate (struct ByteTagListData *data);
 
-  int32_t m_minStart; // !< minimal start offset
-  int32_t m_maxEnd; // !< maximal end offset
-  int32_t m_adjustment; // !< adjustment to byte tag offsets
-  uint16_t m_used; //!< the number of used bytes in the buffer
+  int32_t m_minStart; //!< minimal start offset
+  int32_t m_maxEnd; //!< maximal end offset
+  int32_t m_adjustment; //!< adjustment to byte tag offsets
+  uint32_t m_used; //!< the number of used bytes in the buffer
   struct ByteTagListData *m_data; //!< the ByteTagListData structure
 };
 
diff -Naur ns-3.25/src/network/model/net-device.cc ns-3.26/src/network/model/net-device.cc
--- ns-3.25/src/network/model/net-device.cc	2016-10-03 20:57:08.494245714 -0700
+++ ns-3.26/src/network/model/net-device.cc	2016-10-03 19:49:01.796386542 -0700
@@ -22,6 +22,7 @@
 #include "ns3/log.h"
 #include "ns3/abort.h"
 #include "ns3/uinteger.h"
+#include "ns3/queue-limits.h"
 #include "net-device.h"
 #include "packet.h"
 
@@ -53,6 +54,12 @@
   return m_packet->GetSize ();
 }
 
+bool
+QueueItem::GetUint8Value (QueueItem::Uint8Values field, uint8_t& value) const
+{
+  return false;
+}
+
 void
 QueueItem::Print (std::ostream& os) const
 {
@@ -66,7 +73,8 @@
 }
 
 NetDeviceQueue::NetDeviceQueue()
-  : m_stopped (false)
+  : m_stoppedByDevice (false),
+    m_stoppedByQueueLimits (false)
 {
   NS_LOG_FUNCTION (this);
 }
@@ -79,19 +87,19 @@
 bool
 NetDeviceQueue::IsStopped (void) const
 {
-  return m_stopped;
+  return m_stoppedByDevice || m_stoppedByQueueLimits;
 }
 
 void
 NetDeviceQueue::Start (void)
 {
-  m_stopped = false;
+  m_stoppedByDevice = false;
 }
 
 void
 NetDeviceQueue::Stop (void)
 {
-  m_stopped = true;
+  m_stoppedByDevice = true;
 }
 
 void
@@ -112,10 +120,66 @@
   m_wakeCallback = cb;
 }
 
-bool
-NetDeviceQueue::HasWakeCallbackSet (void) const
+void
+NetDeviceQueue::NotifyQueuedBytes (uint32_t bytes)
+{
+  NS_LOG_FUNCTION (this << bytes);
+  if (!m_queueLimits)
+    {
+      return;
+    }
+  m_queueLimits->Queued (bytes);
+  if (m_queueLimits->Available () >= 0)
+    {
+      return;
+    }
+  m_stoppedByQueueLimits = true;
+}
+
+void
+NetDeviceQueue::NotifyTransmittedBytes (uint32_t bytes)
+{
+  NS_LOG_FUNCTION (this << bytes);
+  if ((!m_queueLimits) || (!bytes))
+    {
+      return;
+    }
+  m_queueLimits->Completed (bytes);
+  if (m_queueLimits->Available () < 0)
+    {
+      return;
+    }
+  m_stoppedByQueueLimits = false;
+  // Request the queue disc to dequeue a packet
+  if (!m_wakeCallback.IsNull ())
+  {
+      m_wakeCallback ();
+  }
+}
+
+void
+NetDeviceQueue::ResetQueueLimits ()
+{
+  NS_LOG_FUNCTION (this);
+  if (!m_queueLimits)
+    {
+      return;
+    }
+  m_queueLimits->Reset ();
+}
+
+void
+NetDeviceQueue::SetQueueLimits (Ptr<QueueLimits> ql)
+{
+  NS_LOG_FUNCTION (this << ql);
+  m_queueLimits = ql;
+}
+
+Ptr<QueueLimits>
+NetDeviceQueue::GetQueueLimits ()
 {
-  return (!m_wakeCallback.IsNull ());
+  NS_LOG_FUNCTION (this);
+  return m_queueLimits;
 }
 
 
@@ -131,11 +195,9 @@
 }
 
 NetDeviceQueueInterface::NetDeviceQueueInterface ()
-  : m_queueDiscInstalled (false)
+  : m_numTxQueues (1)
 {
   NS_LOG_FUNCTION (this);
-  Ptr<NetDeviceQueue> devQueue = Create<NetDeviceQueue> ();
-  m_txQueuesVector.push_back (devQueue);
 }
 
 NetDeviceQueueInterface::~NetDeviceQueueInterface ()
@@ -151,7 +213,7 @@
 }
 
 uint8_t
-NetDeviceQueueInterface::GetTxQueuesN (void) const
+NetDeviceQueueInterface::GetNTxQueues (void) const
 {
   return m_txQueuesVector.size ();
 }
@@ -167,21 +229,27 @@
 void
 NetDeviceQueueInterface::SetTxQueuesN (uint8_t numTxQueues)
 {
+  NS_LOG_FUNCTION (this << 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.");
+  NS_ABORT_MSG_IF (m_txQueuesVector.size (), "Cannot change the number of"
+                   " device transmission queues once they have been created.");
+
+  m_numTxQueues = numTxQueues;
+}
+
+void
+NetDeviceQueueInterface::CreateTxQueues (void)
+{
+  NS_LOG_FUNCTION (this);
 
-  uint8_t prevNumTxQueues = m_txQueuesVector.size ();
-  m_txQueuesVector.resize (numTxQueues);
+  NS_ABORT_MSG_IF (m_txQueuesVector.size (), "The device transmission queues"
+                   " have been already created.");
 
-  // Allocate new NetDeviceQueues if the number of queues increased
-  for (uint8_t i = prevNumTxQueues; i < numTxQueues; i++)
+  for (uint8_t i = 0; i < m_numTxQueues; i++)
     {
       Ptr<NetDeviceQueue> devQueue = Create<NetDeviceQueue> ();
-      m_txQueuesVector[i] = devQueue;
+      m_txQueuesVector.push_back (devQueue);
     }
 }
 
@@ -191,30 +259,12 @@
   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
+NetDeviceQueueInterface::SelectQueueCallback
+NetDeviceQueueInterface::GetSelectQueueCallback (void) const
 {
-  return m_queueDiscInstalled;
+  return m_selectQueueCallback;
 }
 
-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.25/src/network/model/net-device.h ns-3.26/src/network/model/net-device.h
--- ns-3.25/src/network/model/net-device.h	2016-10-03 20:57:08.495245707 -0700
+++ ns-3.26/src/network/model/net-device.h	2016-10-03 19:49:01.797386535 -0700
@@ -37,6 +37,7 @@
 class Node;
 class Channel;
 class Packet;
+class QueueLimits;
 
 /**
  * \ingroup network
@@ -79,6 +80,24 @@
   virtual uint32_t GetPacketSize (void) const;
 
   /**
+   * \enum Uint8Values
+   * \brief 1-byte fields of the packet whose value can be retrieved, if present
+   */
+  enum Uint8Values
+    {
+      IP_DSFIELD
+    };
+
+  /**
+   * \brief Retrieve the value of a given field from the packet, if present
+   * \param field the field whose value has to be retrieved
+   * \param value the output parameter to store the retrieved value
+   *
+   * \return true if the requested field is present in the packet, false otherwise.
+   */
+  virtual bool GetUint8Value (Uint8Values field, uint8_t &value) const;
+
+  /**
    * \brief Print the item contents.
    * \param os output stream in which the data should be printed.
    */
@@ -112,6 +131,9 @@
    */
   QueueItem &operator = (const QueueItem &);
 
+  /**
+   * The packet contained in the queue item.
+   */
   Ptr<Packet> m_packet;
 };
 
@@ -135,7 +157,6 @@
  * 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>
 {
@@ -144,27 +165,27 @@
   virtual ~NetDeviceQueue();
 
   /**
-   * Called by the device to start this (hardware) transmission queue.
+   * Called by the device to start this device 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.
+   * Called by the device to stop this device 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.
+   * device 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.
+   * \return true if the device 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.
@@ -187,14 +208,39 @@
   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.
+   * \brief Called by the netdevice to report the number of bytes queued to the device queue
+   * \param bytes number of bytes queued to the device queue
+   */
+  void NotifyQueuedBytes (uint32_t bytes);
+
+  /**
+   * \brief Called by the netdevice to report the number of bytes it is going to transmit
+   * \param bytes number of bytes the device is going to transmit
+   */
+  void NotifyTransmittedBytes (uint32_t bytes);
+
+  /**
+   * \brief Reset queue limits state
+   */
+  void ResetQueueLimits ();
+
+  /**
+   * \brief Set queue limits to this queue
+   * \param ql the queue limits associated to this queue
    */
-  virtual bool HasWakeCallbackSet (void) const;
+  void SetQueueLimits (Ptr<QueueLimits> ql);
+
+  /**
+   * \brief Get queue limits to this queue
+   * \return the queue limits associated to this queue
+   */
+  Ptr<QueueLimits> GetQueueLimits ();
 
 private:
-  bool m_stopped;   //!< Status of the transmission queue
-  WakeCallback m_wakeCallback;   //!< Wake callback
+  bool m_stoppedByDevice;         //!< True if the queue has been stopped by the device
+  bool m_stoppedByQueueLimits;    //!< True if the queue has been stopped by a queue limits object
+  Ptr<QueueLimits> m_queueLimits; //!< Queue limits object
+  WakeCallback m_wakeCallback;    //!< Wake callback
 };
 
 
@@ -203,15 +249,15 @@
  *
  * \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.
+ * This interface is used by the traffic control layer and by the aggregated
+ * device to access the transmission queues of the device. Additionally, through
+ * this interface, traffic control aware netdevices can:
+ * - set the number of transmission queues
+ * - set the method used (by upper layers) to determine the transmission queue
+ *   in which the netdevice would enqueue a given packet
+ * This interface is created and aggregated to a device by the traffic control
+ * layer when an Ipv{4,6}Interface is added to the device or a queue disc is
+ * installed on the device.
  */
 class NetDeviceQueueInterface : public Object
 {
@@ -232,6 +278,8 @@
 
   /**
    * \brief Get the i-th transmission queue of the device.
+   *
+   * \param i the index of the requested queue.
    * \return the i-th transmission queue of the device.
    *
    * The index of the first transmission queue is zero.
@@ -242,52 +290,47 @@
    * \brief Get the number of device transmission queues.
    * \return the number of device transmission queues.
    */
-  uint8_t GetTxQueuesN (void) const;
+  uint8_t GetNTxQueues (void) const;
 
   /**
-   * \brief Set the number of device transmission queues.
-   * \param numTxQueues number of device transmission queues.
+   * \brief Set the number of device transmission queues to create.
+   * \param numTxQueues number of device transmission queues to create.
    *
-   * 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.
+   * A multi-queue netdevice must call this method from within its
+   * NotifyNewAggregate method to set the number of device transmission queues
+   * to create.
    */
   void SetTxQueuesN (uint8_t numTxQueues);
 
+  /**
+   * \brief Create the device transmission queues.
+   *
+   * Called by the traffic control layer just after aggregating this netdevice
+   * queue interface to the netdevice.
+   */
+  void CreateTxQueues (void);
+
   /// 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
+   * \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
+   * A multi-queue netdevice must call this method from within its
+   * NotifyNewAggregate method 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
+   * \brief Get the select queue callback.
+   * \return the select queue callback.
    *
-   * 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.
+   * Called by the traffic control layer to get the select queue callback set
+   * by a multi-queue 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);
+  SelectQueueCallback GetSelectQueueCallback (void) const;
 
 protected:
   /**
@@ -298,7 +341,7 @@
 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
+  uint8_t m_numTxQueues;   //!< Number of transmission queues to create
 };
 
 
@@ -333,6 +376,31 @@
  * layer 3 protocols through its GetMulticast methods: the current
  * API has been optimized to make it easy to add new MAC protocols,
  * not to add new layer 3 protocols.
+ *
+ * Devices aiming to be Traffic Control aware must implement a NotifyNewAggregate
+ * method to perform the following operations:
+ *   - cache the pointer to the netdevice queue interface aggregated to the device
+ *   - set the number of device transmission queues through the netdevice queue
+ *     interface, if the device is multi-queue
+ *   - set the select queue callback through the netdevice queue interface, if
+ *     the device is multi-queue
+ * In order to support flow control, a Traffic Control aware device must:
+ *   - stop a device queue when there is no room for another packet. This check
+ *     is typically performed after successfully enqueuing a packet in the device
+ *     queue. Failing to enqueue a packet because there is no room for the packet
+ *     in the queue should be avoided. Should such a situation occur, the device
+ *     queue should be immediately stopped
+ *   - wake up the queue disc when the device queue is empty. This check is
+ *     typically performed after a dequeue operation fails because the device
+ *     queue is empty.
+ *   - start a device queue when the queue is stopped and there is room for
+ *     another packet. This check is typically performed after successfully
+ *     dequeuing a packet from the device queue
+ * In order to support BQL, a Traffic Control aware device must:
+ *   - call NotifyQueuedBytes after successfully enqueuing a packet in the
+ *     device queue
+ *   - call NotifyTransmittedBytes after successfully dequeuing a packet from
+ *     the device queue
  */
 class NetDevice : public Object
 {
diff -Naur ns-3.25/src/network/model/packet.h ns-3.26/src/network/model/packet.h
--- ns-3.25/src/network/model/packet.h	2016-10-03 20:57:08.501245660 -0700
+++ ns-3.26/src/network/model/packet.h	2016-10-03 19:49:01.803386490 -0700
@@ -543,7 +543,7 @@
    */
   void AddByteTag (const Tag &tag) const;
   /**
-   * \brief Retiurns an iterator over the set of byte tags included in this packet
+   * \brief Returns an iterator over the set of byte tags included in this packet
    *
    * \returns an iterator over the set of byte tags included in this packet.
    */
@@ -711,6 +711,12 @@
   Packet (const Buffer &buffer, const ByteTagList &byteTagList, 
           const PacketTagList &packetTagList, const PacketMetadata &metadata);
 
+  /**
+   * \brief Deserializes a packet.
+   * \param [in] buffer the input buffer.
+   * \param [in] size the buffer size.
+   * \returns the number of deserialized bytes.
+   */
   uint32_t Deserialize (uint8_t const*buffer, uint32_t size);
 
   Buffer m_buffer;                //!< the packet buffer (it's actual contents)
diff -Naur ns-3.25/src/network/model/packet-metadata.cc ns-3.26/src/network/model/packet-metadata.cc
--- ns-3.25/src/network/model/packet-metadata.cc	2016-10-03 20:57:08.498245683 -0700
+++ ns-3.26/src/network/model/packet-metadata.cc	2016-10-03 19:49:01.800386513 -0700
@@ -1109,10 +1109,8 @@
       item.type = PacketMetadata::Item::HEADER;
       if (!item.isFragment)
         {
-          ns3::Buffer tmp = m_buffer;
-          tmp.RemoveAtStart (m_offset);
-          tmp.RemoveAtEnd (tmp.GetSize () - item.currentSize);
-          item.current = tmp.Begin ();
+          item.current = m_buffer.Begin ();
+          item.current.Next (m_offset);
         }
     }
   else if (tid.IsChildOf (Trailer::GetTypeId ()))
@@ -1120,10 +1118,8 @@
       item.type = PacketMetadata::Item::TRAILER;
       if (!item.isFragment)
         {
-          ns3::Buffer tmp = m_buffer;
-          tmp.RemoveAtEnd (tmp.GetSize () - (m_offset + smallItem.size));
-          tmp.RemoveAtStart (tmp.GetSize () - item.currentSize);
-          item.current = tmp.End ();
+          item.current = m_buffer.End ();
+          item.current.Prev (m_buffer.GetSize () - (m_offset + smallItem.size));
         }
     }
   else 
diff -Naur ns-3.25/src/network/model/packet-tag-list.h ns-3.26/src/network/model/packet-tag-list.h
--- ns-3.25/src/network/model/packet-tag-list.h	2016-10-03 20:57:08.499245676 -0700
+++ ns-3.26/src/network/model/packet-tag-list.h	2016-10-03 19:49:01.802386498 -0700
@@ -75,7 +75,7 @@
  *          T2:n -> T1:l ;
  *          T1:n -> NULL ;
  *        };
- *      };
+ *      }
  * \enddot
  *
  *   - Tags are stored in serialized form in a tree of TagData
@@ -102,7 +102,7 @@
  *     any other #PacketTagList's, hence this is a \c const function.
  *
  *   - Copy constructor (PacketTagList(const PacketTagList & o))
- *     and assignment (#operator=(const PacketTagList & o)
+ *     and assignment (#operator=(const PacketTagList & o))
  *     simply join the tree at the same place as the original
  *     PacketTagList \c o, incrementing the \c count.
  *     For assignment, the old branch is deleted, up to
diff -Naur ns-3.25/src/network/model/socket.cc ns-3.26/src/network/model/socket.cc
--- ns-3.25/src/network/model/socket.cc	2016-10-03 20:57:08.502245652 -0700
+++ ns-3.26/src/network/model/socket.cc	2016-10-03 19:49:01.805386475 -0700
@@ -43,8 +43,7 @@
 }
 
 Socket::Socket (void)
-  : m_manualIpTos (false),
-    m_manualIpTtl (false),
+  : m_manualIpTtl (false),
     m_ipRecvTos (false),
     m_ipRecvTtl (false),
     m_manualIpv6Tclass (false),
@@ -56,6 +55,7 @@
   m_boundnetdevice = 0;
   m_recvPktInfo = false;
 
+  m_priority = 0;
   m_ipTos = 0;
   m_ipTtl = 0;
   m_ipv6Tclass = 0;
@@ -368,12 +368,6 @@
 }
 
 bool
-Socket::IsManualIpTos (void) const
-{
-  return m_manualIpTos;
-}
-
-bool
 Socket::IsManualIpv6Tclass (void) const
 {
   return m_manualIpv6Tclass;
@@ -392,12 +386,73 @@
 }
 
 void
+Socket::SetPriority (uint8_t priority)
+{
+  if (priority <= 6)
+    {
+      m_priority = priority;
+    }
+  else
+    {
+      NS_LOG_ERROR ("Cannot set a priority higher than 6");
+    }
+}
+
+uint8_t
+Socket::GetPriority (void) const
+{
+  return m_priority;
+}
+
+uint8_t
+Socket::IpTos2Priority (uint8_t ipTos)
+{
+  uint8_t prio = NS3_PRIO_BESTEFFORT;
+  ipTos &= 0x1e;
+  switch (ipTos >> 1)
+    {
+    case 0:
+    case 1:
+    case 2:
+    case 3:
+      prio = NS3_PRIO_BESTEFFORT;
+      break;
+    case 4:
+    case 5:
+    case 6:
+    case 7:
+      prio = NS3_PRIO_BULK;
+      break;
+    case 8:
+    case 9:
+    case 10:
+    case 11:
+      prio = NS3_PRIO_INTERACTIVE;
+      break;
+    case 12:
+    case 13:
+    case 14:
+    case 15:
+      prio = NS3_PRIO_INTERACTIVE_BULK;
+      break;
+    }
+  return prio;
+}
+
+void
 Socket::SetIpTos (uint8_t tos)
 {
   Address address;
   GetSockName (address);
-  m_manualIpTos = true;
+  if (GetSocketType () == NS3_SOCK_STREAM)
+    {
+      // preserve the least two significant bits of the current TOS
+      // value, which are used for ECN
+      tos &= 0xfc;
+      tos |= m_ipTos & 0x3;
+    }
   m_ipTos = tos;
+  m_priority = IpTos2Priority (tos);
 }
 
 uint8_t
@@ -546,67 +601,6 @@
  *           Socket Tags
  ***************************************************************/
 
-SocketAddressTag::SocketAddressTag ()
-{
-  NS_LOG_FUNCTION (this);
-}
-
-void 
-SocketAddressTag::SetAddress (Address addr)
-{
-  NS_LOG_FUNCTION (this << addr);
-  m_address = addr;
-}
-
-Address 
-SocketAddressTag::GetAddress (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_address;
-}
-
-NS_OBJECT_ENSURE_REGISTERED (SocketAddressTag);
-
-TypeId
-SocketAddressTag::GetTypeId (void)
-{
-  static TypeId tid = TypeId ("ns3::SocketAddressTag")
-    .SetParent<Tag> ()
-    .SetGroupName("Network")
-    .AddConstructor<SocketAddressTag> ()
-  ;
-  return tid;
-}
-TypeId
-SocketAddressTag::GetInstanceTypeId (void) const
-{
-  return GetTypeId ();
-}
-uint32_t
-SocketAddressTag::GetSerializedSize (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_address.GetSerializedSize ();
-}
-void
-SocketAddressTag::Serialize (TagBuffer i) const
-{
-  NS_LOG_FUNCTION (this << &i);
-  m_address.Serialize (i);
-}
-void
-SocketAddressTag::Deserialize (TagBuffer i)
-{
-  NS_LOG_FUNCTION (this << &i);
-  m_address.Deserialize (i);
-}
-void
-SocketAddressTag::Print (std::ostream &os) const
-{
-  NS_LOG_FUNCTION (this << &os);
-  os << "address=" << m_address;
-}
-
 SocketIpTtlTag::SocketIpTtlTag ()
 {
   NS_LOG_FUNCTION (this);
@@ -846,6 +840,64 @@
 }
 
 
+SocketPriorityTag::SocketPriorityTag ()
+{
+}
+
+void
+SocketPriorityTag::SetPriority (uint8_t priority)
+{
+  m_priority = priority;
+}
+
+uint8_t
+SocketPriorityTag::GetPriority (void) const
+{
+  return m_priority;
+}
+
+TypeId
+SocketPriorityTag::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::SocketPriorityTag")
+    .SetParent<Tag> ()
+    .SetGroupName("Network")
+    .AddConstructor<SocketPriorityTag> ()
+    ;
+  return tid;
+}
+
+TypeId
+SocketPriorityTag::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+
+uint32_t
+SocketPriorityTag::GetSerializedSize (void) const
+{
+  return sizeof (uint8_t);
+}
+
+void
+SocketPriorityTag::Serialize (TagBuffer i) const
+{
+  i.WriteU8 (m_priority);
+}
+
+void
+SocketPriorityTag::Deserialize (TagBuffer i)
+{
+  m_priority = i.ReadU8();
+}
+
+void
+SocketPriorityTag::Print (std::ostream &os) const
+{
+  os << "SO_PRIORITY = " << m_priority;
+}
+
+
 SocketIpv6TclassTag::SocketIpv6TclassTag ()
 {
 }
diff -Naur ns-3.25/src/network/model/socket.h ns-3.26/src/network/model/socket.h
--- ns-3.25/src/network/model/socket.h	2016-10-03 20:57:08.503245645 -0700
+++ ns-3.26/src/network/model/socket.h	2016-10-03 19:49:01.806386468 -0700
@@ -109,6 +109,22 @@
   };
 
   /**
+   * \enum SocketPriority
+   * \brief Enumeration of the possible socket priorities.
+   *
+   * Names and corresponding values are derived from
+   * the Linux TC_PRIO_* macros
+   */
+  enum SocketPriority {
+    NS3_PRIO_BESTEFFORT = 0,
+    NS3_PRIO_FILLER = 1,
+    NS3_PRIO_BULK = 2,
+    NS3_PRIO_INTERACTIVE_BULK = 4,
+    NS3_PRIO_INTERACTIVE = 6,
+    NS3_PRIO_CONTROL = 7
+  };
+
+  /**
    * \enum Ipv6MulticastFilterMode
    * \brief Enumeration of the possible filter of a socket.
    *
@@ -665,13 +681,110 @@
   bool IsRecvPktInfo () const;
 
   /**
+   * \brief Manually set the socket priority
+   *
+   * This method corresponds to using setsockopt () SO_PRIORITY of
+   * real network or BSD sockets.
+   *
+   * \param priority The socket priority (in the range 0..6)
+   */
+  void SetPriority (uint8_t priority);
+
+  /**
+   * \brief Query the priority value of this socket
+   *
+   * This method corresponds to using getsockopt () SO_PRIORITY of real network
+   * or BSD sockets.
+   *
+   * \return The priority value
+   */
+  uint8_t GetPriority (void) const;
+
+  /**
+   * \brief Return the priority corresponding to a given TOS value
+   *
+   * This function is implemented after the Linux rt_tos2priority
+   * function. The usage of the TOS byte has been 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'.
+   *
+   * The Linux rt_tos2priority function ignores the precedence bits and
+   * maps each of the 16 values coded in bits 3-6 as follows:
+   *
+   * Bits 3-6 | Means                   | Linux Priority
+   * ---------|-------------------------|----------------
+   *     0    |  Normal Service         | Best Effort (0)
+   *     1    |  Minimize Monetary Cost | Best Effort (0)
+   *     2    |  Maximize Reliability   | Best Effort (0)
+   *     3    |  mmc+mr                 | Best Effort (0)
+   *     4    |  Maximize Throughput    | Bulk (2)
+   *     5    |  mmc+mt                 | Bulk (2)
+   *     6    |  mr+mt                  | Bulk (2)
+   *     7    |  mmc+mr+mt              | Bulk (2)
+   *     8    |  Minimize Delay         | Interactive (6)
+   *     9    |  mmc+md                 | Interactive (6)
+   *    10    |  mr+md                  | Interactive (6)
+   *    11    |  mmc+mr+md              | Interactive (6)
+   *    12    |  mt+md                  | Int. Bulk (4)
+   *    13    |  mmc+mt+md              | Int. Bulk (4)
+   *    14    |  mr+mt+md               | Int. Bulk (4)
+   *    15    |  mmc+mr+mt+md           | Int. Bulk (4)
+   *
+   * RFC 2474 (http://www.ietf.org/rfc/rfc2474.txt) redefines the TOS byte:
+   *
+   *               0     1     2     3     4     5     6     7
+   *           +-----+-----+-----+-----+-----+-----+-----+-----+
+   *           |              DSCP                 |     CU    |
+   *           +-----+-----+-----+-----+-----+-----+-----+-----+
+   *
+   * where DSCP is the Differentiated Services Code Point and CU stands for
+   * 'currently unused' (actually, RFC 3168 proposes to use these two bits for
+   * ECN purposes). The table above allows to determine how the Linux
+   * rt_tos2priority function maps each DSCP value to a priority value. Such a
+   * mapping is shown below.
+   *
+   * DSCP | Hex  | TOS (binary) | bits 3-6 | Linux Priority
+   * -----|------|--------------|----------|----------------
+   * EF   | 0x2E |   101110xx   |  12-13   |  Int. Bulk (4)
+   * AF11 | 0x0A |   001010xx   |   4-5    |  Bulk (2)
+   * AF21 | 0x12 |   010010xx   |   4-5    |  Bulk (2)
+   * AF31 | 0x1A |   011010xx   |   4-5    |  Bulk (2)
+   * AF41 | 0x22 |   100010xx   |   4-5    |  Bulk (2)
+   * AF12 | 0x0C |   001100xx   |   8-9    |  Interactive (6)
+   * AF22 | 0x14 |   010100xx   |   8-9    |  Interactive (6)
+   * AF32 | 0x1C |   011100xx   |   8-9    |  Interactive (6)
+   * AF42 | 0x24 |   100100xx   |   8-9    |  Interactive (6)
+   * AF13 | 0x0E |   001110xx   |  12-13   |  Int. Bulk (4)
+   * AF23 | 0x16 |   010110xx   |  12-13   |  Int. Bulk (4)
+   * AF33 | 0x1E |   011110xx   |  12-13   |  Int. Bulk (4)
+   * AF43 | 0x26 |   100110xx   |  12-13   |  Int. Bulk (4)
+   * CS0  | 0x00 |   000000xx   |   0-1    |  Best Effort (0)
+   * CS1  | 0x08 |   001000xx   |   0-1    |  Best Effort (0)
+   * CS2  | 0x10 |   010000xx   |   0-1    |  Best Effort (0)
+   * CS3  | 0x18 |   011000xx   |   0-1    |  Best Effort (0)
+   * CS4  | 0x20 |   100000xx   |   0-1    |  Best Effort (0)
+   * CS5  | 0x28 |   101000xx   |   0-1    |  Best Effort (0)
+   * CS6  | 0x30 |   110000xx   |   0-1    |  Best Effort (0)
+   * CS7  | 0x38 |   111000xx   |   0-1    |  Best Effort (0)
+   *
+   * \param ipTos the TOS value (in the range 0..255)
+   * \return The priority value corresponding to the given TOS value
+   */
+  static uint8_t IpTos2Priority (uint8_t ipTos);
+
+  /**
    * \brief Manually set IP Type of Service field
    * 
    * This method corresponds to using setsockopt () IP_TOS of
    * real network or BSD sockets. This option is for IPv4 only.
-   * Setting the IP TOS should also change the socket queueing
-   * priority as stated in the man page. However, socket priority
-   * is not yet supported.
+   * Setting the IP TOS also changes the socket priority as
+   * stated in the man page.
    *
    * \param ipTos The desired TOS value for IP headers
    */
@@ -937,13 +1050,6 @@
   virtual void DoDispose (void);
 
   /**
-   * \brief Checks if the socket has a specific IPv4 ToS set
-   *
-   * \returns true if the socket has a IPv4 ToS set, false otherwise.
-   */
-  bool IsManualIpTos (void) const;
-
-  /**
    * \brief Checks if the socket has a specific IPv6 Tclass set
    *
    * \returns true if the socket has a IPv6 Tclass set, false otherwise.
@@ -979,8 +1085,9 @@
   Callback<void, Ptr<Socket>, uint32_t >         m_sendCb;               //!< packet sent callback
   Callback<void, Ptr<Socket> >                   m_receivedData;         //!< data received callback
 
+  uint8_t m_priority; //!< the socket priority
+
   //IPv4 options
-  bool m_manualIpTos; //!< socket has IPv4 TOS set
   bool m_manualIpTtl; //!< socket has IPv4 TTL set
   bool m_ipRecvTos;   //!< socket forwards IPv4 TOS tag to L4
   bool m_ipRecvTtl;   //!< socket forwards IPv4 TTL tag to L4
@@ -999,54 +1106,6 @@
 };
 
 /**
- * \brief This class implements a tag that carries an address
- * of a packet across the socket interface.
- */
-class SocketAddressTag : public Tag
-{
-public:
-  SocketAddressTag ();
-
-  /**
-   * \brief Set the tag's address
-   *
-   * \param addr the address
-   */
-  void SetAddress (Address addr);
-
-  /**
-   * \brief Get the tag's address
-   *
-   * \returns the address
-   */
-  Address GetAddress (void) const;
-
-  /**
-   * \brief Get the type ID.
-   * \return the object TypeId
-   */
-  static TypeId GetTypeId (void);
-
-  // inherited function, no need to doc.
-  virtual TypeId GetInstanceTypeId (void) const;
-
-  // inherited function, no need to doc.
-  virtual uint32_t GetSerializedSize (void) const;
-
-  // inherited function, no need to doc.
-  virtual void Serialize (TagBuffer i) const;
-
-  // inherited function, no need to doc.
-  virtual void Deserialize (TagBuffer i);
-
-  // inherited function, no need to doc.
-  virtual void Print (std::ostream &os) const;
-
-private:
-  Address m_address; //!< the address carried by the tag
-};
-
-/**
  * \brief This class implements a tag that carries the socket-specific
  * TTL of a packet to the IP layer
  */
@@ -1240,6 +1299,52 @@
 };
 
 /**
+ * \brief indicates whether the socket has a priority set.
+ */
+class SocketPriorityTag : public Tag
+{
+public:
+  SocketPriorityTag ();
+
+  /**
+   * \brief Set the tag's priority
+   *
+   * \param priority the priority
+   */
+  void SetPriority (uint8_t priority);
+
+  /**
+   * \brief Get the tag's priority
+   *
+   * \returns the priority
+   */
+  uint8_t GetPriority (void) const;
+
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  // inherited function, no need to doc.
+  virtual TypeId GetInstanceTypeId (void) const;
+
+  // inherited function, no need to doc.
+  virtual uint32_t GetSerializedSize (void) const;
+
+  // inherited function, no need to doc.
+  virtual void Serialize (TagBuffer i) const;
+
+  // inherited function, no need to doc.
+  virtual void Deserialize (TagBuffer i);
+
+  // inherited function, no need to doc.
+  virtual void Print (std::ostream &os) const;
+private:
+  uint8_t m_priority;  //!< the priority carried by the tag
+};
+
+/**
  * \brief indicates whether the socket has IPV6_TCLASS set.
  * This tag is for IPv6 socket.
  */
diff -Naur ns-3.25/src/network/test/sequence-number-test-suite.cc ns-3.26/src/network/test/sequence-number-test-suite.cc
--- ns-3.25/src/network/test/sequence-number-test-suite.cc	2016-10-03 20:57:08.511245582 -0700
+++ ns-3.26/src/network/test/sequence-number-test-suite.cc	2016-10-03 19:49:01.814386409 -0700
@@ -98,84 +98,84 @@
 
 void SequenceNumberTestCase::DoRun (void)
 {
-#define NS_TEST_ASSERT_EQUAL(a,b) NS_TEST_ASSERT_MSG_EQ (a,b, "foo")
-#define NS_TEST_ASSERT(a) NS_TEST_ASSERT_MSG_EQ (bool(a), true, "foo")
+#define SEQ_TEST_ASSERT_EQUAL(a,b) NS_TEST_ASSERT_MSG_EQ (a,b, "foo")
+#define SEQ_TEST_ASSERT(a) NS_TEST_ASSERT_MSG_EQ (bool(a), true, "foo")
 
   {
     SequenceNumber32 num1 (3), num2 (5);
     uint32_t value;
 
     value = (num1 + num2).GetValue ();
-    NS_TEST_ASSERT_EQUAL (value, 8);
+    SEQ_TEST_ASSERT_EQUAL (value, 8);
 
     num1 += num2.GetValue ();
-    NS_TEST_ASSERT_EQUAL (num1, SequenceNumber32 (8));
+    SEQ_TEST_ASSERT_EQUAL (num1, SequenceNumber32 (8));
 
     ++num1;
-    NS_TEST_ASSERT_EQUAL (num1, SequenceNumber32 (9));
+    SEQ_TEST_ASSERT_EQUAL (num1, SequenceNumber32 (9));
 
     --num1;
-    NS_TEST_ASSERT_EQUAL (num1, SequenceNumber32 (8));
+    SEQ_TEST_ASSERT_EQUAL (num1, SequenceNumber32 (8));
 
     num1++;
-    NS_TEST_ASSERT_EQUAL (num1, SequenceNumber32 (9));
+    SEQ_TEST_ASSERT_EQUAL (num1, SequenceNumber32 (9));
 
     num1--;
-    NS_TEST_ASSERT_EQUAL (num1, SequenceNumber32 (8));
+    SEQ_TEST_ASSERT_EQUAL (num1, SequenceNumber32 (8));
 
   }
 
   {
     SequenceNumber16 num1 (60900), num2 (5), num3 (10000);
 
-    NS_TEST_ASSERT (num1 == num1);
+    SEQ_TEST_ASSERT (num1 == num1);
 
-    NS_TEST_ASSERT (num2 != num1);
+    SEQ_TEST_ASSERT (num2 != num1);
 
-    NS_TEST_ASSERT (num3 > num2);
-    NS_TEST_ASSERT (num3 >= num2);
-    NS_TEST_ASSERT (num1 < num3);
-    NS_TEST_ASSERT (num1 <= num3);
-
-    NS_TEST_ASSERT (num1 < num2);
-    NS_TEST_ASSERT (num1 <= num2);
-    NS_TEST_ASSERT (num2 > num1);
-    NS_TEST_ASSERT (num2 >= num1);
-
-    NS_TEST_ASSERT (num1+num2 > num1);
-    NS_TEST_ASSERT (num1+num2 >= num1);
-    NS_TEST_ASSERT (num1 < num1+num2);
-    NS_TEST_ASSERT (num1 <= num1+num2);
-
-    NS_TEST_ASSERT (num1 < num1+num3);
-    NS_TEST_ASSERT (num1 <= num1+num3);
-    NS_TEST_ASSERT (num1+num3 > num1);
-    NS_TEST_ASSERT (num1+num3 >= num1);
+    SEQ_TEST_ASSERT (num3 > num2);
+    SEQ_TEST_ASSERT (num3 >= num2);
+    SEQ_TEST_ASSERT (num1 < num3);
+    SEQ_TEST_ASSERT (num1 <= num3);
+
+    SEQ_TEST_ASSERT (num1 < num2);
+    SEQ_TEST_ASSERT (num1 <= num2);
+    SEQ_TEST_ASSERT (num2 > num1);
+    SEQ_TEST_ASSERT (num2 >= num1);
+
+    SEQ_TEST_ASSERT (num1+num2 > num1);
+    SEQ_TEST_ASSERT (num1+num2 >= num1);
+    SEQ_TEST_ASSERT (num1 < num1+num2);
+    SEQ_TEST_ASSERT (num1 <= num1+num2);
+
+    SEQ_TEST_ASSERT (num1 < num1+num3);
+    SEQ_TEST_ASSERT (num1 <= num1+num3);
+    SEQ_TEST_ASSERT (num1+num3 > num1);
+    SEQ_TEST_ASSERT (num1+num3 >= num1);
   }
 
   {
-    NS_TEST_ASSERT_EQUAL ((SequenceNumber16 (1000) + SequenceNumber16 (6000)) - SequenceNumber16 (1000), 6000);
-    NS_TEST_ASSERT_EQUAL ((SequenceNumber16 (60000) + SequenceNumber16 (6000)) - SequenceNumber16 (60000), 6000);
-    NS_TEST_ASSERT_EQUAL (SequenceNumber16 (1000) - SequenceNumber16 (6000), -5000);
-    NS_TEST_ASSERT_EQUAL ((SequenceNumber16 (60000) + SequenceNumber16 (1000)) - SequenceNumber16 (65000), -4000);
+    SEQ_TEST_ASSERT_EQUAL ((SequenceNumber16 (1000) + SequenceNumber16 (6000)) - SequenceNumber16 (1000), 6000);
+    SEQ_TEST_ASSERT_EQUAL ((SequenceNumber16 (60000) + SequenceNumber16 (6000)) - SequenceNumber16 (60000), 6000);
+    SEQ_TEST_ASSERT_EQUAL (SequenceNumber16 (1000) - SequenceNumber16 (6000), -5000);
+    SEQ_TEST_ASSERT_EQUAL ((SequenceNumber16 (60000) + SequenceNumber16 (1000)) - SequenceNumber16 (65000), -4000);
   }
 
   {
     SequenceNumber32 num1 (3);
 
-    NS_TEST_ASSERT_EQUAL (num1 + 10, SequenceNumber32 (13));
+    SEQ_TEST_ASSERT_EQUAL (num1 + 10, SequenceNumber32 (13));
     num1 += -1;
-    NS_TEST_ASSERT_EQUAL (num1, SequenceNumber32 (2));
+    SEQ_TEST_ASSERT_EQUAL (num1, SequenceNumber32 (2));
 
-    NS_TEST_ASSERT_EQUAL (num1 - (num1 - 100), 100);
+    SEQ_TEST_ASSERT_EQUAL (num1 - (num1 - 100), 100);
   }
 
   {
     Ptr<SequenceNumberTestObj> obj = CreateObject<SequenceNumberTestObj> ();
     obj->TraceConnectWithoutContext ("TestTracedSequenceNumber", MakeCallback (&SequenceNumberTestCase::SequenceNumberTracer, this));
     obj->IncSequenceNumber ();
-    NS_TEST_ASSERT_EQUAL (m_oldval, SequenceNumber32 (0));
-    NS_TEST_ASSERT_EQUAL (m_newval, SequenceNumber32 (1));
+    SEQ_TEST_ASSERT_EQUAL (m_oldval, SequenceNumber32 (0));
+    SEQ_TEST_ASSERT_EQUAL (m_newval, SequenceNumber32 (1));
     obj->Dispose ();
   }
 
diff -Naur ns-3.25/src/network/utils/data-rate.h ns-3.26/src/network/utils/data-rate.h
--- ns-3.25/src/network/utils/data-rate.h	2016-10-03 20:57:08.514245559 -0700
+++ ns-3.26/src/network/utils/data-rate.h	2016-10-03 19:49:01.817386386 -0700
@@ -188,7 +188,8 @@
    * \deprecated This method will go away in future versions of ns-3.
    * See instead CalculateBytesTxTime()
    */
-  double CalculateTxTime (uint32_t bytes) const NS_DEPRECATED;
+  NS_DEPRECATED
+  double CalculateTxTime (uint32_t bytes) const;
 
   /**
    * Get the underlying bitrate
diff -Naur ns-3.25/src/network/utils/drop-tail-queue.cc ns-3.26/src/network/utils/drop-tail-queue.cc
--- ns-3.25/src/network/utils/drop-tail-queue.cc	2016-10-03 20:57:08.514245559 -0700
+++ ns-3.26/src/network/utils/drop-tail-queue.cc	2016-10-03 19:49:01.817386386 -0700
@@ -72,6 +72,20 @@
   return item;
 }
 
+Ptr<QueueItem>
+DropTailQueue::DoRemove (void)
+{
+  NS_LOG_FUNCTION (this);
+  NS_ASSERT (m_packets.size () == GetNPackets ());
+
+  Ptr<QueueItem> item = m_packets.front ();
+  m_packets.pop ();
+
+  NS_LOG_LOGIC ("Removed " << item);
+
+  return item;
+}
+
 Ptr<const QueueItem>
 DropTailQueue::DoPeek (void) const
 {
diff -Naur ns-3.25/src/network/utils/drop-tail-queue.h ns-3.26/src/network/utils/drop-tail-queue.h
--- ns-3.25/src/network/utils/drop-tail-queue.h	2016-10-03 20:57:08.515245551 -0700
+++ ns-3.26/src/network/utils/drop-tail-queue.h	2016-10-03 19:49:01.818386379 -0700
@@ -49,6 +49,7 @@
 private:
   virtual bool DoEnqueue (Ptr<QueueItem> item);
   virtual Ptr<QueueItem> DoDequeue (void);
+  virtual Ptr<QueueItem> DoRemove (void);
   virtual Ptr<const QueueItem> DoPeek (void) const;
 
   std::queue<Ptr<QueueItem> > m_packets; //!< the items in the queue
diff -Naur ns-3.25/src/network/utils/dynamic-queue-limits.cc ns-3.26/src/network/utils/dynamic-queue-limits.cc
--- ns-3.25/src/network/utils/dynamic-queue-limits.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/network/utils/dynamic-queue-limits.cc	2016-10-03 19:49:01.818386379 -0700
@@ -0,0 +1,229 @@
+/* -*- 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
+ *
+ * Authors: Pasquale Imputato <p.imputato@gmail.com>
+ *          Stefano Avallone <stefano.avallone@unina.it>
+ *
+ * This code is a port of the dynamic queue limits library implemented
+ * in the Linux kernel by
+ * Author: Tom Herbert <therbert@google.com>
+ */
+
+#include "ns3/log.h"
+#include "ns3/uinteger.h"
+#include "ns3/simulator.h"
+#include "ns3/string.h"
+#include "dynamic-queue-limits.h"
+
+// Set some static maximums
+static const uint32_t UINTMAX = std::numeric_limits<uint32_t>::max ();
+static const uint32_t DQL_MAX_OBJECT = UINTMAX / 16;
+static const uint32_t DQL_MAX_LIMIT = (UINTMAX / 2) - DQL_MAX_OBJECT;
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("DynamicQueueLimits");
+
+NS_OBJECT_ENSURE_REGISTERED (DynamicQueueLimits);
+
+TypeId
+DynamicQueueLimits::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::DynamicQueueLimits")
+    .SetParent<Object> ()
+    .SetParent<QueueLimits> ()
+    .SetGroupName ("Network")
+    .AddConstructor<DynamicQueueLimits> ()
+    .AddAttribute ("HoldTime",
+                   "The DQL algorithm hold time",
+                   StringValue ("1s"),
+                   MakeTimeAccessor (&DynamicQueueLimits::m_slackHoldTime),
+                   MakeTimeChecker ())
+    .AddAttribute ("MaxLimit",
+                   "Maximum limit",
+                   UintegerValue (DQL_MAX_LIMIT),
+                   MakeUintegerAccessor (&DynamicQueueLimits::m_maxLimit),
+                   MakeUintegerChecker<uint32_t> (0, DQL_MAX_LIMIT))
+    .AddAttribute ("MinLimit",
+                   "Minimum limit",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&DynamicQueueLimits::m_minLimit),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddTraceSource ("Limit",
+                     "Limit value calculated by DQL",
+                     MakeTraceSourceAccessor (&DynamicQueueLimits::m_limit),
+                     "ns3::TracedValueCallback::Uint32")
+  ;
+  return tid;
+}
+
+DynamicQueueLimits::DynamicQueueLimits ()
+{
+  NS_LOG_FUNCTION (this);
+  Reset ();
+}
+
+DynamicQueueLimits::~DynamicQueueLimits ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+DynamicQueueLimits::Reset ()
+{
+  NS_LOG_FUNCTION (this);
+  // Reset all dynamic values
+  m_limit = 0;
+  m_numQueued = 0;
+  m_numCompleted = 0;
+  m_lastObjCnt = 0;
+  m_prevNumQueued = 0;
+  m_prevLastObjCnt = 0;
+  m_prevOvlimit = 0;
+  m_lowestSlack = UINTMAX;
+  m_slackStartTime = Simulator::Now ();
+}
+
+void
+DynamicQueueLimits::Completed (uint32_t count)
+{
+  NS_LOG_FUNCTION (this << count);
+  uint32_t inprogress, prevInprogress, limit;
+  uint32_t ovlimit, completed, numQueued;
+  bool allPrevCompleted;
+
+  numQueued = m_numQueued;
+
+  // Can't complete more than what's in queue
+  NS_ASSERT (count <= numQueued - m_numCompleted);
+
+  completed = m_numCompleted + count;
+  limit = m_limit;
+  ovlimit = Posdiff (numQueued - m_numCompleted, limit);
+  inprogress = numQueued - completed;
+  prevInprogress = m_prevNumQueued - m_numCompleted;
+  allPrevCompleted = ((int32_t)(completed - m_prevNumQueued)) >= 0;
+
+  if ((ovlimit && !inprogress) || (m_prevOvlimit && allPrevCompleted))
+    {
+      NS_LOG_DEBUG ("Queue starved, increase limit");
+     /*
+      * Queue considered starved if:
+      *   - The queue was over-limit in the last interval,
+      *     and there is no more data in the queue.
+      *  OR
+      *   - The queue was over-limit in the previous interval and
+      *     when enqueuing it was possible that all queued data
+      *     had been consumed.  This covers the case when queue
+      *     may have becomes starved between completion processing
+      *     running and next time enqueue was scheduled.
+      *
+      *     When queue is starved increase the limit by the amount
+      *     of bytes both sent and completed in the last interval,
+      *     plus any previous over-limit.
+      */
+      limit += Posdiff (completed, m_prevNumQueued) + m_prevOvlimit;
+      m_slackStartTime = Simulator::Now ();
+      m_lowestSlack = UINTMAX;
+    }
+  else if (inprogress && prevInprogress && !allPrevCompleted)
+    {
+      NS_LOG_DEBUG ("Queue not starved, check decrease limit");
+     /*
+      * Queue was not starved, check if the limit can be decreased.
+      * A decrease is only considered if the queue has been busy in
+      * the whole interval (the check above).
+      *
+      * If there is slack, the amount of execess data queued above
+      * the the amount needed to prevent starvation, the queue limit
+      * can be decreased.  To avoid hysteresis we consider the
+      * minimum amount of slack found over several iterations of the
+      * completion routine.
+      */
+      uint32_t slack, slackLastObjs;
+
+     /*
+      * Slack is the maximum of
+      *   - The queue limit plus previous over-limit minus twice
+      *     the number of objects completed.  Note that two times
+      *     number of completed bytes is a basis for an upper bound
+      *     of the limit.
+      *   - Portion of objects in the last queuing operation that
+      *     was not part of non-zero previous over-limit.  That is
+      *     "round down" by non-overlimit portion of the last
+      *     queueing operation.
+      */
+      slack = Posdiff (limit + m_prevOvlimit, 2 * (completed - m_numCompleted));
+      slackLastObjs = m_prevOvlimit ? Posdiff (m_prevLastObjCnt, m_prevOvlimit) : 0;
+
+      slack = std::max (slack, slackLastObjs);
+
+      if (slack < m_lowestSlack)
+        {
+          m_lowestSlack = slack;
+        }
+
+      if (Simulator::Now () > (m_slackStartTime + m_slackHoldTime))
+        {
+          limit = Posdiff (limit, m_lowestSlack);
+          m_slackStartTime = Simulator::Now ();
+          m_lowestSlack = UINTMAX;
+        }
+    }
+
+  // Enforce bounds on limit
+  limit = std::min ((uint32_t)std::max (limit, m_minLimit), m_maxLimit);
+
+  if (limit != m_limit)
+    {
+      NS_LOG_DEBUG ("Update limit");
+      m_limit = limit;
+      ovlimit = 0;
+    }
+
+  m_adjLimit = limit + completed;
+  m_prevOvlimit = ovlimit;
+  m_prevLastObjCnt = m_lastObjCnt;
+  m_numCompleted = completed;
+  m_prevNumQueued = numQueued;
+}
+
+int32_t
+DynamicQueueLimits::Available () const
+{
+  NS_LOG_FUNCTION (this);
+  return (m_adjLimit - m_numQueued);
+}
+
+void
+DynamicQueueLimits::Queued (uint32_t count)
+{
+  NS_LOG_FUNCTION (this << count);
+  NS_ASSERT (count <= DQL_MAX_OBJECT);
+
+  m_lastObjCnt = count;
+  m_numQueued += count;
+}
+
+int32_t
+DynamicQueueLimits::Posdiff (int32_t a, int32_t b)
+{
+  NS_LOG_FUNCTION (this << a << b);
+  return std::max ((a - b), 0);
+}
+
+} // namespace ns3
diff -Naur ns-3.25/src/network/utils/dynamic-queue-limits.h ns-3.26/src/network/utils/dynamic-queue-limits.h
--- ns-3.25/src/network/utils/dynamic-queue-limits.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/network/utils/dynamic-queue-limits.h	2016-10-03 19:49:01.818386379 -0700
@@ -0,0 +1,113 @@
+/* -*- 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
+ *
+ * Authors: Pasquale Imputato <p.imputato@gmail.com>
+ *          Stefano Avallone <stefano.avallone@unina.it>
+ *
+ * This code is a port of the dynamic queue limits library implemented
+ * in the Linux kernel by
+ * Author: Tom Herbert <therbert@google.com>
+ */
+
+#ifndef DYNAMIC_QUEUE_LIMITS_H
+#define DYNAMIC_QUEUE_LIMITS_H
+
+#include "queue-limits.h"
+#include "ns3/nstime.h"
+#include "ns3/traced-value.h"
+#include <limits.h>
+
+namespace ns3 {
+
+/**
+ * \ingroup network
+ *
+ * DynamicQueueLimits would be used in conjunction with a producer/consumer
+ * type queue (possibly a netdevice queue).
+ * Such a queue would have these general properties:
+ *
+ *   1) Objects are queued up to some limit specified as number of objects.
+ *   2) Periodically a completion process executes which retires consumed
+ *      objects.
+ *   3) Starvation occurs when limit has been reached, all queued data has
+ *      actually been consumed, but completion processing has not yet run
+ *      so queuing new data is blocked.
+ *   4) Minimizing the amount of queued data is desirable.
+ *
+ * The goal of DynamicQueueLimits is to calculate the limit as the minimum
+ * number of objects needed to prevent starvation.
+ *
+ * The primary functions of DynamicQueueLimits are:
+ *   Completed - called at completion time to indicate how many objects
+ *               were retired from the queue
+ *   Available - returns how many objects are available to be queued based
+ *           on the object limit and how many objects are already enqueued
+ *   Queued - called when objects are enqueued to record number of objects
+ *
+ */
+
+class DynamicQueueLimits : public QueueLimits {
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  DynamicQueueLimits ();
+  virtual ~DynamicQueueLimits ();
+
+  virtual void Reset ();
+  virtual void Completed (uint32_t count);
+  virtual int32_t Available () const;
+  virtual void Queued (uint32_t count);
+
+private:
+  /**
+   * Calculates the difference between the two operators and
+   * returns the number if positive, zero otherwise.
+   * \param a First operator.
+   * \param b Second operator.
+   * \returns the difference between a and b if positive, zero otherwise.
+   */
+  int32_t Posdiff (int32_t a, int32_t b);
+
+  // Fields accessed in enqueue path
+  uint32_t m_numQueued;                 //!< Total ever queued
+  uint32_t m_adjLimit;                  //!< limit + num_completed
+  uint32_t m_lastObjCnt;                //!< Count at last queuing
+
+  // Fields accessed only by completion path
+  TracedValue<uint32_t> m_limit;        //!< Current limit
+  uint32_t m_numCompleted;              //!< Total ever completed
+
+  uint32_t m_prevOvlimit;               //!< Previous over limit
+  uint32_t m_prevNumQueued;             //!< Previous queue total
+  uint32_t m_prevLastObjCnt;            //!< Previous queuing cnt
+
+  uint32_t m_lowestSlack;               //!< Lowest slack found
+  Time m_slackStartTime;                //!< Time slacks seen
+
+  // Configuration
+  uint32_t m_maxLimit;                  //!< Max limit
+  uint32_t m_minLimit;                  //!< Minimum limit
+  Time m_slackHoldTime;                 //!< Time to measure slack
+};
+
+} // namespace ns3
+
+#endif /* DYNAMIC_QUEUE_LIMITS_H */
diff -Naur ns-3.25/src/network/utils/inet-socket-address.cc ns-3.26/src/network/utils/inet-socket-address.cc
--- ns-3.25/src/network/utils/inet-socket-address.cc	2016-10-03 20:57:08.519245520 -0700
+++ ns-3.26/src/network/utils/inet-socket-address.cc	2016-10-03 19:49:01.822386349 -0700
@@ -28,31 +28,36 @@
 
 InetSocketAddress::InetSocketAddress (Ipv4Address ipv4, uint16_t port)
   : m_ipv4 (ipv4),
-    m_port (port)
+    m_port (port),
+    m_tos (0)
 {
   NS_LOG_FUNCTION (this << ipv4 << port);
 }
 InetSocketAddress::InetSocketAddress (Ipv4Address ipv4)
   : m_ipv4 (ipv4),
-    m_port (0)
+    m_port (0),
+    m_tos (0)
 {
   NS_LOG_FUNCTION (this << ipv4);
 }
 InetSocketAddress::InetSocketAddress (const char *ipv4, uint16_t port)
   : m_ipv4 (Ipv4Address (ipv4)),
-    m_port (port)
+    m_port (port),
+    m_tos (0)
 {
   NS_LOG_FUNCTION (this << ipv4 << port);
 }
 InetSocketAddress::InetSocketAddress (const char * ipv4)
   : m_ipv4 (Ipv4Address (ipv4)),
-    m_port (0)
+    m_port (0),
+    m_tos (0)
 {
   NS_LOG_FUNCTION (this << ipv4);
 }
 InetSocketAddress::InetSocketAddress (uint16_t port)
   : m_ipv4 (Ipv4Address::GetAny ()),
-    m_port (port)
+    m_port (port),
+    m_tos (0)
 {
   NS_LOG_FUNCTION (this << port);
 }
@@ -68,6 +73,12 @@
   NS_LOG_FUNCTION (this);
   return m_ipv4;
 }
+uint8_t
+InetSocketAddress::GetTos (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_tos;
+}
 
 void 
 InetSocketAddress::SetPort (uint16_t port)
@@ -81,12 +92,18 @@
   NS_LOG_FUNCTION (this << address);
   m_ipv4 = address;
 }
+void
+InetSocketAddress::SetTos (uint8_t tos)
+{
+  NS_LOG_FUNCTION (this << tos);
+  m_tos = tos;
+}
 
 bool
 InetSocketAddress::IsMatchingType (const Address &address)
 {
   NS_LOG_FUNCTION (&address);
-  return address.CheckCompatible (GetType (), 6);
+  return address.CheckCompatible (GetType (), 7);
 }
 
 InetSocketAddress::operator Address () const
@@ -98,22 +115,26 @@
 InetSocketAddress::ConvertTo (void) const
 {
   NS_LOG_FUNCTION (this);
-  uint8_t buf[6];
+  uint8_t buf[7];
   m_ipv4.Serialize (buf);
   buf[4] = m_port & 0xff;
   buf[5] = (m_port >> 8) & 0xff;
-  return Address (GetType (), buf, 6);
+  buf[6] = m_tos;
+  return Address (GetType (), buf, 7);
 }
 InetSocketAddress 
 InetSocketAddress::ConvertFrom (const Address &address)
 {
   NS_LOG_FUNCTION (&address);
-  NS_ASSERT (address.CheckCompatible (GetType (), 6));
-  uint8_t buf[6];
+  NS_ASSERT (address.CheckCompatible (GetType (), 7));
+  uint8_t buf[7];
   address.CopyTo (buf);
   Ipv4Address ipv4 = Ipv4Address::Deserialize (buf);
   uint16_t port = buf[4] | (buf[5] << 8);
-  return InetSocketAddress (ipv4, port);
+  uint8_t tos = buf[6];
+  InetSocketAddress inet (ipv4, port);
+  inet.SetTos (tos);
+  return inet;
 }
 uint8_t 
 InetSocketAddress::GetType (void)
diff -Naur ns-3.25/src/network/utils/inet-socket-address.h ns-3.26/src/network/utils/inet-socket-address.h
--- ns-3.25/src/network/utils/inet-socket-address.h	2016-10-03 20:57:08.519245520 -0700
+++ ns-3.26/src/network/utils/inet-socket-address.h	2016-10-03 19:49:01.822386349 -0700
@@ -76,6 +76,10 @@
    * \returns the ipv4 address
    */
   Ipv4Address GetIpv4 (void) const;
+  /**
+   * \returns the ToS
+   */
+  uint8_t GetTos (void) const;
 
   /**
    * \param port the new port number.
@@ -85,6 +89,10 @@
    * \param address the new ipv4 address
    */
   void SetIpv4 (Ipv4Address address);
+  /**
+   * \param tos the new ToS.
+   */
+  void SetTos (uint8_t tos);
 
   /**
    * \param address address to test
@@ -120,6 +128,7 @@
   static uint8_t GetType (void);
   Ipv4Address m_ipv4; //!< the IPv4 address
   uint16_t m_port;    //!< the port
+  uint8_t m_tos;      //!< the ToS
 };
 
 } // namespace ns3
diff -Naur ns-3.25/src/network/utils/ipv4-address.h ns-3.26/src/network/utils/ipv4-address.h
--- ns-3.25/src/network/utils/ipv4-address.h	2016-10-03 20:57:08.520245513 -0700
+++ ns-3.26/src/network/utils/ipv4-address.h	2016-10-03 19:49:01.824386334 -0700
@@ -215,8 +215,31 @@
   static uint8_t GetType (void);
   uint32_t m_address; //!< IPv4 address
 
+  /**
+   * \brief Equal to operator.
+   *
+   * \param a the first operand.
+   * \param b the first operand.
+   * \returns true if the operands are equal.
+   */
   friend bool operator == (Ipv4Address const &a, Ipv4Address const &b);
+
+  /**
+   * \brief Not equal to operator.
+   *
+   * \param a the first operand.
+   * \param b the first operand.
+   * \returns true if the operands are not equal.
+   */
   friend bool operator != (Ipv4Address const &a, Ipv4Address const &b);
+
+  /**
+   * \brief Less than to operator.
+   *
+   * \param a the first operand.
+   * \param b the first operand.
+   * \returns true if the first operand is less than the second.
+   */
   friend bool operator < (Ipv4Address const &a, Ipv4Address const &b);
 };
 
diff -Naur ns-3.25/src/network/utils/ipv6-address.h ns-3.26/src/network/utils/ipv6-address.h
--- ns-3.25/src/network/utils/ipv6-address.h	2016-10-03 20:57:08.522245497 -0700
+++ ns-3.26/src/network/utils/ipv6-address.h	2016-10-03 19:49:01.825386327 -0700
@@ -225,11 +225,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.
+   * \deprecated This function is deprecated because the address has been removed from RFCs.
    *
    * \return true if "all hosts multicast", false otherwise
    */
-  bool IsAllHostsMulticast () const NS_DEPRECATED;
+  NS_DEPRECATED
+  bool IsAllHostsMulticast () const;
 
   /**
    * \brief If the IPv6 address is a link-local address (fe80::/64).
@@ -358,27 +359,27 @@
   /**
    * \brief Equal to operator.
    *
-   * \param a the first operand
-   * \param b the first operand
-   * \returns true if the operands are equal
+   * \param a the first operand.
+   * \param b the first operand.
+   * \returns true if the operands are equal.
    */
   friend bool operator == (Ipv6Address const &a, Ipv6Address const &b);
 
   /**
    * \brief Not equal to operator.
    *
-   * \param a the first operand
-   * \param b the first operand
-   * \returns true if the operands are not equal
+   * \param a the first operand.
+   * \param b the first operand.
+   * \returns true if the operands are not equal.
    */
   friend bool operator != (Ipv6Address const &a, Ipv6Address const &b);
 
   /**
    * \brief Less than to operator.
    *
-   * \param a the first operand
-   * \param b the first operand
-   * \returns true if the first operand is less than the second
+   * \param a the first operand.
+   * \param b the first operand.
+   * \returns true if the first operand is less than the second.
    */
   friend bool operator < (Ipv6Address const &a, Ipv6Address const &b);
 };
diff -Naur ns-3.25/src/network/utils/packet-socket.cc ns-3.26/src/network/utils/packet-socket.cc
--- ns-3.25/src/network/utils/packet-socket.cc	2016-10-03 20:57:08.530245435 -0700
+++ ns-3.26/src/network/utils/packet-socket.cc	2016-10-03 19:49:01.834386259 -0700
@@ -333,6 +333,14 @@
       return -1;
     }
 
+  uint8_t priority = GetPriority ();
+  if (priority)
+    {
+      SocketPriorityTag priorityTag;
+      priorityTag.SetPriority (priority);
+      p->ReplacePacketTag (priorityTag);
+    }
+
   bool error = false;
   Address dest = ad.GetPhysicalAddress ();
   if (ad.IsSingleDevice ())
@@ -397,12 +405,12 @@
       PacketSocketTag pst;
       pst.SetPacketType (packetType);
       pst.SetDestAddress (to);
-      SocketAddressTag tag;
-      tag.SetAddress (address);
-      copy->AddPacketTag (tag); // Attach From Physical Address
       copy->AddPacketTag (pst); // Attach Packet Type and Dest Address
       copy->AddPacketTag (dnt); // Attach device source name
-      m_deliveryQueue.push (copy);
+      // in case the packet still has a priority tag, remove it
+      SocketPriorityTag priorityTag;
+      copy->RemovePacketTag (priorityTag);
+      m_deliveryQueue.push (std::make_pair (copy, address));
       m_rxAvailable += packet->GetSize ();
       NS_LOG_LOGIC ("UID is " << packet->GetUid () << " PacketSocket " << this);
       NotifyDataRecv ();
@@ -432,11 +440,24 @@
 PacketSocket::Recv (uint32_t maxSize, uint32_t flags)
 {
   NS_LOG_FUNCTION (this << maxSize << flags);
+
+  Address fromAddress;
+  Ptr<Packet> packet = RecvFrom (maxSize, flags, fromAddress);
+  return packet;
+}
+
+Ptr<Packet>
+PacketSocket::RecvFrom (uint32_t maxSize, uint32_t flags, Address &fromAddress)
+{
+  NS_LOG_FUNCTION (this << maxSize << flags);
+
   if (m_deliveryQueue.empty () )
     {
       return 0;
     }
-  Ptr<Packet> p = m_deliveryQueue.front ();
+  Ptr<Packet> p = m_deliveryQueue.front ().first;
+  fromAddress = m_deliveryQueue.front ().second;
+
   if (p->GetSize () <= maxSize)
     {
       m_deliveryQueue.pop ();
@@ -449,22 +470,6 @@
   return p;
 }
 
-Ptr<Packet>
-PacketSocket::RecvFrom (uint32_t maxSize, uint32_t flags, Address &fromAddress)
-{
-  NS_LOG_FUNCTION (this << maxSize << flags << fromAddress);
-  Ptr<Packet> packet = Recv (maxSize, flags);
-  if (packet != 0)
-    {
-      SocketAddressTag tag;
-      bool found;
-      found = packet->PeekPacketTag (tag);
-      NS_ASSERT (found);
-      fromAddress = tag.GetAddress ();
-    }
-  return packet;
-}
-
 int
 PacketSocket::GetSockName (Address &address) const
 {
diff -Naur ns-3.25/src/network/utils/packet-socket-client.cc ns-3.26/src/network/utils/packet-socket-client.cc
--- ns-3.25/src/network/utils/packet-socket-client.cc	2016-10-03 20:57:08.528245450 -0700
+++ ns-3.26/src/network/utils/packet-socket-client.cc	2016-10-03 19:49:01.832386274 -0700
@@ -60,6 +60,12 @@
                    UintegerValue (1024),
                    MakeUintegerAccessor (&PacketSocketClient::m_size),
                    MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("Priority",
+                   "Priority assigned to the packets generated.",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&PacketSocketClient::SetPriority,
+                                         &PacketSocketClient::GetPriority),
+                   MakeUintegerChecker<uint8_t> ())
     .AddTraceSource ("Tx", "A packet has been sent",
                      MakeTraceSourceAccessor (&PacketSocketClient::m_txTrace),
                      "ns3::Packet::AddressTracedCallback")
@@ -97,6 +103,22 @@
 }
 
 void
+PacketSocketClient::SetPriority (uint8_t priority)
+{
+  m_priority = priority;
+  if (m_socket)
+    {
+      m_socket->SetPriority (priority);
+    }
+}
+
+uint8_t
+PacketSocketClient::GetPriority (void) const
+{
+  return m_priority;
+}
+
+void
 PacketSocketClient::StartApplication (void)
 {
   NS_LOG_FUNCTION (this);
@@ -109,6 +131,11 @@
 
       m_socket->Bind (m_peerAddress);
       m_socket->Connect (m_peerAddress);
+
+      if (m_priority)
+        {
+          m_socket->SetPriority (m_priority);
+        }
     }
 
   m_socket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket> > ());
diff -Naur ns-3.25/src/network/utils/packet-socket-client.h ns-3.26/src/network/utils/packet-socket-client.h
--- ns-3.25/src/network/utils/packet-socket-client.h	2016-10-03 20:57:08.528245450 -0700
+++ ns-3.26/src/network/utils/packet-socket-client.h	2016-10-03 19:49:01.832386274 -0700
@@ -68,6 +68,12 @@
    */
   void SetRemote (PacketSocketAddress addr);
 
+  /**
+   * \brief Query the priority value of this socket
+   * \return The priority value
+   */
+  uint8_t GetPriority (void) const;
+
 protected:
   virtual void DoDispose (void);
 
@@ -77,6 +83,12 @@
   virtual void StopApplication (void);
 
   /**
+   * \brief Manually set the socket priority
+   * \param priority The socket priority (in the range 0..6)
+   */
+  void SetPriority (uint8_t priority);
+
+  /**
    * \brief Send a packet
    */
   void Send (void);
@@ -84,6 +96,7 @@
   uint32_t m_maxPackets; //!< Maximum number of packets the application will send
   Time m_interval;       //!< Packet inter-send time
   uint32_t m_size;       //!< Size of the sent packet
+  uint8_t m_priority;    //!< Priority of the sent packets
 
   uint32_t m_sent;       //!< Counter for sent packets
   Ptr<Socket> m_socket;  //!< Socket
diff -Naur ns-3.25/src/network/utils/packet-socket.h ns-3.26/src/network/utils/packet-socket.h
--- ns-3.25/src/network/utils/packet-socket.h	2016-10-03 20:57:08.530245435 -0700
+++ ns-3.26/src/network/utils/packet-socket.h	2016-10-03 19:49:01.834386259 -0700
@@ -74,7 +74,22 @@
  * - Accept: not allowed
  *
  * - Listen: returns -1 (OPNOTSUPP)
+ *
+ * Socket data that is read from this socket using the methods returning
+ * an ns3::Packet object (i.e., Recv (), RecvMsg (), RecvFrom ()) will
+ * return Packet objects with three PacketTag objects attached.
+ * Applications may wish to read the extra out-of-band data provided in
+ * these tags, and may safely remove the tags from the Packet.
+ *
+ * - PacketSocketTag: contains destination address (type PacketSocketAddress)
+ *   and packet type of the received packet
+ *
+ * - DeviceNameTag:  contains the TypeId string of the relevant NetDevice
+ *
+ * \see class PacketSocketTag
+ * \see class DeviceNameTag
  */
+
 class PacketSocket : public Socket
 {
 public:
@@ -187,7 +202,7 @@
   uint32_t m_device;        //!< index of the bound NetDevice
   Address m_destAddr;       //!< Default destination address
 
-  std::queue<Ptr<Packet> > m_deliveryQueue; //!< Rx queue
+  std::queue<std::pair<Ptr<Packet>, Address> > m_deliveryQueue; //!< Rx queue
   uint32_t m_rxAvailable; //!< Rx queue size [Bytes]
 
   /// Traced callback: dropped packets
diff -Naur ns-3.25/src/network/utils/pcap-file.h ns-3.26/src/network/utils/pcap-file.h
--- ns-3.25/src/network/utils/pcap-file.h	2016-10-03 20:57:08.534245404 -0700
+++ ns-3.26/src/network/utils/pcap-file.h	2016-10-03 19:49:01.838386230 -0700
@@ -108,6 +108,9 @@
    * \param swapMode Flag indicating a difference in endianness of the 
    * writing system. Defaults to false.
    *
+   * \param nanosecMode Flag indicating the time resolution of the writing
+   * system. Default to false.
+   *
    * \return false if the open succeeds, true otherwise.
    *
    * \warning Calling this method on an existing file will result in the loss
@@ -195,7 +198,7 @@
   /**
    * \brief Get the nanosecond mode of the file.
    *
-   * IsNanoSecMode returns true if the packet timestamps in the PCAP 
+   * \returns true if the packet timestamps in the PCAP
    * file have nanosecond resolution.
    */
    bool IsNanoSecMode (void);
@@ -279,6 +282,7 @@
    * \param  f2         Second PCAP file name
    * \param  sec        [out] Time stamp of first different packet, seconds. Undefined if files doesn't differ.
    * \param  usec       [out] Time stamp of first different packet, microseconds. Undefined if files doesn't differ.
+   * \param  packets    [out] Number of first different packet. Total number of parsed packets if files doesn't differ.
    * \param  snapLen    Snap length (if used)
    */
   static bool Diff (std::string const & f1, std::string const & f2, 
diff -Naur ns-3.25/src/network/utils/pcap-file-wrapper.h ns-3.26/src/network/utils/pcap-file-wrapper.h
--- ns-3.25/src/network/utils/pcap-file-wrapper.h	2016-10-03 20:57:08.533245412 -0700
+++ ns-3.26/src/network/utils/pcap-file-wrapper.h	2016-10-03 19:49:01.837386237 -0700
@@ -143,10 +143,10 @@
   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
+   * \brief Read the next packet from the file.
    * 
    * \param t Reference to packet timestamp as ns3::Time.
-   * 
+   * \returns a pointer to ns3::Packet.
    */
   Ptr<Packet> Read (Time &t);
 
diff -Naur ns-3.25/src/network/utils/queue.cc ns-3.26/src/network/utils/queue.cc
--- ns-3.25/src/network/utils/queue.cc	2016-10-03 20:57:08.535245396 -0700
+++ ns-3.26/src/network/utils/queue.cc	2016-10-03 19:49:01.839386222 -0700
@@ -97,19 +97,18 @@
 Queue::Enqueue (Ptr<QueueItem> item)
 {
   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);
+      Drop (item);
       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);
+      Drop (item);
       return false;
     }
 
@@ -159,6 +158,32 @@
   return item;
 }
 
+Ptr<QueueItem>
+Queue::Remove (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  if (m_nPackets.Get () == 0)
+    {
+      NS_LOG_LOGIC ("Queue empty");
+      return 0;
+    }
+
+  Ptr<QueueItem> item = DoRemove ();
+
+  if (item != 0)
+    {
+      NS_ASSERT (m_nBytes.Get () >= item->GetPacketSize ());
+      NS_ASSERT (m_nPackets.Get () > 0);
+
+      m_nBytes -= item->GetPacketSize ();
+      m_nPackets--;
+
+      Drop (item);
+    }
+  return item;
+}
+
 void
 Queue::DequeueAll (void)
 {
@@ -319,15 +344,33 @@
 }
 
 void
-Queue::Drop (Ptr<Packet> p)
+Queue::SetDropCallback (DropCallback cb)
+{
+  m_dropCallback = cb;
+}
+
+void
+Queue::NotifyDrop (Ptr<QueueItem> item)
 {
-  NS_LOG_FUNCTION (this << p);
+  NS_LOG_FUNCTION (this << item);
+
+  if (!m_dropCallback.IsNull ())
+    {
+      m_dropCallback (item);
+    }
+}
+
+void
+Queue::Drop (Ptr<QueueItem> item)
+{
+  NS_LOG_FUNCTION (this << item);
 
   m_nTotalDroppedPackets++;
-  m_nTotalDroppedBytes += p->GetSize ();
+  m_nTotalDroppedBytes += item->GetPacketSize ();
 
   NS_LOG_LOGIC ("m_traceDrop (p)");
-  m_traceDrop (p);
+  m_traceDrop (item->GetPacket ());
+  NotifyDrop (item);
 }
 
 } // namespace ns3
diff -Naur ns-3.25/src/network/utils/queue.h ns-3.26/src/network/utils/queue.h
--- ns-3.25/src/network/utils/queue.h	2016-10-03 20:57:08.536245388 -0700
+++ ns-3.26/src/network/utils/queue.h	2016-10-03 19:49:01.840386215 -0700
@@ -64,11 +64,16 @@
    */
   bool Enqueue (Ptr<QueueItem> item);
   /**
-   * Remove an item from the front of the Queue
+   * Remove an item from the front of the Queue, counting it as dequeued
    * \return 0 if the operation was not successful; the item otherwise.
    */
   Ptr<QueueItem> Dequeue (void);
   /**
+   * Remove an item from the front of the Queue, counting it as dropped
+   * \return 0 if the operation was not successful; the item otherwise.
+   */
+  Ptr<QueueItem>  Remove (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 item otherwise.
    */
@@ -190,16 +195,28 @@
   double GetDroppedPacketsPerSecondVariance (void);
 #endif
 
+  /// Callback set by the object (e.g., a queue disc) that wants to be notified of a packet drop
+  typedef Callback<void, Ptr<QueueItem> > DropCallback;
+
+  /**
+   * \brief Set the drop callback
+   * \param cb the callback to set
+   *
+   * Called when a queue is added to a queue disc in order to set a
+   * callback to the Drop method of the queue disc.
+   */
+  virtual void SetDropCallback (DropCallback cb);
+
 protected:
   /**
    * \brief Drop a packet
-   * \param p packet that was dropped
+   * \param item item 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.
    */
-  void Drop (Ptr<Packet> p);
+  void Drop (Ptr<QueueItem> item);
 
 private:
   /**
@@ -209,16 +226,27 @@
    */
   virtual bool DoEnqueue (Ptr<QueueItem> item) = 0;
   /**
-   * Pull an item from the queue
+   * Pull the item to dequeue from the queue
    * \return the item.
    */
   virtual Ptr<QueueItem> DoDequeue (void) = 0;
   /**
+   * Pull the item to drop from the queue
+   * \return the item.
+   */
+  virtual Ptr<QueueItem> DoRemove (void) = 0;
+  /**
    * Peek the front item in the queue
    * \return the item.
    */
   virtual Ptr<const QueueItem> DoPeek (void) const = 0;
 
+  /**
+   *  \brief Notification of a packet drop
+   *  \param item item that was dropped
+   */
+  void NotifyDrop (Ptr<QueueItem> item);
+
   /// Traced callback: fired when a packet is enqueued
   TracedCallback<Ptr<const Packet> > m_traceEnqueue;
   /// Traced callback: fired when a packet is dequeued
@@ -236,6 +264,7 @@
   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)
+  DropCallback m_dropCallback;        //!< drop callback
 };
 
 } // namespace ns3
diff -Naur ns-3.25/src/network/utils/queue-limits.cc ns-3.26/src/network/utils/queue-limits.cc
--- ns-3.25/src/network/utils/queue-limits.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/network/utils/queue-limits.cc	2016-10-03 19:49:01.838386230 -0700
@@ -0,0 +1,46 @@
+/* -*- 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
+ *
+ * Authors: Pasquale Imputato <p.imputato@gmail.com>
+ *          Stefano Avallone <stefano.avallone@unina.it>
+ */
+
+#include "ns3/log.h"
+#include "queue-limits.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("QueueLimits");
+
+NS_OBJECT_ENSURE_REGISTERED (QueueLimits);
+
+TypeId
+QueueLimits::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::QueueLimits")
+    .SetParent<Object> ()
+    .SetGroupName ("Network")
+  ;
+  return tid;
+}
+
+QueueLimits::~QueueLimits ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+} // namespace ns3
diff -Naur ns-3.25/src/network/utils/queue-limits.h ns-3.26/src/network/utils/queue-limits.h
--- ns-3.25/src/network/utils/queue-limits.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/network/utils/queue-limits.h	2016-10-03 19:49:01.839386222 -0700
@@ -0,0 +1,83 @@
+/* -*- 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
+ *
+ * Authors: Pasquale Imputato <p.imputato@gmail.com>
+ *          Stefano Avallone <stefano.avallone@unina.it>
+ */
+
+#ifndef QUEUE_LIMITS_H
+#define QUEUE_LIMITS_H
+
+#include "ns3/object.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup network
+ *
+ * \brief Abstract base class for NetDevice queue length controller
+ *
+ * QueueLimits is an abstract base class providing the interface to
+ * the NetDevice queue length controller.
+ *
+ * Child classes need to implement the methods used for a byte-based
+ * measure of the queue length.
+ *
+ * The design and implementation of this class is inspired by Linux.
+ * For more details, see the queue limits Sphinx documentation.
+ */
+class QueueLimits : public Object {
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  virtual ~QueueLimits ();
+
+  /**
+   * \brief Reset queue limits state
+   */
+  virtual void Reset () = 0;
+
+  /**
+   * \brief Record number of completed bytes and recalculate the limit
+   * \param count the number of completed bytes
+   */
+  virtual void Completed (uint32_t count) = 0;
+
+  /**
+   * Available is called from NotifyTransmittedBytes to calculate the
+   * number of bytes that can be passed again to the NetDevice.
+   * A negative value means that no packets can be passed to the NetDevice.
+   * In this case, NotifyTransmittedBytes stops the transmission queue.
+   * \brief Returns how many bytes can be queued
+   * \return the number of bytes that can be queued
+   */
+  virtual int32_t Available () const = 0;
+
+  /**
+   * \brief Record the number of bytes queued
+   * \param count the number of bytes queued
+   */
+  virtual void Queued (uint32_t count) = 0;
+};
+
+} // namespace ns3
+
+#endif /* QUEUE_LIMITS_H */
diff -Naur ns-3.25/src/network/utils/radiotap-header.h ns-3.26/src/network/utils/radiotap-header.h
--- ns-3.25/src/network/utils/radiotap-header.h	2016-10-03 20:57:08.537245381 -0700
+++ ns-3.26/src/network/utils/radiotap-header.h	2016-10-03 19:49:01.841386207 -0700
@@ -40,8 +40,8 @@
 public:
   RadiotapHeader ();
   /**
-   * \brief Get the type ID.
-   * \return the object TypeId
+   * @brief Get the type ID.
+   * @returns the object TypeId
    */
   static TypeId GetTypeId (void);
   virtual TypeId GetInstanceTypeId (void) const;
@@ -111,7 +111,10 @@
    */
   uint64_t GetTsft (void) const;
 
-  enum
+  /**
+   * @brief Frame flags.
+   */
+  enum FrameFlag
   {
     FRAME_FLAG_NONE           = 0x00, /**< No flags set */
     FRAME_FLAG_CFP            = 0x01, /**< Frame sent/received during CFP */
@@ -149,7 +152,10 @@
    */
   uint8_t GetRate (void) const;
 
-  enum
+  /**
+   * @brief Channel flags.
+   */
+  enum ChannelFlags
   {
     CHANNEL_FLAG_NONE          = 0x0000, /**< No flags set */
     CHANNEL_FLAG_TURBO         = 0x0010, /**< Turbo Channel */
@@ -219,7 +225,10 @@
    */
   uint8_t GetAntennaNoisePower (void) const;
 
-  enum
+  /**
+   * @brief MCS known bits.
+   */
+  enum McsKnown
   {
     MCS_KNOWN_NONE           = 0x00, /**< No flags set */
     MCS_KNOWN_BANDWIDTH      = 0x01, /**< Bandwidth */
@@ -232,7 +241,10 @@
     MCS_KNOWN_NESS_BIT_1     = 0x80, /**< Ness data - bit 1 (MSB) of Number of extension spatial streams */
   };
 
-  enum
+  /**
+   * @brief MCS flags.
+   */
+  enum McsFlags
   {
     MCS_FLAGS_NONE           = 0x00, /**< Default: 20 MHz, long guard interval, mixed HT format and BCC FEC type */
     MCS_FLAGS_BANDWIDTH_40   = 0x01, /**< 40 MHz */
@@ -273,7 +285,10 @@
    */
   uint8_t GetMcsRate (void) const;
 
-  enum
+  /**
+   * @brief A-MPDU status flags.
+   */
+  enum AmpduFlags
   {
     A_MPDU_STATUS_NONE                = 0x00, /**< No flags set */
     A_MPDU_STATUS_REPORT_ZERO_LENGTH  = 0x01, /**< Driver reports 0-length subframes */
@@ -306,7 +321,10 @@
    */
   uint16_t GetAmpduStatusFlags (void) const;
 
-  enum
+  /**
+   * @brief VHT known bits.
+   */
+  enum VhtKnown
   {
     VHT_KNOWN_NONE                         = 0x0000, /**< No flags set */
     VHT_KNOWN_STBC                         = 0x0001, /**< Space-time block coding (1 if all spatial streams of all users have STBC, 0 otherwise). */
@@ -320,14 +338,17 @@
     VHT_KNOWN_PARTIAL_AID                  = 0x0100, /**< Partial AID known/applicable */
   };
 
-  enum
+  /**
+   * @brief VHT flags.
+   */
+  enum VhtFlags
   {
     VHT_FLAGS_NONE                         = 0x00, /**< No flags set */
     VHT_FLAGS_STBC                         = 0x01, /**< Set if all spatial streams of all users have space-time block coding */
     VHT_FLAGS_TXOP_PS_NOT_ALLOWED          = 0x02, /**< Set if STAs may not doze during TXOP (valid only for AP transmitters). */
     VHT_FLAGS_GUARD_INTERVAL               = 0x04, /**< Short guard interval */
     VHT_FLAGS_SHORT_GI_NSYM_DISAMBIGUATION = 0x08, /**< Set if NSYM mod 10 = 9 (valid only if short GI is used).*/
-    VHT_FLAGS__LDPC_EXTRA_OFDM_SYMBOL      = 0x10, /**< Set if one or more users are using LDPC and the encoding process resulted in extra OFDM symbol(s) */
+    VHT_FLAGS_LDPC_EXTRA_OFDM_SYMBOL       = 0x10, /**< Set if one or more users are using LDPC and the encoding process resulted in extra OFDM symbol(s) */
     VHT_FLAGS_BEAMFORMED                   = 0x20, /**< Set if beamforming is used (valid for SU PPDUs only). */
   };
 
@@ -410,7 +431,10 @@
 
 
 private:
-  enum
+  /**
+   * @brief Radiotap flags.
+   */
+  enum RadiotapFlags
   {
     RADIOTAP_TSFT              = 0x00000001,
     RADIOTAP_FLAGS             = 0x00000002,
diff -Naur ns-3.25/src/network/utils/sequence-number.h ns-3.26/src/network/utils/sequence-number.h
--- ns-3.25/src/network/utils/sequence-number.h	2016-10-03 20:57:08.537245381 -0700
+++ ns-3.26/src/network/utils/sequence-number.h	2016-10-03 19:49:01.841386207 -0700
@@ -39,7 +39,7 @@
  * maximum value that can represented with the given number of bits
  * back to zero.  For this reason, comparison of two sequence numbers,
  * and subtraction, is non-trivial.  The SequenceNumber class behaves
- * like a number, with the usual arythmetic operators implemented, but
+ * like a number, with the usual arithmetic operators implemented, but
  * knows how to correctly compare and subtract sequence numbers.
  *
  * This is a templated class.  To use it you need to supply two
diff -Naur ns-3.25/src/network/utils/sll-header.h ns-3.26/src/network/utils/sll-header.h
--- ns-3.25/src/network/utils/sll-header.h	2016-10-03 20:57:08.540245357 -0700
+++ ns-3.26/src/network/utils/sll-header.h	2016-10-03 19:49:01.844386185 -0700
@@ -38,32 +38,36 @@
   * \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
+  \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:
+
+  /**
+   * Type of the packet.
+   */
   enum PacketType
   {
     UNICAST_FROM_PEER_TO_ME = 0, /**< the packet was specifically sent to us by somebody else */
@@ -74,33 +78,33 @@
   };
 
   /**
-    * \brief Get the type ID.
-    * \return the object TypeId
-    */
+   * \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.
-    */
+   * \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
-    */
+   * \param arphdType ARP protocol hardware identifier
+   */
   void SetArpType (uint16_t arphdType);
 
-   /**
-    * \return Packet type
-    */
+  /**
+   * \return Packet type
+   */
   enum PacketType GetPacketType () const;
 
   /**
-    * \param type Depends on source and address of the packet
-    */
+   * \param type Depends on source and address of the packet
+   */
   void SetPacketType (PacketType type);
 
   //! Inherited from ObjectBase
@@ -113,11 +117,11 @@
 
 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;
+  PacketType m_packetType;  /**< Packet type */
+  uint16_t m_arphdType;     /**< ARP protocol hardware identifier */
+  uint16_t m_addressLength; /**< Address length */
+  uint64_t m_address;       /**< Address */
+  uint16_t m_protocolType;  /**< protocol type */
 };
 
 } // namespace ns3
diff -Naur ns-3.25/src/network/wscript ns-3.26/src/network/wscript
--- ns-3.25/src/network/wscript	2016-10-03 20:57:08.540245357 -0700
+++ ns-3.26/src/network/wscript	2016-10-03 19:49:01.844386185 -0700
@@ -28,6 +28,7 @@
         'utils/crc32.cc',
         'utils/data-rate.cc',
         'utils/drop-tail-queue.cc',
+        'utils/dynamic-queue-limits.cc',
         'utils/error-model.cc',
         'utils/ethernet-header.cc',
         'utils/ethernet-trailer.cc',
@@ -49,6 +50,7 @@
         'utils/pcap-file.cc',
         'utils/pcap-file-wrapper.cc',
         'utils/queue.cc',
+        'utils/queue-limits.cc',
         'utils/radiotap-header.cc',
         'utils/simple-channel.cc',
         'utils/simple-net-device.cc',
@@ -109,6 +111,7 @@
         'utils/crc32.h',
         'utils/data-rate.h',
         'utils/drop-tail-queue.h',
+        'utils/dynamic-queue-limits.h',
         'utils/error-model.h',
         'utils/ethernet-header.h',
         'utils/ethernet-trailer.h',
@@ -131,6 +134,7 @@
         'utils/pcap-file-wrapper.h',
         'utils/generic-phy.h',
         'utils/queue.h',
+        'utils/queue-limits.h',
         'utils/radiotap-header.h',
         'utils/sequence-number.h',
         'utils/sgi-hashmap.h',
diff -Naur ns-3.25/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py ns-3.26/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.545245318 -0700
+++ ns-3.26/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.849386148 -0700
@@ -112,6 +112,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -122,6 +124,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -182,10 +186,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -194,6 +198,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -220,6 +226,10 @@
     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'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
@@ -274,6 +284,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -427,11 +439,11 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -443,6 +455,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
@@ -692,6 +706,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1100,6 +1119,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1113,6 +1137,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
@@ -2390,23 +2418,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2521,6 +2549,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2542,10 +2575,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2567,6 +2600,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2582,6 +2619,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -2932,6 +2973,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3220,6 +3266,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -3245,6 +3296,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -3393,6 +3449,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -3420,11 +3480,6 @@
                    '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', 
@@ -3487,52 +3542,6 @@
                    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')])
@@ -3717,6 +3726,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -4200,6 +4255,70 @@
                    is_static=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -4930,16 +5049,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -4967,35 +5101,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -5395,6 +5524,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py ns-3.26/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.549245287 -0700
+++ ns-3.26/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.853386118 -0700
@@ -112,6 +112,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -122,6 +124,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -182,10 +186,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -194,6 +198,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -220,6 +226,10 @@
     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'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
@@ -274,6 +284,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -427,11 +439,11 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -443,6 +455,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
@@ -692,6 +706,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1100,6 +1119,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1113,6 +1137,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
@@ -2390,23 +2418,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2521,6 +2549,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2542,10 +2575,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2567,6 +2600,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2582,6 +2619,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -2932,6 +2973,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3220,6 +3266,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -3245,6 +3296,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -3393,6 +3449,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -3420,11 +3480,6 @@
                    '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', 
@@ -3487,52 +3542,6 @@
                    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')])
@@ -3717,6 +3726,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -4200,6 +4255,70 @@
                    is_static=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -4930,16 +5049,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -4967,35 +5101,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -5395,6 +5524,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/nix-vector-routing/examples/nix-simple.cc ns-3.26/src/nix-vector-routing/examples/nix-simple.cc
--- ns-3.25/src/nix-vector-routing/examples/nix-simple.cc	2016-10-03 20:57:08.550245280 -0700
+++ ns-3.26/src/nix-vector-routing/examples/nix-simple.cc	2016-10-03 19:49:01.854386110 -0700
@@ -45,6 +45,9 @@
 int
 main (int argc, char *argv[])
 {
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
   LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);
   LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);
 
diff -Naur ns-3.25/src/nix-vector-routing/wscript ns-3.26/src/nix-vector-routing/wscript
--- ns-3.25/src/nix-vector-routing/wscript	2016-10-03 20:57:08.553245256 -0700
+++ ns-3.26/src/nix-vector-routing/wscript	2016-10-03 19:49:01.858386080 -0700
@@ -5,14 +5,14 @@
     module.includes = '.'
     module.source = [
         'model/ipv4-nix-vector-routing.cc',
-	'helper/ipv4-nix-vector-helper.cc',
+        'helper/ipv4-nix-vector-helper.cc',
         ]
 
     headers = bld(features='ns3header')
     headers.module = 'nix-vector-routing'
     headers.source = [
         'model/ipv4-nix-vector-routing.h',
-	'helper/ipv4-nix-vector-helper.h',
+        'helper/ipv4-nix-vector-helper.h',
         ]
 
     if bld.env['ENABLE_EXAMPLES']:
diff -Naur ns-3.25/src/olsr/bindings/modulegen__gcc_ILP32.py ns-3.26/src/olsr/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/olsr/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.559245210 -0700
+++ ns-3.26/src/olsr/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.864386036 -0700
@@ -142,6 +142,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], import_from_module='ns.core')
     ## system-wall-clock-ms.h (module 'core'): ns3::SystemWallClockMs [class]
     module.add_class('SystemWallClockMs', import_from_module='ns.core')
     ## tag.h (module 'network'): ns3::Tag [class]
@@ -162,6 +164,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -224,10 +228,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -236,6 +240,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -276,6 +282,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -344,6 +354,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -599,11 +611,11 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -622,6 +634,8 @@
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -895,6 +909,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1314,6 +1333,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1327,6 +1351,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3IntToType__0_methods(root_module, cls):
@@ -2725,23 +2753,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2856,6 +2884,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2877,10 +2910,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2902,6 +2935,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2917,6 +2954,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -3250,6 +3291,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3621,6 +3667,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -3646,6 +3697,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -3794,6 +3850,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -3821,11 +3881,6 @@
                    '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', 
@@ -3888,52 +3943,6 @@
                    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')])
@@ -4118,6 +4127,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -4860,6 +4915,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -5868,16 +5987,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -5905,35 +6039,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -6421,6 +6550,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/olsr/bindings/modulegen__gcc_LP64.py ns-3.26/src/olsr/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/olsr/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.565245163 -0700
+++ ns-3.26/src/olsr/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.869385999 -0700
@@ -142,6 +142,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], import_from_module='ns.core')
     ## system-wall-clock-ms.h (module 'core'): ns3::SystemWallClockMs [class]
     module.add_class('SystemWallClockMs', import_from_module='ns.core')
     ## tag.h (module 'network'): ns3::Tag [class]
@@ -162,6 +164,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -224,10 +228,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -236,6 +240,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -276,6 +282,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -344,6 +354,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -599,11 +611,11 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -622,6 +634,8 @@
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -895,6 +909,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1314,6 +1333,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1327,6 +1351,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3IntToType__0_methods(root_module, cls):
@@ -2725,23 +2753,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2856,6 +2884,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2877,10 +2910,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2902,6 +2935,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2917,6 +2954,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -3250,6 +3291,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3621,6 +3667,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -3646,6 +3697,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -3794,6 +3850,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -3821,11 +3881,6 @@
                    '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', 
@@ -3888,52 +3943,6 @@
                    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')])
@@ -4118,6 +4127,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -4860,6 +4915,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -5868,16 +5987,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -5905,35 +6039,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -6421,6 +6550,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/openflow/wscript ns-3.26/src/openflow/wscript
--- ns-3.25/src/openflow/wscript	2016-10-03 20:57:08.584245016 -0700
+++ ns-3.26/src/openflow/wscript	2016-10-03 19:49:01.888385857 -0700
@@ -6,8 +6,8 @@
 
 def options(opt):
     opt.add_option('--with-openflow',
-		   help=('Path to OFSID source for NS-3 OpenFlow Integration support'),
-		   default='', dest='with_openflow')
+                   help=('Path to OFSID source for NS-3 OpenFlow Integration support'),
+                   default='', dest='with_openflow')
 
 REQUIRED_BOOST_LIBS = ['system', 'signals', 'filesystem']
 
@@ -17,7 +17,7 @@
 def configure(conf):
     if not conf.env['LIB_BOOST']:
         conf.report_optional_feature("openflow", "NS-3 OpenFlow Integration", False,
-				     "Required boost libraries not found")
+                                     "Required boost libraries not found")
 
         # Add this module to the list of modules that won't be built
         # if they are enabled.
@@ -35,7 +35,7 @@
     missing_boost_libs = [lib for lib in REQUIRED_BOOST_LIBS if lib not in present_boost_libs]
     if missing_boost_libs != []:
         conf.report_optional_feature("openflow", "NS-3 OpenFlow Integration", False,
-				     "Required boost libraries not found, missing: %s" % ', '.join(missing_boost_libs))
+                                     "Required boost libraries not found, missing: %s" % ', '.join(missing_boost_libs))
 
         # Add this module to the list of modules that won't be built
         # if they are enabled.
@@ -64,7 +64,7 @@
     if not conf.env['WITH_OPENFLOW']:
         conf.msg("Checking for OpenFlow location", False)
         conf.report_optional_feature("openflow", "NS-3 OpenFlow Integration", False,
-				     "OpenFlow not enabled (see option --with-openflow)")
+                                     "OpenFlow not enabled (see option --with-openflow)")
         # Add this module to the list of modules that won't be built
         # if they are enabled.
         conf.env['MODULES_NOT_BUILT'].append('openflow')
diff -Naur ns-3.25/src/point-to-point/bindings/callbacks_list.py ns-3.26/src/point-to-point/bindings/callbacks_list.py
--- ns-3.25/src/point-to-point/bindings/callbacks_list.py	2016-10-03 20:57:08.598244907 -0700
+++ ns-3.26/src/point-to-point/bindings/callbacks_list.py	2016-10-03 19:49:01.903385745 -0700
@@ -1,4 +1,5 @@
 callback_classes = [
+    ['void', 'ns3::Ptr<ns3::QueueItem>', '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'],
     ['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'],
diff -Naur ns-3.25/src/point-to-point/bindings/modulegen__gcc_ILP32.py ns-3.26/src/point-to-point/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/point-to-point/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.602244876 -0700
+++ ns-3.26/src/point-to-point/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.907385715 -0700
@@ -102,8 +102,8 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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]
@@ -112,6 +112,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -124,6 +126,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -228,6 +232,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -302,6 +310,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -385,21 +395,21 @@
 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 ( * ) ( 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 ( * ) ( 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 ( * ) ( 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&')
@@ -412,6 +422,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_internal(module):
     root_module = module.get_root()
@@ -510,6 +523,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -888,6 +903,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2279,10 +2299,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -2618,23 +2638,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2749,6 +2769,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2770,10 +2795,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2795,6 +2820,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2810,6 +2839,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -2971,6 +3004,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3209,10 +3247,19 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
@@ -3225,10 +3272,10 @@
     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]
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
@@ -3245,6 +3292,11 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3RandomVariableStream_methods(root_module, cls):
@@ -4307,6 +4359,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -5027,16 +5143,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -5064,35 +5195,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -5784,8 +5910,8 @@
                    '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', 
+    ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
@@ -5827,6 +5953,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/point-to-point/bindings/modulegen__gcc_LP64.py ns-3.26/src/point-to-point/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/point-to-point/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.606244845 -0700
+++ ns-3.26/src/point-to-point/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.911385686 -0700
@@ -102,8 +102,8 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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]
@@ -112,6 +112,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -124,6 +126,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -228,6 +232,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -302,6 +310,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -385,21 +395,21 @@
 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 ( * ) ( 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 ( * ) ( 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 ( * ) ( 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&')
@@ -412,6 +422,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_internal(module):
     root_module = module.get_root()
@@ -510,6 +523,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -888,6 +903,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2279,10 +2299,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -2618,23 +2638,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2749,6 +2769,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2770,10 +2795,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2795,6 +2820,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2810,6 +2839,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -2971,6 +3004,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3209,10 +3247,19 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
@@ -3225,10 +3272,10 @@
     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]
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
@@ -3245,6 +3292,11 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3RandomVariableStream_methods(root_module, cls):
@@ -4307,6 +4359,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -5027,16 +5143,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -5064,35 +5195,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -5784,8 +5910,8 @@
                    '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', 
+    ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
@@ -5827,6 +5953,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/point-to-point/model/point-to-point-net-device.cc ns-3.26/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	2016-10-03 20:57:08.611244806 -0700
+++ ns-3.26/src/point-to-point/model/point-to-point-net-device.cc	2016-10-03 19:49:01.916385648 -0700
@@ -207,13 +207,20 @@
 }
 
 void
-PointToPointNetDevice::DoInitialize (void)
+PointToPointNetDevice::NotifyNewAggregate (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 ();
+  if (m_queueInterface == 0)
+    {
+      Ptr<NetDeviceQueueInterface> ndqi = this->GetObject<NetDeviceQueueInterface> ();
+      //verify that it's a valid netdevice queue interface and that
+      //the netdevice queue interface was not set before
+      if (ndqi != 0)
+        {
+          m_queueInterface = ndqi;
+        }
+    }
+  NetDevice::NotifyNewAggregate ();
 }
 
 void
@@ -304,6 +311,8 @@
       NS_LOG_LOGIC ("No pending packets in device queue after tx complete");
       if (txq)
       {
+        NS_LOG_DEBUG ("The device queue is being woken up (" << m_queue->GetNPackets () <<
+                      " packets and " << m_queue->GetNBytes () << " bytes inside)");
         txq->Wake ();
       }
       return;
@@ -311,18 +320,32 @@
 
   //
   // 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 the queue was stopped, start it again if there is room for another packet.
+  // 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 ();
+      if ((m_queue->GetMode () == Queue::QUEUE_MODE_PACKETS &&
+           m_queue->GetNPackets () < m_queue->GetMaxPackets ()) ||
+          (m_queue->GetMode () == Queue::QUEUE_MODE_BYTES &&
+           m_queue->GetNBytes () + m_mtu <= m_queue->GetMaxBytes ()))
+        {
+          NS_LOG_DEBUG ("The device queue is being started (" << m_queue->GetNPackets () <<
+                        " packets and " << m_queue->GetNBytes () << " bytes inside)");
+          txq->Start ();
+        }
     }
   Ptr<Packet> p = item->GetPacket ();
   m_snifferTrace (p);
   m_promiscSnifferTrace (p);
   TransmitStart (p);
+  if (txq)
+    {
+      // Inform BQL
+      txq->NotifyTransmittedBytes (m_currentPkt->GetSize ());
+    }
 }
 
 bool
@@ -573,24 +596,67 @@
   //
   if (m_queue->Enqueue (Create<QueueItem> (packet)))
     {
+      // Inform BQL
+      if (txq)
+        {
+          txq->NotifyQueuedBytes (packet->GetSize ());
+        }
       //
       // If the channel is ready for transition we send the packet right now
       // 
       if (m_txMachineState == READY)
         {
           packet = m_queue->Dequeue ()->GetPacket ();
+          // We have enqueued a packet and dequeued a (possibly different) packet. We
+          // need to check if there is still room for another packet only if the queue
+          // is in byte mode (the enqueued packet might be larger than the dequeued
+          // packet, thus leaving no room for another packet)
+          if (txq)
+            {
+              if (m_queue->GetMode () == Queue::QUEUE_MODE_BYTES &&
+                  m_queue->GetNBytes () + m_mtu > m_queue->GetMaxBytes ())
+                {
+                  NS_LOG_DEBUG ("The device queue is being stopped (" << m_queue->GetNPackets () <<
+                                " packets and " << m_queue->GetNBytes () << " bytes inside)");
+                  txq->Stop ();
+                }
+            }
           m_snifferTrace (packet);
           m_promiscSnifferTrace (packet);
-          return TransmitStart (packet);
+          bool ret = TransmitStart (packet);
+          if (txq)
+            {
+              // Inform BQL
+              txq->NotifyTransmittedBytes (m_currentPkt->GetSize ());
+            }
+          return ret;
+        }
+      // We have enqueued a packet but we have not dequeued any packet. Thus, we
+      // need to check whether the queue is able to store another packet. If not,
+      // we stop the queue
+      if (txq)
+        {
+          if ((m_queue->GetMode () == Queue::QUEUE_MODE_PACKETS &&
+               m_queue->GetNPackets () >= m_queue->GetMaxPackets ()) ||
+              (m_queue->GetMode () == Queue::QUEUE_MODE_BYTES &&
+               m_queue->GetNBytes () + m_mtu > m_queue->GetMaxBytes ()))
+            {
+              NS_LOG_DEBUG ("The device queue is being stopped (" << m_queue->GetNPackets () <<
+                            " packets and " << m_queue->GetNBytes () << " bytes inside)");
+              txq->Stop ();
+            }
         }
       return true;
     }
 
-  // Enqueue may fail (overflow). Stop the tx queue, so that the upper layers
+  // Enqueue may fail (overflow). This should not happen if the traffic control
+  // module has been installed. Anyway, 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)
   {
+    NS_LOG_ERROR ("BUG! Device queue full when the queue is not stopped! (" << m_queue->GetNPackets () <<
+                  " packets and " << m_queue->GetNBytes () << " bytes inside)");
     txq->Stop ();
   }
   return false;
diff -Naur ns-3.25/src/point-to-point/model/point-to-point-net-device.h ns-3.26/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	2016-10-03 20:57:08.612244798 -0700
+++ ns-3.26/src/point-to-point/model/point-to-point-net-device.h	2016-10-03 19:49:01.917385641 -0700
@@ -198,7 +198,7 @@
    */
   void DoMpiReceive (Ptr<Packet> p);
 
-  virtual void DoInitialize (void);
+  virtual void NotifyNewAggregate (void);
 
 private:
 
diff -Naur ns-3.25/src/point-to-point/test/point-to-point-test.cc ns-3.26/src/point-to-point/test/point-to-point-test.cc
--- ns-3.25/src/point-to-point/test/point-to-point-test.cc	2016-10-03 20:57:08.614244783 -0700
+++ ns-3.26/src/point-to-point/test/point-to-point-test.cc	2016-10-03 19:49:01.919385626 -0700
@@ -88,8 +88,10 @@
 
   Ptr<NetDeviceQueueInterface> ifaceA = CreateObject<NetDeviceQueueInterface> ();
   devA->AggregateObject (ifaceA);
+  ifaceA->CreateTxQueues ();
   Ptr<NetDeviceQueueInterface> ifaceB = CreateObject<NetDeviceQueueInterface> ();
   devB->AggregateObject (ifaceB);
+  ifaceB->CreateTxQueues ();
 
   Simulator::Schedule (Seconds (1.0), &PointToPointTest::SendOnePacket, this, devA);
 
diff -Naur ns-3.25/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py ns-3.26/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.589244977 -0700
+++ ns-3.26/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.894385812 -0700
@@ -130,8 +130,8 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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]
@@ -150,6 +150,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -160,6 +162,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -228,10 +232,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -240,6 +244,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -264,6 +270,10 @@
     module.add_class('CallbackImplBase', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     ## callback.h (module 'core'): ns3::CallbackValue [class]
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
@@ -330,6 +340,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -488,11 +500,11 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -503,6 +515,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
@@ -991,6 +1005,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1399,6 +1418,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1412,6 +1436,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
@@ -2737,10 +2765,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3280,23 +3308,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3411,6 +3439,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -3432,10 +3465,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -3457,6 +3490,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -3472,6 +3509,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -4006,6 +4047,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -4374,6 +4420,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -4399,6 +4450,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -4547,6 +4603,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -4574,11 +4634,6 @@
                    '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', 
@@ -4641,52 +4696,6 @@
                    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')])
@@ -4871,6 +4880,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -5327,6 +5382,70 @@
                    [param('ns3::CallbackBase', 'base')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -6804,16 +6923,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -6841,35 +6975,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -7269,6 +7398,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py ns-3.26/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.594244938 -0700
+++ ns-3.26/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.899385775 -0700
@@ -130,8 +130,8 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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]
@@ -150,6 +150,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -160,6 +162,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -228,10 +232,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -240,6 +244,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -264,6 +270,10 @@
     module.add_class('CallbackImplBase', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     ## callback.h (module 'core'): ns3::CallbackValue [class]
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
@@ -330,6 +340,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -488,11 +500,11 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -503,6 +515,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
@@ -991,6 +1005,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1399,6 +1418,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1412,6 +1436,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
@@ -2737,10 +2765,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3280,23 +3308,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3411,6 +3439,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -3432,10 +3465,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -3457,6 +3490,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -3472,6 +3509,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -4006,6 +4047,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -4374,6 +4420,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -4399,6 +4450,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -4547,6 +4603,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -4574,11 +4634,6 @@
                    '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', 
@@ -4641,52 +4696,6 @@
                    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')])
@@ -4871,6 +4880,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -5327,6 +5382,70 @@
                    [param('ns3::CallbackBase', 'base')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -6804,16 +6923,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -6841,35 +6975,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -7269,6 +7398,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/propagation/bindings/modulegen__gcc_ILP32.py ns-3.26/src/propagation/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/propagation/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.617244760 -0700
+++ ns-3.26/src/propagation/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.922385604 -0700
@@ -46,6 +46,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -134,6 +136,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -310,6 +316,8 @@
     register_Ns3Cost231PropagationLossModel_methods(root_module, root_module['ns3::Cost231PropagationLossModel'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3ErlangRandomVariable_methods(root_module, root_module['ns3::ErlangRandomVariable'])
     register_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
@@ -545,23 +553,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -676,6 +684,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -697,10 +710,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -722,6 +735,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -737,6 +754,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Vector2D_methods(root_module, cls):
@@ -873,6 +894,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -2023,6 +2049,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
diff -Naur ns-3.25/src/propagation/bindings/modulegen__gcc_LP64.py ns-3.26/src/propagation/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/propagation/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.619244744 -0700
+++ ns-3.26/src/propagation/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.924385589 -0700
@@ -46,6 +46,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -134,6 +136,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -310,6 +316,8 @@
     register_Ns3Cost231PropagationLossModel_methods(root_module, root_module['ns3::Cost231PropagationLossModel'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3ErlangRandomVariable_methods(root_module, root_module['ns3::ErlangRandomVariable'])
     register_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
@@ -545,23 +553,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -676,6 +684,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -697,10 +710,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -722,6 +735,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -737,6 +754,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Vector2D_methods(root_module, cls):
@@ -873,6 +894,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -2023,6 +2049,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
diff -Naur ns-3.25/src/propagation/examples/main-propagation-loss.cc ns-3.26/src/propagation/examples/main-propagation-loss.cc
--- ns-3.25/src/propagation/examples/main-propagation-loss.cc	2016-10-03 20:57:08.622244721 -0700
+++ ns-3.26/src/propagation/examples/main-propagation-loss.cc	2016-10-03 19:49:01.927385566 -0700
@@ -23,6 +23,7 @@
 #include "ns3/constant-position-mobility-model.h"
 
 #include "ns3/config.h"
+#include "ns3/command-line.h"
 #include "ns3/string.h"
 #include "ns3/boolean.h"
 #include "ns3/double.h"
@@ -218,6 +219,9 @@
 
 int main (int argc, char *argv[])
 {
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
   GnuplotCollection gnuplots ("main-propagation-loss.pdf");
 
   {
diff -Naur ns-3.25/src/propagation/model/propagation-cache.h ns-3.26/src/propagation/model/propagation-cache.h
--- ns-3.25/src/propagation/model/propagation-cache.h	2016-10-03 20:57:08.627244682 -0700
+++ ns-3.26/src/propagation/model/propagation-cache.h	2016-10-03 19:49:01.933385522 -0700
@@ -85,6 +85,19 @@
     Ptr<const MobilityModel> m_srcMobility; //!< 1st node mobility model
     Ptr<const MobilityModel> m_dstMobility; //!< 2nd node mobility model
     uint32_t m_spectrumModelUid; //!< model UID
+
+    /**
+     * Less-than operator.
+     *
+     * The goal of this operator is just to provide a stable comparison
+     * to be used in containers requiring a order (of any kind).
+     *
+     * If the models are different, the comparison is based on their Uid.
+     * Otherwise, the comparison is based on the pointers of the Mobility models.
+     *
+     * \param other Right value of the operator.
+     * \returns True if the Left value is less than the Right value.
+     */
     bool operator < (const PropagationPathIdentifier & other) const
     {
       if (m_spectrumModelUid != other.m_spectrumModelUid)
diff -Naur ns-3.25/src/propagation/model/propagation-loss-model.cc ns-3.26/src/propagation/model/propagation-loss-model.cc
--- ns-3.25/src/propagation/model/propagation-loss-model.cc	2016-10-03 20:57:08.629244666 -0700
+++ ns-3.26/src/propagation/model/propagation-loss-model.cc	2016-10-03 19:49:01.935385507 -0700
@@ -43,6 +43,7 @@
 {
   static TypeId tid = TypeId ("ns3::PropagationLossModel")
     .SetParent<Object> ()
+    .SetGroupName ("Propagation")
   ;
   return tid;
 }
@@ -102,6 +103,7 @@
 {
   static TypeId tid = TypeId ("ns3::RandomPropagationLossModel")
     .SetParent<PropagationLossModel> ()
+    .SetGroupName ("Propagation")
     .AddConstructor<RandomPropagationLossModel> ()
     .AddAttribute ("Variable", "The random variable used to pick a loss everytime CalcRxPower is invoked.",
                    StringValue ("ns3::ConstantRandomVariable[Constant=1.0]"),
@@ -285,6 +287,7 @@
 {
   static TypeId tid = TypeId ("ns3::TwoRayGroundPropagationLossModel")
     .SetParent<PropagationLossModel> ()
+    .SetGroupName ("Propagation")
     .AddConstructor<TwoRayGroundPropagationLossModel> ()
     .AddAttribute ("Frequency", 
                    "The carrier frequency (in Hz) at which propagation occurs  (default is 5.15 GHz).",
@@ -546,6 +549,7 @@
 {
   static TypeId tid = TypeId ("ns3::ThreeLogDistancePropagationLossModel")
     .SetParent<PropagationLossModel> ()
+    .SetGroupName ("Propagation")
     .AddConstructor<ThreeLogDistancePropagationLossModel> ()
     .AddAttribute ("Distance0",
                    "Beginning of the first (near) distance field",
@@ -889,6 +893,7 @@
 {
   static TypeId tid = TypeId ("ns3::RangePropagationLossModel")
     .SetParent<PropagationLossModel> ()
+    .SetGroupName ("Propagation")
     .AddConstructor<RangePropagationLossModel> ()
     .AddAttribute ("MaxRange",
                    "Maximum Transmission Range (meters)",
diff -Naur ns-3.25/src/sixlowpan/bindings/modulegen__gcc_ILP32.py ns-3.26/src/sixlowpan/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/sixlowpan/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.638244597 -0700
+++ ns-3.26/src/sixlowpan/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.944385440 -0700
@@ -110,6 +110,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -226,6 +228,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -280,6 +286,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -437,6 +445,8 @@
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -683,6 +693,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2037,23 +2052,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2168,6 +2183,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2189,10 +2209,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2214,6 +2234,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2229,6 +2253,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -2504,6 +2532,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -4121,6 +4154,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -4656,16 +4753,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -4693,35 +4805,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -5108,6 +5215,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/sixlowpan/bindings/modulegen__gcc_LP64.py ns-3.26/src/sixlowpan/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/sixlowpan/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.641244573 -0700
+++ ns-3.26/src/sixlowpan/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.947385417 -0700
@@ -110,6 +110,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -226,6 +228,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -280,6 +286,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -437,6 +445,8 @@
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -683,6 +693,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2037,23 +2052,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2168,6 +2183,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2189,10 +2209,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2214,6 +2234,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2229,6 +2253,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -2504,6 +2532,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -4121,6 +4154,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -4656,16 +4753,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -4693,35 +4805,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -5108,6 +5215,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/sixlowpan/examples/example-ping-lr-wpan.cc ns-3.26/src/sixlowpan/examples/example-ping-lr-wpan.cc
--- ns-3.25/src/sixlowpan/examples/example-ping-lr-wpan.cc	2016-10-03 20:57:08.642244565 -0700
+++ ns-3.26/src/sixlowpan/examples/example-ping-lr-wpan.cc	2016-10-03 19:49:01.948385410 -0700
@@ -38,6 +38,9 @@
 
 int main (int argc, char** argv)
 {
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
 #if 0
   LogComponentEnable ("Ping6Application", LOG_LEVEL_ALL);
   LogComponentEnable ("LrWpanMac",LOG_LEVEL_ALL);
diff -Naur ns-3.25/src/sixlowpan/model/sixlowpan-header.cc ns-3.26/src/sixlowpan/model/sixlowpan-header.cc
--- ns-3.25/src/sixlowpan/model/sixlowpan-header.cc	2016-10-03 20:57:08.644244550 -0700
+++ ns-3.26/src/sixlowpan/model/sixlowpan-header.cc	2016-10-03 19:49:01.950385395 -0700
@@ -128,7 +128,7 @@
   encoding <<= 1;
   encoding |= m_hc2HeaderPresent;
 
-  os << "encoding " << int(encoding) << ", hopLimit " << int(m_hopLimit);
+  os << "encoding " << static_cast<int> (encoding) << ", hopLimit " << static_cast<int> (m_hopLimit);
 }
 
 uint32_t SixLowPanHc1::GetSerializedSize () const
@@ -655,7 +655,7 @@
 
 void SixLowPanFragN::Print (std::ostream & os) const
 {
-  os << "datagram size " << m_datagramSize << " tag " << m_datagramTag << " offset " << int(m_datagramOffset);
+  os << "datagram size " << m_datagramSize << " tag " << m_datagramTag << " offset " << static_cast<int> (m_datagramOffset);
 }
 
 uint32_t SixLowPanFragN::GetSerializedSize () const
@@ -815,7 +815,7 @@
 
 void SixLowPanIphc::Print (std::ostream & os) const
 {
-  os << "Compression kind: " << m_baseFormat;
+  os << "Compression kind: " << static_cast<int> (m_baseFormat);
 }
 
 uint32_t SixLowPanIphc::GetSerializedSize () const
@@ -1508,7 +1508,7 @@
 
 void SixLowPanNhcExtension::Print (std::ostream & os) const
 {
-  os << "Compression kind: " << int (m_nhcExtensionHeader) << " Size: " << int(GetSerializedSize ());
+  os << "Compression kind: " << static_cast<int> (m_nhcExtensionHeader) << " Size: " << GetSerializedSize ();
 }
 
 uint32_t SixLowPanNhcExtension::GetSerializedSize () const
@@ -1637,7 +1637,7 @@
 
 void SixLowPanUdpNhcExtension::Print (std::ostream & os) const
 {
-  os << "Compression kind: " << uint8_t (m_baseFormat);
+  os << "Compression kind: " << static_cast<int> (m_baseFormat);
 }
 
 uint32_t SixLowPanUdpNhcExtension::GetSerializedSize () const
diff -Naur ns-3.25/src/sixlowpan/model/sixlowpan-header.h ns-3.26/src/sixlowpan/model/sixlowpan-header.h
--- ns-3.25/src/sixlowpan/model/sixlowpan-header.h	2016-10-03 20:57:08.645244542 -0700
+++ ns-3.26/src/sixlowpan/model/sixlowpan-header.h	2016-10-03 19:49:01.951385387 -0700
@@ -200,7 +200,7 @@
 
   /**
    * \brief Set the "Hop limit" field (TTL).
-   * \param [in] Limit The hop limit value.
+   * \param [in] limit The hop limit value.
    */
   void SetHopLimit (uint8_t limit);
 
diff -Naur ns-3.25/src/sixlowpan/model/sixlowpan-net-device.cc ns-3.26/src/sixlowpan/model/sixlowpan-net-device.cc
--- ns-3.25/src/sixlowpan/model/sixlowpan-net-device.cc	2016-10-03 20:57:08.646244534 -0700
+++ ns-3.26/src/sixlowpan/model/sixlowpan-net-device.cc	2016-10-03 19:49:01.952385380 -0700
@@ -437,21 +437,19 @@
       protocolNumber = m_etherType;
     }
 
-  if (origPacketSize > m_compressionThreshold)
+  if (m_useIphc)
     {
-      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);
-        }
+      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);
+    }
+
+  if (packet->GetSize () < m_compressionThreshold)
+    {
       NS_LOG_LOGIC ("Compressed packet too short, using uncompressed one");
       packet = origPacket;
       SixLowPanIpv6 ipv6UncompressedHdr;
diff -Naur ns-3.25/src/sixlowpan/model/sixlowpan-net-device.h ns-3.26/src/sixlowpan/model/sixlowpan-net-device.h
--- ns-3.25/src/sixlowpan/model/sixlowpan-net-device.h	2016-10-03 20:57:08.646244534 -0700
+++ ns-3.26/src/sixlowpan/model/sixlowpan-net-device.h	2016-10-03 19:49:01.952385380 -0700
@@ -371,8 +371,7 @@
   typedef std::pair< std::pair<Address, Address>, std::pair<uint16_t, uint16_t> > FragmentKey;
 
   /**
-   * \class Fragments
-   * \brief A Set of Fragment.
+   * \brief A Set of Fragments.
    */
   class Fragments : public SimpleRefCount<Fragments>
   {
diff -Naur ns-3.25/src/spectrum/bindings/callbacks_list.py ns-3.26/src/spectrum/bindings/callbacks_list.py
--- ns-3.25/src/spectrum/bindings/callbacks_list.py	2016-10-03 20:57:08.156248345 -0700
+++ ns-3.26/src/spectrum/bindings/callbacks_list.py	2016-10-03 19:49:01.955385358 -0700
@@ -1,10 +1,11 @@
 callback_classes = [
-    ['void', 'ns3::Ptr<ns3::Packet const>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Packet>', '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::Ptr<ns3::Packet const>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['bool', 'ns3::Ptr<ns3::Packet>', '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::QueueItem>', '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.25/src/spectrum/bindings/modulegen__gcc_ILP32.py ns-3.26/src/spectrum/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/spectrum/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.163248291 -0700
+++ ns-3.26/src/spectrum/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.960385320 -0700
@@ -144,6 +144,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -154,8 +156,10 @@
     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)
+    module.add_class('WifiSpectrumValueHelper')
     ## 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]
@@ -260,8 +264,6 @@
     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]
@@ -304,6 +306,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -396,6 +402,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -435,9 +443,6 @@
     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::vector< ns3::Ptr< ns3::SpectrumPhy > >', 'ns3::Ptr< ns3::SpectrumPhy >', container_type=u'vector')
-    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyTxEndCallback')
-    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyTxEndCallback*')
-    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyTxEndCallback&')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyRxEndOkCallback')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyRxEndOkCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyRxEndOkCallback&')
@@ -474,6 +479,9 @@
     typehandlers.add_type_alias(u'std::vector< double, std::allocator< double > >', u'ns3::Values')
     typehandlers.add_type_alias(u'std::vector< double, std::allocator< double > >*', u'ns3::Values*')
     typehandlers.add_type_alias(u'std::vector< double, std::allocator< double > >&', u'ns3::Values&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyTxEndCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyTxEndCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyTxEndCallback&')
     typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyTxStartCallback')
     typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyTxStartCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyTxStartCallback&')
@@ -551,18 +559,18 @@
     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 ( * ) ( 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 ( * ) ( 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 ( * ) ( 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 ( * ) ( 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&')
@@ -572,6 +580,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
     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&')
@@ -641,6 +652,7 @@
     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'])
@@ -689,7 +701,6 @@
     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'])
@@ -711,6 +722,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -1066,6 +1079,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2827,23 +2845,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2958,6 +2976,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2979,10 +3002,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -3004,6 +3027,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -3019,6 +3046,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Vector2D_methods(root_module, cls):
@@ -3097,26 +3128,68 @@
                    [param('ns3::Ptr< ns3::SpectrumValue >', 'txPsd')])
     return
 
-def register_Ns3WifiSpectrumValueHelper_methods(root_module, cls):
-    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::WifiSpectrumValueHelper::WifiSpectrumValueHelper() [constructor]
+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::WifiSpectrumValueHelper::WifiSpectrumValueHelper(ns3::WifiSpectrumValueHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiSpectrumValueHelper const &', 'arg0')])
-    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValueHelper::CreateConstant(double psd) [member function]
+    ## 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_pure_virtual=True, is_virtual=True)
-    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValueHelper::CreateRfFilter(uint32_t channel) [member function]
+                   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_pure_virtual=True, is_virtual=True)
-    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValueHelper::CreateTxPowerSpectralDensity(double txPower, uint32_t channel) [member function]
+                   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_pure_virtual=True, is_virtual=True)
+                   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([])
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::WifiSpectrumValueHelper::WifiSpectrumValueHelper(ns3::WifiSpectrumValueHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiSpectrumValueHelper const &', 'arg0')])
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): static ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValueHelper::CreateDsssTxPowerSpectralDensity(uint32_t centerFrequency, double txPowerW) [member function]
+    cls.add_method('CreateDsssTxPowerSpectralDensity', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('uint32_t', 'centerFrequency'), param('double', 'txPowerW')], 
+                   is_static=True)
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): static ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValueHelper::CreateHtOfdmTxPowerSpectralDensity(uint32_t centerFrequency, uint32_t channelWidth, double txPowerW) [member function]
+    cls.add_method('CreateHtOfdmTxPowerSpectralDensity', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('uint32_t', 'centerFrequency'), param('uint32_t', 'channelWidth'), param('double', 'txPowerW')], 
+                   is_static=True)
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): static ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValueHelper::CreateNoisePowerSpectralDensity(uint32_t centerFrequency, uint32_t channelWidth, double noiseFigure) [member function]
+    cls.add_method('CreateNoisePowerSpectralDensity', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('uint32_t', 'centerFrequency'), param('uint32_t', 'channelWidth'), param('double', 'noiseFigure')], 
+                   is_static=True)
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): static ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValueHelper::CreateNoisePowerSpectralDensity(double noiseFigure, ns3::Ptr<ns3::SpectrumModel> spectrumModel) [member function]
+    cls.add_method('CreateNoisePowerSpectralDensity', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('double', 'noiseFigure'), param('ns3::Ptr< ns3::SpectrumModel >', 'spectrumModel')], 
+                   is_static=True)
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): static ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity(uint32_t centerFrequency, uint32_t channelWidth, double txPowerW) [member function]
+    cls.add_method('CreateOfdmTxPowerSpectralDensity', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('uint32_t', 'centerFrequency'), param('uint32_t', 'channelWidth'), param('double', 'txPowerW')], 
+                   is_static=True)
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): static ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValueHelper::CreateRfFilter(uint32_t centerFrequency, uint32_t channelWidth) [member function]
+    cls.add_method('CreateRfFilter', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('uint32_t', 'centerFrequency'), param('uint32_t', 'channelWidth')], 
+                   is_static=True)
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): static ns3::Ptr<ns3::SpectrumModel> ns3::WifiSpectrumValueHelper::GetSpectrumModel(uint32_t centerFrequency, uint32_t channelWidth) [member function]
+    cls.add_method('GetSpectrumModel', 
+                   'ns3::Ptr< ns3::SpectrumModel >', 
+                   [param('uint32_t', 'centerFrequency'), param('uint32_t', 'channelWidth')], 
+                   is_static=True)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -3278,6 +3351,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3454,10 +3532,19 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
@@ -3470,10 +3557,10 @@
     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]
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
@@ -3490,6 +3577,11 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3RandomPropagationDelayModel_methods(root_module, cls):
@@ -4729,28 +4821,6 @@
                    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', 
@@ -5331,6 +5401,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -6406,16 +6540,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -6443,35 +6592,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -7096,6 +7240,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/spectrum/bindings/modulegen__gcc_LP64.py ns-3.26/src/spectrum/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/spectrum/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.169248244 -0700
+++ ns-3.26/src/spectrum/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.965385283 -0700
@@ -144,6 +144,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -154,8 +156,10 @@
     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)
+    module.add_class('WifiSpectrumValueHelper')
     ## 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]
@@ -260,8 +264,6 @@
     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]
@@ -304,6 +306,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -396,6 +402,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -435,9 +443,6 @@
     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::vector< ns3::Ptr< ns3::SpectrumPhy > >', 'ns3::Ptr< ns3::SpectrumPhy >', container_type=u'vector')
-    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyTxEndCallback')
-    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyTxEndCallback*')
-    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyTxEndCallback&')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyRxEndOkCallback')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyRxEndOkCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyRxEndOkCallback&')
@@ -474,6 +479,9 @@
     typehandlers.add_type_alias(u'std::vector< double, std::allocator< double > >', u'ns3::Values')
     typehandlers.add_type_alias(u'std::vector< double, std::allocator< double > >*', u'ns3::Values*')
     typehandlers.add_type_alias(u'std::vector< double, std::allocator< double > >&', u'ns3::Values&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyTxEndCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyTxEndCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyTxEndCallback&')
     typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyTxStartCallback')
     typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyTxStartCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyTxStartCallback&')
@@ -551,18 +559,18 @@
     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 ( * ) ( 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 ( * ) ( 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 ( * ) ( 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 ( * ) ( 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&')
@@ -572,6 +580,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
     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&')
@@ -641,6 +652,7 @@
     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'])
@@ -689,7 +701,6 @@
     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'])
@@ -711,6 +722,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -1066,6 +1079,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2827,23 +2845,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2958,6 +2976,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2979,10 +3002,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -3004,6 +3027,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -3019,6 +3046,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Vector2D_methods(root_module, cls):
@@ -3097,26 +3128,68 @@
                    [param('ns3::Ptr< ns3::SpectrumValue >', 'txPsd')])
     return
 
-def register_Ns3WifiSpectrumValueHelper_methods(root_module, cls):
-    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::WifiSpectrumValueHelper::WifiSpectrumValueHelper() [constructor]
+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::WifiSpectrumValueHelper::WifiSpectrumValueHelper(ns3::WifiSpectrumValueHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiSpectrumValueHelper const &', 'arg0')])
-    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValueHelper::CreateConstant(double psd) [member function]
+    ## 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_pure_virtual=True, is_virtual=True)
-    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValueHelper::CreateRfFilter(uint32_t channel) [member function]
+                   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_pure_virtual=True, is_virtual=True)
-    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValueHelper::CreateTxPowerSpectralDensity(double txPower, uint32_t channel) [member function]
+                   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_pure_virtual=True, is_virtual=True)
+                   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([])
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::WifiSpectrumValueHelper::WifiSpectrumValueHelper(ns3::WifiSpectrumValueHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiSpectrumValueHelper const &', 'arg0')])
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): static ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValueHelper::CreateDsssTxPowerSpectralDensity(uint32_t centerFrequency, double txPowerW) [member function]
+    cls.add_method('CreateDsssTxPowerSpectralDensity', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('uint32_t', 'centerFrequency'), param('double', 'txPowerW')], 
+                   is_static=True)
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): static ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValueHelper::CreateHtOfdmTxPowerSpectralDensity(uint32_t centerFrequency, uint32_t channelWidth, double txPowerW) [member function]
+    cls.add_method('CreateHtOfdmTxPowerSpectralDensity', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('uint32_t', 'centerFrequency'), param('uint32_t', 'channelWidth'), param('double', 'txPowerW')], 
+                   is_static=True)
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): static ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValueHelper::CreateNoisePowerSpectralDensity(uint32_t centerFrequency, uint32_t channelWidth, double noiseFigure) [member function]
+    cls.add_method('CreateNoisePowerSpectralDensity', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('uint32_t', 'centerFrequency'), param('uint32_t', 'channelWidth'), param('double', 'noiseFigure')], 
+                   is_static=True)
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): static ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValueHelper::CreateNoisePowerSpectralDensity(double noiseFigure, ns3::Ptr<ns3::SpectrumModel> spectrumModel) [member function]
+    cls.add_method('CreateNoisePowerSpectralDensity', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('double', 'noiseFigure'), param('ns3::Ptr< ns3::SpectrumModel >', 'spectrumModel')], 
+                   is_static=True)
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): static ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity(uint32_t centerFrequency, uint32_t channelWidth, double txPowerW) [member function]
+    cls.add_method('CreateOfdmTxPowerSpectralDensity', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('uint32_t', 'centerFrequency'), param('uint32_t', 'channelWidth'), param('double', 'txPowerW')], 
+                   is_static=True)
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): static ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValueHelper::CreateRfFilter(uint32_t centerFrequency, uint32_t channelWidth) [member function]
+    cls.add_method('CreateRfFilter', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('uint32_t', 'centerFrequency'), param('uint32_t', 'channelWidth')], 
+                   is_static=True)
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): static ns3::Ptr<ns3::SpectrumModel> ns3::WifiSpectrumValueHelper::GetSpectrumModel(uint32_t centerFrequency, uint32_t channelWidth) [member function]
+    cls.add_method('GetSpectrumModel', 
+                   'ns3::Ptr< ns3::SpectrumModel >', 
+                   [param('uint32_t', 'centerFrequency'), param('uint32_t', 'channelWidth')], 
+                   is_static=True)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -3278,6 +3351,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3454,10 +3532,19 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
@@ -3470,10 +3557,10 @@
     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]
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
@@ -3490,6 +3577,11 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3RandomPropagationDelayModel_methods(root_module, cls):
@@ -4729,28 +4821,6 @@
                    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', 
@@ -5331,6 +5401,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -6406,16 +6540,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -6443,35 +6592,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -7096,6 +7240,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/spectrum/examples/tv-trans-example.cc ns-3.26/src/spectrum/examples/tv-trans-example.cc
--- ns-3.25/src/spectrum/examples/tv-trans-example.cc	2016-10-03 20:57:08.184248127 -0700
+++ ns-3.26/src/spectrum/examples/tv-trans-example.cc	2016-10-03 19:49:01.462389031 -0700
@@ -41,6 +41,9 @@
  */
 int main (int argc, char** argv)
 {
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
   /* nodes and positions */
   NodeContainer tvTransmitterNodes;
   NodeContainer spectrumAnalyzerNodes;
diff -Naur ns-3.25/src/spectrum/examples/tv-trans-regional-example.cc ns-3.26/src/spectrum/examples/tv-trans-regional-example.cc
--- ns-3.25/src/spectrum/examples/tv-trans-regional-example.cc	2016-10-03 20:57:08.184248127 -0700
+++ ns-3.26/src/spectrum/examples/tv-trans-regional-example.cc	2016-10-03 19:49:01.463389024 -0700
@@ -41,6 +41,9 @@
  */
 int main (int argc, char** argv)
 {
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
   /* random seed and run number; adjust these to change random draws */
   RngSeedManager::SetSeed(1);
   RngSeedManager::SetRun(3);
diff -Naur ns-3.25/src/spectrum/model/half-duplex-ideal-phy.cc ns-3.26/src/spectrum/model/half-duplex-ideal-phy.cc
--- ns-3.25/src/spectrum/model/half-duplex-ideal-phy.cc	2016-10-03 20:57:08.201247995 -0700
+++ ns-3.26/src/spectrum/model/half-duplex-ideal-phy.cc	2016-10-03 19:49:01.479388905 -0700
@@ -103,6 +103,7 @@
 {
   static TypeId tid = TypeId ("ns3::HalfDuplexIdealPhy")
     .SetParent<SpectrumPhy> ()
+    .SetGroupName ("Spectrum")
     .AddConstructor<HalfDuplexIdealPhy> ()
     .AddAttribute ("Rate",
                    "The PHY rate used by this device",
diff -Naur ns-3.25/src/spectrum/model/wifi-spectrum-value-helper.cc ns-3.26/src/spectrum/model/wifi-spectrum-value-helper.cc
--- ns-3.25/src/spectrum/model/wifi-spectrum-value-helper.cc	2016-10-03 20:57:08.216247878 -0700
+++ ns-3.26/src/spectrum/model/wifi-spectrum-value-helper.cc	2016-10-03 19:49:01.494388793 -0700
@@ -1,6 +1,7 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2009 CTTC
+ * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -16,14 +17,347 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
+ *         Giuseppe Piro  <g.piro@poliba.it>
  */
 
-
+#include <map>
+#include <cmath>
 #include "wifi-spectrum-value-helper.h"
+#include "ns3/log.h"
+#include "ns3/fatal-error.h"
+#include "ns3/assert.h"
 
 namespace ns3 {
 
-/// The Wi-Fi spectrum model
+NS_LOG_COMPONENT_DEFINE ("WifiSpectrumValueHelper");
+
+struct WifiSpectrumModelId
+{
+  WifiSpectrumModelId (uint32_t f, uint32_t w);
+  uint32_t m_centerFrequency;
+  uint32_t m_channelWidth;
+};
+
+WifiSpectrumModelId::WifiSpectrumModelId (uint32_t f, uint32_t w)
+  : m_centerFrequency (f),
+    m_channelWidth (w)
+{
+  NS_LOG_FUNCTION (this << f << w);
+}
+
+bool
+operator < (const WifiSpectrumModelId& a, const WifiSpectrumModelId& b)
+{
+  return ( (a.m_centerFrequency < b.m_centerFrequency) || ( (a.m_centerFrequency == b.m_centerFrequency) && (a.m_channelWidth < b.m_channelWidth)));
+}
+
+static std::map<WifiSpectrumModelId, Ptr<SpectrumModel> > g_wifiSpectrumModelMap;
+
+Ptr<SpectrumModel>
+WifiSpectrumValueHelper::GetSpectrumModel (uint32_t centerFrequency, uint32_t channelWidth)
+{
+  NS_LOG_FUNCTION (centerFrequency << channelWidth);
+  Ptr<SpectrumModel> ret;
+  WifiSpectrumModelId key (centerFrequency, channelWidth);
+  std::map<WifiSpectrumModelId, Ptr<SpectrumModel> >::iterator it = g_wifiSpectrumModelMap.find (key);
+  if (it != g_wifiSpectrumModelMap.end ())
+    {
+      ret = it->second;
+    }
+  else
+    {
+      Bands bands;
+      double centerFrequencyHz = centerFrequency * 1e6;
+      // Overall bandwidth will be channelWidth plus 10 MHz guards on each side
+      double bandwidth = (channelWidth + 20) * 1e6;
+      // Use OFDM subcarrier width of 312.5 KHz as band granularity
+      double bandBandwidth = 312500;
+      // For OFDM, the center subcarrier is null (at center frequency)
+      uint32_t numBands = static_cast<uint32_t> (bandwidth / bandBandwidth + 0.5);
+      NS_ASSERT (numBands > 0);
+      if (numBands % 2 == 0)
+        {
+          // round up to the nearest odd number of subbands so that bands
+          // are symmetric around center frequency
+          NS_LOG_DEBUG ("Total bandwidth evenly divided by 312.5 KHz");
+          numBands += 1;    
+        }
+      NS_ASSERT_MSG (numBands % 2 == 1, "Number of bands should be odd");
+      // lay down numBands/2 bands symmetrically around center frequency
+      // and place an additional band at center frequency
+      double startingFrequencyHz = centerFrequencyHz - (numBands/2 * bandBandwidth) - bandBandwidth/2;
+      for (size_t i = 0; i < numBands; i++) 
+        {
+          BandInfo info;
+          double f = startingFrequencyHz + (i * bandBandwidth);
+          info.fl = f;
+          f += bandBandwidth/2;
+          info.fc = f;
+          f += bandBandwidth/2;
+          info.fh = f;
+          NS_LOG_DEBUG ("creating band " << i << " (" << info.fl << ":" << info.fc << ":" << info.fh << ")");
+          bands.push_back (info);
+        }
+      ret = Create<SpectrumModel> (bands);
+      g_wifiSpectrumModelMap.insert (std::pair<WifiSpectrumModelId, Ptr<SpectrumModel> > (key, ret));
+    }
+  NS_LOG_LOGIC ("returning SpectrumModel::GetUid () == " << ret->GetUid ());
+  return ret;
+}
+
+Ptr<SpectrumValue>
+WifiSpectrumValueHelper::CreateHtOfdmTxPowerSpectralDensity (uint32_t centerFrequency, uint32_t channelWidth, double txPowerW)
+{
+  NS_LOG_FUNCTION (centerFrequency << channelWidth << txPowerW);
+  Ptr<SpectrumValue> c = Create<SpectrumValue> (GetSpectrumModel (centerFrequency, channelWidth));
+  Values::iterator vit = c->ValuesBegin ();
+  Bands::const_iterator bit = c->ConstBandsBegin ();
+  double txPowerPerBand;
+  switch (channelWidth)
+    {
+    case 20:
+      // 56 subcarriers (52 data + 4 pilot) 
+      NS_ASSERT_MSG (c->GetSpectrumModel ()->GetNumBands () == 129, "Unexpected number of bands");
+      // skip 32 subbands, then place power in 28 of the next 32 subbands, then
+      // skip the center subband, then place power in 28 of the next 32
+      // subbands, then skip the final 32 subbands.  
+      txPowerPerBand = txPowerW / 56;
+      for (size_t i = 0; i < c->GetSpectrumModel ()->GetNumBands (); i++, vit++, bit++)
+        {
+          if ((i >=36 && i <=63) || (i >=65 && i <=92)) 
+            {
+              *vit = txPowerPerBand / (bit->fh - bit->fl);
+            }
+        }
+      NS_LOG_DEBUG ("Added signal power to subbands 36-63 and 65-92");
+      NS_LOG_DEBUG ("Integrated power " << Integral (*c));
+      NS_ASSERT_MSG (std::abs (txPowerW - Integral (*c)) < 1e-6, "Power allocation failed"); 
+      break;
+    case 40:
+      // 112 subcarriers (104 data + 8 pilot) 
+      // possible alternative:  114 subcarriers (108 data + 6 pilot)
+      NS_ASSERT_MSG (c->GetSpectrumModel ()->GetNumBands () == 193, "Unexpected number of bands");
+      txPowerPerBand = txPowerW / 112;
+      for (size_t i = 0; i < c->GetSpectrumModel ()->GetNumBands (); i++, vit++, bit++)
+        {
+          if ((i >=36 && i <=63) || (i >=65 && i <=92) || (i >=100 && i<=127) || (i >=129 && i<= 156)) 
+            {
+              *vit = txPowerPerBand / (bit->fh - bit->fl);
+            }
+        }
+      NS_LOG_DEBUG ("Added signal power to subbands 36-63, 65-92, 100-127, and 129-156");
+      NS_LOG_DEBUG ("Integrated power " << Integral (*c));
+      NS_ASSERT_MSG (std::abs (txPowerW - Integral (*c)) < 1e-6, "Power allocation failed"); 
+      break;
+    case 80:
+      // 224 subcarriers (208 data + 16 pilot) 
+      // possible alternative:  242 subcarriers (234 data + 8 pilot)
+      NS_ASSERT_MSG (c->GetSpectrumModel ()->GetNumBands () == 321, "Unexpected number of bands");
+      txPowerPerBand = txPowerW / 224;
+      for (size_t i = 0; i < c->GetSpectrumModel ()->GetNumBands (); i++, vit++, bit++)
+        {
+          if ((i >= 36 && i <= 63) || (i >= 65 && i <= 92) || 
+              (i >= 100 && i <= 127) || (i >= 129 && i <= 156) ||
+              (i >= 164 && i <= 191) || (i >= 193 && i <= 220) ||
+              (i >= 228 && i <= 255) || (i >= 257 && i <= 284))
+            {
+              *vit = txPowerPerBand / (bit->fh - bit->fl);
+            }
+        }
+      NS_LOG_DEBUG ("Added signal power to subbands 36-63, 65-92, 100-127, 129-156, 164-191, 193-220, 228-255, 257-284");
+      NS_LOG_DEBUG ("Integrated power " << Integral (*c));
+      NS_ASSERT_MSG (std::abs (txPowerW - Integral (*c)) < 1e-6, "Power allocation failed"); 
+      break;
+    case 160:
+      // 448 subcarriers (416 data + 32 pilot) VHT 
+      // possible alternative:  484 subcarriers (468 data + 16 pilot)
+      NS_ASSERT_MSG (c->GetSpectrumModel ()->GetNumBands () == 577, "Unexpected number of bands");
+      txPowerPerBand = txPowerW / 448;
+      for (size_t i = 0; i < c->GetSpectrumModel ()->GetNumBands (); i++, vit++, bit++)
+        {
+          if ((i >= 36 && i <= 63) || (i >= 65 && i <= 92) || 
+              (i >= 100 && i <= 127) || (i >= 129 && i <= 156) ||
+              (i >= 164 && i <= 191) || (i >= 193 && i <= 220) ||
+              (i >= 228 && i <= 255) || (i >= 257 && i <= 284) ||
+              (i >= 292 && i <= 319) || (i >= 321 && i <= 348) ||
+              (i >= 356 && i <= 383) || (i >= 385 && i <= 412) ||
+              (i >= 420 && i <= 447) || (i >= 449 && i <= 476) ||
+              (i >= 484 && i <= 511) || (i >= 513 && i <= 540))
+            {
+              *vit = txPowerPerBand / (bit->fh - bit->fl);
+            }
+        }
+      NS_LOG_DEBUG ("Added signal power to subbands 36-63, 65-92, 100-127, 129-156, 164-191, 193-220, 228-255, 257-284, 292-319, 321-348, 356-383, 385-412, 420-447, 449-476, 484-511, and 513-540");
+      NS_LOG_DEBUG ("Integrated power " << Integral (*c));
+      NS_ASSERT_MSG (std::abs (txPowerW - Integral (*c)) < 1e-6, "Power allocation failed"); 
+      break;
+    default:
+      NS_FATAL_ERROR ("ChannelWidth " << channelWidth << " unsupported");
+      break;
+    }
+  return c;
+}
+
+Ptr<SpectrumValue>
+WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity (uint32_t centerFrequency, uint32_t channelWidth, double txPowerW)
+{
+  NS_LOG_FUNCTION (centerFrequency << channelWidth << txPowerW);
+  Ptr<SpectrumValue> c = Create<SpectrumValue> (GetSpectrumModel (centerFrequency, channelWidth));
+  Values::iterator vit = c->ValuesBegin ();
+  Bands::const_iterator bit = c->ConstBandsBegin ();
+  double txPowerPerBand;
+  switch (channelWidth)
+    {
+    case 20:
+      // 52 subcarriers (48 data + 4 pilot)
+      // skip 38 subbands, then place power in 26 subbands, then
+      // skip the center subband, then place power in 26 subbands, then skip
+      // the final 38 subbands.  
+      NS_ASSERT_MSG (c->GetSpectrumModel ()->GetNumBands () == 129, "Unexpected number of bands");
+      txPowerPerBand = txPowerW / 52;
+      for (size_t i = 0; i < c->GetSpectrumModel ()->GetNumBands (); i++, vit++, bit++)
+        {
+          if ((i >=38 && i <=63) || (i >=65 && i <=90)) 
+            {
+              *vit = txPowerPerBand / (bit->fh - bit->fl);
+            }
+          else
+            {
+              *vit = 0;
+            }
+        }
+      NS_LOG_DEBUG ("Added signal power to subbands 38-63 and 65-90");
+      NS_LOG_DEBUG ("Integrated power " << Integral (*c));
+      NS_ASSERT_MSG (std::abs (txPowerW - Integral (*c)) < 1e-6, "Power allocation failed"); 
+      break;
+    case 10:
+      // 28 subcarriers (24 data + 4 pilot)
+      // skip 34 subbands, then place power in 14 subbands, then
+      // skip the center subband, then place power in 14 subbands, then skip
+      // the final 34 subbands.  
+      NS_ASSERT_MSG (c->GetSpectrumModel ()->GetNumBands () == 97, "Unexpected number of bands");
+      txPowerPerBand = txPowerW / 28;
+      for (size_t i = 0; i < c->GetSpectrumModel ()->GetNumBands (); i++, vit++, bit++)
+        {
+          if ((i >=34 && i <=47) || (i >=49 && i <=62)) 
+            {
+              *vit = txPowerPerBand / (bit->fh - bit->fl);
+            }
+          else
+            {
+              *vit = 0;
+            }
+        }
+      NS_LOG_DEBUG ("Added signal power to subbands 34-47 and 49-62");
+      NS_LOG_DEBUG ("Integrated power " << Integral (*c));
+      NS_ASSERT_MSG (std::abs (txPowerW - Integral (*c)) < 1e-6, "Power allocation failed"); 
+      break;
+    case 5:
+      // 16 subcarriers (12 data + 4 pilot)
+      // skip 34 subbands, then place power in 14 subbands, then
+      // skip the center subband, then place power in 14 subbands, then skip
+      // the final 34 subbands.  
+      NS_ASSERT_MSG (c->GetSpectrumModel ()->GetNumBands () == 81, "Unexpected number of bands");
+      txPowerPerBand = txPowerW / 16;
+      for (size_t i = 0; i < c->GetSpectrumModel ()->GetNumBands (); i++, vit++, bit++)
+        {
+          if ((i >=32 && i <=39) || (i >=41 && i <=48)) 
+            {
+              *vit = txPowerPerBand / (bit->fh - bit->fl);
+            }
+          else
+            {
+              *vit = 0;
+            }
+        }
+      NS_LOG_DEBUG ("Added signal power to subbands 32-39 and 41-48");
+      NS_LOG_DEBUG ("Integrated power " << Integral (*c));
+      NS_ASSERT_MSG (std::abs (txPowerW - Integral (*c)) < 1e-6, "Power allocation failed"); 
+      break;
+    default:
+      NS_FATAL_ERROR ("ChannelWidth " << channelWidth << " unsupported");
+      break;
+    }
+  return c;
+}
+
+// Power allocated to 71 center subbands out of 135 total subbands in the band 
+Ptr<SpectrumValue>
+WifiSpectrumValueHelper::CreateDsssTxPowerSpectralDensity (uint32_t centerFrequency, double txPowerW)
+{
+  NS_LOG_FUNCTION (centerFrequency << txPowerW);
+  uint32_t channelWidth = 22;  // DSSS channels are 22 MHz wide
+  Ptr<SpectrumValue> c = Create<SpectrumValue> (GetSpectrumModel (centerFrequency, channelWidth));
+  Values::iterator vit = c->ValuesBegin ();
+  Bands::const_iterator bit = c->ConstBandsBegin ();
+  double txPowerPerBand;
+  // Evenly spread power across 22 MHz (71 bands)
+  NS_ASSERT (c->GetSpectrumModel ()->GetNumBands () == 135);
+  txPowerPerBand = txPowerW / 71;
+  for (size_t i = 0; i < c->GetSpectrumModel ()->GetNumBands (); i++, vit++, bit++)
+    {
+      if (i >=32 && i <=102) 
+        {
+          *vit = txPowerPerBand / (bit->fh - bit->fl);
+        }
+    }
+  return c;
+}
+
+Ptr<SpectrumValue>
+WifiSpectrumValueHelper::CreateNoisePowerSpectralDensity (uint32_t centerFrequency, uint32_t channelWidth, double noiseFigure)
+{
+  Ptr<SpectrumModel> model = GetSpectrumModel (centerFrequency, channelWidth);
+  return CreateNoisePowerSpectralDensity (noiseFigure, model);
+}
+
+Ptr<SpectrumValue>
+WifiSpectrumValueHelper::CreateNoisePowerSpectralDensity (double noiseFigureDb, Ptr<SpectrumModel> spectrumModel)
+{
+  NS_LOG_FUNCTION (noiseFigureDb << spectrumModel);
+
+  // see "LTE - From theory to practice"
+  // Section 22.4.4.2 Thermal Noise and Receiver Noise Figure
+  const double kT_dBm_Hz = -174.0;  // dBm/Hz
+  double kT_W_Hz = std::pow (10.0, (kT_dBm_Hz - 30) / 10.0);
+  double noiseFigureLinear = std::pow (10.0, noiseFigureDb / 10.0);
+  double noisePowerSpectralDensity =  kT_W_Hz * noiseFigureLinear;
+
+  Ptr<SpectrumValue> noisePsd = Create <SpectrumValue> (spectrumModel);
+  (*noisePsd) = noisePowerSpectralDensity;
+  NS_LOG_DEBUG ("NoisePowerSpectralDensity has integrated power of " << Integral (*noisePsd));
+  return noisePsd;
+}
+
+Ptr<SpectrumValue>
+WifiSpectrumValueHelper::CreateRfFilter (uint32_t centerFrequency, uint32_t channelWidth)
+{
+  NS_LOG_FUNCTION (centerFrequency << channelWidth);
+  Ptr<SpectrumValue> c = Create <SpectrumValue> (GetSpectrumModel (centerFrequency, channelWidth));
+  size_t numBands = c->GetSpectrumModel ()->GetNumBands ();
+  Bands::const_iterator bit = c->ConstBandsBegin ();
+  Values::iterator vit = c->ValuesBegin ();
+  uint32_t bandBandwidth = static_cast<uint32_t> (((bit->fh - bit->fl) + 0.5));
+  NS_LOG_DEBUG ("Band bandwidth: " << bandBandwidth);
+  size_t numBandsInFilter = static_cast<size_t> (channelWidth * 1e6 / bandBandwidth); 
+  if (channelWidth % bandBandwidth != 0)
+    {
+      numBandsInFilter += 1;
+    }
+  NS_LOG_DEBUG ("Num bands in filter: " << numBandsInFilter);
+  // Set the value of the filter to 1 for the center-most numBandsInFilter
+  NS_ASSERT_MSG ((numBandsInFilter % 2 == 1) && (numBands % 2 == 1), "Should have odd number of bands");
+  size_t startIndex = (numBands - numBandsInFilter) / 2;
+  vit += startIndex;
+  bit += startIndex;
+  for (size_t i = startIndex; i < startIndex + numBandsInFilter; i++, vit++, bit++)
+    {
+      *vit = 1;
+    }
+  NS_LOG_DEBUG ("Added subbands " << startIndex << " to " << startIndex + numBandsInFilter << " to filter");
+  return c;
+}
+
 static Ptr<SpectrumModel> g_WifiSpectrumModel5Mhz;
 
 WifiSpectrumValueHelper::~WifiSpectrumValueHelper ()
@@ -35,7 +369,7 @@
 }
 
 /**
- * Static class to initialize the values for the Wi-Fi spectrum model
+ * Static class to initialize the values for the 2.4 GHz Wi-Fi spectrum model
  */
 static class WifiSpectrumModel5MhzInitializer
 {
diff -Naur ns-3.25/src/spectrum/model/wifi-spectrum-value-helper.h ns-3.26/src/spectrum/model/wifi-spectrum-value-helper.h
--- ns-3.25/src/spectrum/model/wifi-spectrum-value-helper.h	2016-10-03 20:57:08.217247870 -0700
+++ ns-3.26/src/spectrum/model/wifi-spectrum-value-helper.h	2016-10-03 19:49:01.494388793 -0700
@@ -26,77 +26,144 @@
 
 namespace ns3 {
 
-
-
 /**
  * \ingroup spectrum
  *
- * This abstract class defines the interface for interacting with all WifiSpectrumValue implementations.
- *
+ *  This class defines all functions to create a spectrum model for 
+ *  Wi-Fi based on a a spectral model aligned with an OFDM subcarrier
+ *  spacing of 312.5 KHz (model also reused for DSSS modulations)
  */
 class WifiSpectrumValueHelper
 {
 public:
+  /**
+   * Destructor
+   */
   virtual ~WifiSpectrumValueHelper ();
+  
   /**
-   * Creates a SpectrumValue instance which
-   * has a constant value for all frequencies
-   *
-   * @param psd the constant value
-   *
-   * @return a Ptr to a newly created SpectrumValue
+   * Return a SpectrumModel instance corresponding to the center frequency
+   * and channel width.  The model includes +/- 10 MHz of guard bands
+   * (i.e. the model will span (channelWidth + 20) MHz of bandwidth).
+   *
+   * \param centerFrequency center frequency (MHz)
+   * \param channelWidth channel width (MHz)
+   * \return the static SpectrumModel instance corresponding to the
+   * given carrier frequency and channel width configuration. 
    */
-  virtual Ptr<SpectrumValue> CreateConstant (double psd) = 0;
+  static Ptr<SpectrumModel> GetSpectrumModel (uint32_t centerFrequency, uint32_t channelWidth);
 
   /**
-   * 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
+   * Create a transmit power spectral density corresponding to OFDM 
+   * High Throughput (HT) (802.11n/ac).  Channel width may vary between 
+   * 20, 40, 80, and 160 MHz.
+   *
+   * \param centerFrequency center frequency (MHz)
+   * \param channelWidth channel width (MHz)
+   * \param txPowerW  transmit power (W) to allocate
+   */
+  static Ptr<SpectrumValue> CreateHtOfdmTxPowerSpectralDensity (uint32_t centerFrequency, uint32_t channelWidth, double txPowerW);
+
+  /**
+   * Create a transmit power spectral density corresponding to OFDM 
+   * (802.11a/g).  Channel width may vary between 20, 10, and 5 MHz.
    *
-   * @return a Ptr to a newly created SpectrumValue
+   * \param centerFrequency center frequency (MHz)
+   * \param channelWidth channel width (MHz)
+   * \param txPowerW  transmit power (W) to allocate
    */
-  virtual Ptr<SpectrumValue> CreateTxPowerSpectralDensity (double txPower, uint32_t channel) = 0;
+  static Ptr<SpectrumValue> CreateOfdmTxPowerSpectralDensity (uint32_t centerFrequency, uint32_t channelWidth, double txPowerW);
 
   /**
-   * 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
+   * Create a transmit power spectral density corresponding to DSSS 
    *
-   * @param channel the number of the channel
+   * The center frequency typically corresponds to 802.11b channel 
+   * center frequencies but is not restricted to those frequencies.
    *
-   * @return a Ptr to a newly created SpectrumValue
+   * \param centerFrequency center frequency (MHz)
+   * \param txPowerW  transmit power (W) to allocate
    */
-  virtual Ptr<SpectrumValue> CreateRfFilter (uint32_t channel) = 0;
+  static Ptr<SpectrumValue> CreateDsssTxPowerSpectralDensity (uint32_t centerFrequency, double txPowerW);
 
-};
+  /**
+   *
+   * \param centerFrequency center frequency (MHz)
+   * \param channelWidth channel width (MHz)
+   * \param noiseFigure the noise figure in dB w.r.t. a reference temperature of 290K
+   * \return a pointer to a newly allocated SpectrumValue representing the noise Power Spectral Density in W/Hz for each Band
+   */
+  static Ptr<SpectrumValue> CreateNoisePowerSpectralDensity (uint32_t centerFrequency, uint32_t channelWidth, double noiseFigure);
 
+  /**
+   * \param centerFrequency center frequency (MHz)
+   * \param channelWidth channel width (MHz)
+   * \return a pointer to a newly allocated SpectrumValue representing the noise Power Spectral Density in W/Hz corresponding to thermal noise, for each Band
+   */
+  static Ptr<SpectrumValue> CreateNoisePowerSpectralDensity (double noiseFigure, Ptr<SpectrumModel> spectrumModel);
 
+  /**
+   * \param centerFrequency center frequency (MHz)
+   * \param channelWidth channel width (MHz)
+   * \return a pointer to a SpectrumValue representing the RF filter applied
+   * to an received power spectral density
+   */
+  static Ptr<SpectrumValue> CreateRfFilter (uint32_t centerFrequency, uint32_t channelWidth);
+};
 
 /**
  * \ingroup spectrum
  *
- * Implements WifiSpectrumValue for the 2.4 GHz ISM band only, with a
+ * Implements Wifi SpectrumValue for the 2.4 GHz ISM band only, with a
  * 5 MHz spectrum resolution.
  *
  */
-class WifiSpectrumValue5MhzFactory : public WifiSpectrumValueHelper
+class WifiSpectrumValue5MhzFactory
 {
 public:
+  /**
+   * Destructor
+   */
   virtual ~WifiSpectrumValue5MhzFactory ();
-  // inherited from WifiSpectrumValueHelper
+  /**
+   * Creates a SpectrumValue instance with a constant value for all frequencies
+   *
+   * @param psd the constant value
+   *
+   * @return a Ptr to a newly created SpectrumValue
+   */
   virtual Ptr<SpectrumValue> CreateConstant (double psd);
+  /**
+   * Creates a SpectrumValue instance that represents the TX Power Spectral 
+   * Density  of a wifi device corresponding to the provided parameters
+   *
+   * Since the spectrum model has a resolution of 5 MHz, we model
+   * the transmitted signal with a constant density over a 20MHz
+   * bandwidth centered on the center frequency of the channel. The
+   * transmission power outside the transmission power density is
+   * calculated considering the transmit spectrum mask, see IEEE
+   * Std. 802.11-2007, Annex I.  The two bands just outside of the main
+   * 20 MHz are allocated power at -28 dB down from the center 20 MHz,
+   * and the two bands outside of this are allocated power at -40 dB down
+   * (with a total bandwidth of 60 MHz containing non-zero power allocation).
+   *
+   * @param txPower the total TX power in W
+   * @param channel the number of the channel (1 <= channel <= 13)
+   *
+   * @return a Ptr to a newly created SpectrumValue
+   */
   virtual Ptr<SpectrumValue> CreateTxPowerSpectralDensity (double txPower, uint32_t channel);
+  /**
+   * Creates a 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
+   *
+   * @param channel the number of the channel (1 <= channel <= 13)
+   *
+   * @return a Ptr to a newly created SpectrumValue
+   */
   virtual Ptr<SpectrumValue> CreateRfFilter (uint32_t channel);
-
 };
 
-
-
 } // namespace ns3
 
-
-
 #endif /*  WIFI_SPECTRUM_VALUE_HELPER_H */
diff -Naur ns-3.25/src/stats/bindings/modulegen__gcc_ILP32.py ns-3.26/src/stats/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/stats/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.224247815 -0700
+++ ns-3.26/src/stats/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.502388733 -0700
@@ -52,6 +52,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], import_from_module='ns.core')
     ## data-calculator.h (module 'stats'): ns3::StatisticalSummary [class]
     module.add_class('StatisticalSummary', allow_subclassing=True)
     ## nstime.h (module 'core'): ns3::TimeWithUnit [class]
@@ -70,6 +72,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -144,6 +148,10 @@
     module.add_class('DataOutputInterface', parent=root_module['ns3::Object'])
     ## double.h (module 'core'): ns3::DoubleValue [class]
     module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -290,6 +298,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
     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&')
@@ -355,6 +366,8 @@
     register_Ns3DataCollector_methods(root_module, root_module['ns3::DataCollector'])
     register_Ns3DataOutputInterface_methods(root_module, root_module['ns3::DataOutputInterface'])
     register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -1201,23 +1214,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1332,6 +1345,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -1358,10 +1376,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -1383,6 +1401,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -1398,6 +1420,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -1591,6 +1617,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -2364,6 +2395,70 @@
                    [param('double const &', 'value')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
diff -Naur ns-3.25/src/stats/bindings/modulegen__gcc_LP64.py ns-3.26/src/stats/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/stats/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.227247792 -0700
+++ ns-3.26/src/stats/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.505388711 -0700
@@ -52,6 +52,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], import_from_module='ns.core')
     ## data-calculator.h (module 'stats'): ns3::StatisticalSummary [class]
     module.add_class('StatisticalSummary', allow_subclassing=True)
     ## nstime.h (module 'core'): ns3::TimeWithUnit [class]
@@ -70,6 +72,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -144,6 +148,10 @@
     module.add_class('DataOutputInterface', parent=root_module['ns3::Object'])
     ## double.h (module 'core'): ns3::DoubleValue [class]
     module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -290,6 +298,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
     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&')
@@ -355,6 +366,8 @@
     register_Ns3DataCollector_methods(root_module, root_module['ns3::DataCollector'])
     register_Ns3DataOutputInterface_methods(root_module, root_module['ns3::DataOutputInterface'])
     register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -1201,23 +1214,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1332,6 +1345,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -1358,10 +1376,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -1383,6 +1401,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -1398,6 +1420,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -1591,6 +1617,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -2364,6 +2395,70 @@
                    [param('double const &', 'value')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
diff -Naur ns-3.25/src/stats/model/basic-data-calculators.h ns-3.26/src/stats/model/basic-data-calculators.h
--- ns-3.25/src/stats/model/basic-data-calculators.h	2016-10-03 20:57:08.240247690 -0700
+++ ns-3.26/src/stats/model/basic-data-calculators.h	2016-10-03 19:49:01.518388614 -0700
@@ -187,14 +187,8 @@
         }
       else
         {
-          if (i < m_min)
-            {
-              m_min = i;
-            }
-          if (i > m_max)
-            {
-              m_max = i;
-            }
+          m_min = (i < m_min) ? i : m_min;
+          m_max = (i > m_max) ? i : m_max;
         }
 
       // Calculate the variance based on equations (15) and (16) on
diff -Naur ns-3.25/src/stats/model/sqlite-data-output.cc ns-3.26/src/stats/model/sqlite-data-output.cc
--- ns-3.25/src/stats/model/sqlite-data-output.cc	2016-10-03 20:57:08.250247613 -0700
+++ ns-3.26/src/stats/model/sqlite-data-output.cc	2016-10-03 19:49:01.528388540 -0700
@@ -126,26 +126,51 @@
       return;
     }
 
-  std::string run = dc.GetRunLabel ();
-
   Exec ("create table if not exists Experiments (run, experiment, strategy, input, description text)");
-  Exec ("insert into Experiments (run,experiment,strategy,input,description) values ('" +
-        run + "', '" +
-        dc.GetExperimentLabel () + "', '" +
-        dc.GetStrategyLabel () + "', '" +
-        dc.GetInputLabel () + "', '" +
-        dc.GetDescription () + "')");
+
+  sqlite3_stmt *stmt;
+  sqlite3_prepare_v2 (m_db,
+    "insert into Experiments (run, experiment, strategy, input, description) values (?, ?, ?, ?, ?)",
+    -1,
+    &stmt,
+    NULL
+  );
+
+  std::string run = dc.GetRunLabel ();
+  sqlite3_bind_text (stmt, 1, run.c_str (), run.length (), SQLITE_TRANSIENT);
+  sqlite3_bind_text (stmt, 2, dc.GetExperimentLabel ().c_str (),
+                              dc.GetExperimentLabel ().length (), SQLITE_TRANSIENT);
+  sqlite3_bind_text (stmt, 3, dc.GetStrategyLabel ().c_str (),
+                              dc.GetStrategyLabel ().length (), SQLITE_TRANSIENT);
+  sqlite3_bind_text (stmt, 4, dc.GetInputLabel ().c_str (),
+                              dc.GetInputLabel ().length (), SQLITE_TRANSIENT);
+  sqlite3_bind_text (stmt, 5, dc.GetDescription ().c_str (),
+                              dc.GetDescription ().length (), SQLITE_TRANSIENT);
+  sqlite3_step (stmt);
+  sqlite3_finalize (stmt);
 
   Exec ("create table if not exists Metadata ( run text, key text, value)");
 
+  sqlite3_prepare_v2 (m_db,
+    "insert into Metadata (run, key, value) values (?, ?, ?)",
+    -1,
+    &stmt,
+    NULL
+  );
   for (MetadataList::iterator i = dc.MetadataBegin ();
        i != dc.MetadataEnd (); i++) {
       std::pair<std::string, std::string> blob = (*i);
-      Exec ("insert into Metadata (run,key,value) values ('" +
-            run + "', '" +
-            blob.first + "', '" +
-            blob.second + "')");
+
+      sqlite3_reset (stmt);
+      sqlite3_bind_text (stmt, 1, run.c_str (),
+                                  run.length (), SQLITE_TRANSIENT);
+      sqlite3_bind_text (stmt, 2, blob.first.c_str (),
+                                  blob.first.length (), SQLITE_TRANSIENT);
+      sqlite3_bind_text (stmt, 3, blob.second.c_str (),
+                                  blob.second.length (), SQLITE_TRANSIENT);
+      sqlite3_step (stmt);
     }
+  sqlite3_finalize (stmt);
 
   Exec ("BEGIN");
   SqliteOutputCallback callback (this, run);
@@ -169,9 +194,22 @@
 
   m_owner->Exec ("create table if not exists Singletons ( run text, name text, variable text, value )");
 
+  sqlite3_prepare_v2 (m_owner->m_db,
+    "insert into Singletons (run, name, variable, value) values (?, ?, ?, ?)",
+    -1,
+    &m_insertSingletonStatement,
+    NULL
+  );
+  sqlite3_bind_text (m_insertSingletonStatement, 1, m_runLabel.c_str (), m_runLabel.length (), SQLITE_TRANSIENT);
+
   // end SqliteDataOutput::SqliteOutputCallback::SqliteOutputCallback
 }
 
+SqliteDataOutput::SqliteOutputCallback::~SqliteOutputCallback ()
+{
+  sqlite3_finalize (m_insertSingletonStatement);
+}
+
 void
 SqliteDataOutput::SqliteOutputCallback::OutputStatistic (std::string key,
                                                          std::string variable,
@@ -200,15 +238,11 @@
 {
   NS_LOG_FUNCTION (this << key << variable << val);
 
-  std::stringstream sstr;
-  sstr << "insert into Singletons (run,name,variable,value) values ('" <<
-  m_runLabel << "', '" <<
-  key << "', '" <<
-  variable << "', " <<
-  val << ")";
-  m_owner->Exec (sstr.str ());
-
-  // end SqliteDataOutput::SqliteOutputCallback::OutputSingleton
+  sqlite3_reset (m_insertSingletonStatement);
+  sqlite3_bind_text (m_insertSingletonStatement, 2, key.c_str (), key.length (), SQLITE_TRANSIENT);
+  sqlite3_bind_text (m_insertSingletonStatement, 3, variable.c_str (), variable.length (), SQLITE_TRANSIENT);
+  sqlite3_bind_int (m_insertSingletonStatement, 4, val);
+  sqlite3_step (m_insertSingletonStatement);
 }
 void
 SqliteDataOutput::SqliteOutputCallback::OutputSingleton (std::string key,
@@ -217,15 +251,13 @@
 {
   NS_LOG_FUNCTION (this << key << variable << val);
 
-  std::stringstream sstr;
-  sstr << "insert into Singletons (run,name,variable,value) values ('" <<
-  m_runLabel << "', '" <<
-  key << "', '" <<
-  variable << "', " <<
-  val << ")";
-  m_owner->Exec (sstr.str ());
-  // end SqliteDataOutput::SqliteOutputCallback::OutputSingleton
+  sqlite3_reset (m_insertSingletonStatement);
+  sqlite3_bind_text (m_insertSingletonStatement, 2, key.c_str (), key.length (), SQLITE_TRANSIENT);
+  sqlite3_bind_text (m_insertSingletonStatement, 3, variable.c_str (), variable.length (), SQLITE_TRANSIENT);
+  sqlite3_bind_int64 (m_insertSingletonStatement, 4, val);
+  sqlite3_step (m_insertSingletonStatement);
 }
+
 void
 SqliteDataOutput::SqliteOutputCallback::OutputSingleton (std::string key,
                                                          std::string variable,
@@ -233,15 +265,13 @@
 {
   NS_LOG_FUNCTION (this << key << variable << val);
 
-  std::stringstream sstr;
-  sstr << "insert into Singletons (run,name,variable,value) values ('" <<
-  m_runLabel << "', '" <<
-  key << "', '" <<
-  variable << "', " <<
-  val << ")";
-  m_owner->Exec (sstr.str ());
-  // end SqliteDataOutput::SqliteOutputCallback::OutputSingleton
+  sqlite3_reset (m_insertSingletonStatement);
+  sqlite3_bind_text (m_insertSingletonStatement, 2, key.c_str (), key.length (), SQLITE_TRANSIENT);
+  sqlite3_bind_text (m_insertSingletonStatement, 3, variable.c_str (), variable.length (), SQLITE_TRANSIENT);
+  sqlite3_bind_double (m_insertSingletonStatement, 4, val);
+  sqlite3_step (m_insertSingletonStatement);
 }
+
 void
 SqliteDataOutput::SqliteOutputCallback::OutputSingleton (std::string key,
                                                          std::string variable,
@@ -249,15 +279,13 @@
 {
   NS_LOG_FUNCTION (this << key << variable << val);
 
-  std::stringstream sstr;
-  sstr << "insert into Singletons (run,name,variable,value) values ('" <<
-  m_runLabel << "', '" <<
-  key << "', '" <<
-  variable << "', '" <<
-  val << "')";
-  m_owner->Exec (sstr.str ());
-  // end SqliteDataOutput::SqliteOutputCallback::OutputSingleton
+  sqlite3_reset (m_insertSingletonStatement);
+  sqlite3_bind_text (m_insertSingletonStatement, 2, key.c_str (), key.length (), SQLITE_TRANSIENT);
+  sqlite3_bind_text (m_insertSingletonStatement, 3, variable.c_str (), variable.length (), SQLITE_TRANSIENT);
+  sqlite3_bind_text (m_insertSingletonStatement, 4, val.c_str (), val.length (), SQLITE_TRANSIENT);
+  sqlite3_step (m_insertSingletonStatement);
 }
+
 void
 SqliteDataOutput::SqliteOutputCallback::OutputSingleton (std::string key,
                                                          std::string variable,
@@ -265,12 +293,9 @@
 {
   NS_LOG_FUNCTION (this << key << variable << val);
 
-  std::stringstream sstr;
-  sstr << "insert into Singletons (run,name,variable,value) values ('" <<
-  m_runLabel << "', '" <<
-  key << "', '" <<
-  variable << "', " <<
-  val.GetTimeStep () << ")";
-  m_owner->Exec (sstr.str ());
-  // end SqliteDataOutput::SqliteOutputCallback::OutputSingleton
+  sqlite3_reset (m_insertSingletonStatement);
+  sqlite3_bind_text (m_insertSingletonStatement, 2, key.c_str (), key.length (), SQLITE_TRANSIENT);
+  sqlite3_bind_text (m_insertSingletonStatement, 3, variable.c_str (), variable.length (), SQLITE_TRANSIENT);
+  sqlite3_bind_int64 (m_insertSingletonStatement, 4, val.GetTimeStep ());
+  sqlite3_step (m_insertSingletonStatement);
 }
diff -Naur ns-3.25/src/stats/model/sqlite-data-output.h ns-3.26/src/stats/model/sqlite-data-output.h
--- ns-3.25/src/stats/model/sqlite-data-output.h	2016-10-03 20:57:08.250247613 -0700
+++ ns-3.26/src/stats/model/sqlite-data-output.h	2016-10-03 19:49:01.528388540 -0700
@@ -27,7 +27,7 @@
 
 #define STATS_HAS_SQLITE3
 
-struct sqlite3;
+#include <sqlite3.h>
 
 namespace ns3 {
 
@@ -70,6 +70,11 @@
     SqliteOutputCallback(Ptr<SqliteDataOutput> owner, std::string run);
 
     /**
+     * Destructor
+     */
+    ~SqliteOutputCallback ();
+
+    /**
      * \brief Generates data statistics
      * \param key the SQL key to use
      * \param variable the variable name
@@ -132,6 +137,7 @@
 private:
     Ptr<SqliteDataOutput> m_owner; //!< the instance this object belongs to
     std::string m_runLabel; //!< Run label
+    sqlite3_stmt *m_insertSingletonStatement; //!< Prepared singleton insert statement
 
     // end class SqliteOutputCallback
   };
diff -Naur ns-3.25/src/tap-bridge/bindings/modulegen__gcc_ILP32.py ns-3.26/src/tap-bridge/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/tap-bridge/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.260247535 -0700
+++ ns-3.26/src/tap-bridge/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.538388465 -0700
@@ -106,6 +106,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -178,6 +180,10 @@
     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'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
@@ -224,6 +230,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -370,6 +378,8 @@
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3DataRateChecker_methods(root_module, root_module['ns3::DataRateChecker'])
     register_Ns3DataRateValue_methods(root_module, root_module['ns3::DataRateValue'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3FdReader_methods(root_module, root_module['ns3::FdReader'])
@@ -613,6 +623,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2002,23 +2017,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2133,6 +2148,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2154,10 +2174,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2179,6 +2199,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2194,6 +2218,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -2355,6 +2383,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3018,6 +3051,70 @@
                    [param('ns3::DataRate const &', 'value')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -3421,16 +3518,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -3458,35 +3570,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -3873,6 +3980,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/tap-bridge/bindings/modulegen__gcc_LP64.py ns-3.26/src/tap-bridge/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/tap-bridge/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.263247511 -0700
+++ ns-3.26/src/tap-bridge/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.541388443 -0700
@@ -106,6 +106,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -178,6 +180,10 @@
     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'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
@@ -224,6 +230,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -370,6 +378,8 @@
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3DataRateChecker_methods(root_module, root_module['ns3::DataRateChecker'])
     register_Ns3DataRateValue_methods(root_module, root_module['ns3::DataRateValue'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3FdReader_methods(root_module, root_module['ns3::FdReader'])
@@ -613,6 +623,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2002,23 +2017,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2133,6 +2148,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2154,10 +2174,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2179,6 +2199,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2194,6 +2218,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -2355,6 +2383,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3018,6 +3051,70 @@
                    [param('ns3::DataRate const &', 'value')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -3421,16 +3518,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -3458,35 +3570,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -3873,6 +3980,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/tap-bridge/examples/tap-csma-virtual-machine.py ns-3.26/src/tap-bridge/examples/tap-csma-virtual-machine.py
--- ns-3.25/src/tap-bridge/examples/tap-csma-virtual-machine.py	2016-10-03 20:57:08.266247488 -0700
+++ ns-3.26/src/tap-bridge/examples/tap-csma-virtual-machine.py	2016-10-03 19:49:01.544388421 -0700
@@ -25,6 +25,9 @@
 import ns.tap_bridge
 
 def main(argv):
+
+    ns.core.CommandLine().Parse(argv)
+
     #
     # We are interacting with the outside, real, world.  This means we have to 
     # interact in real-time and therefore we have to use the real-time simulator
diff -Naur ns-3.25/src/tap-bridge/examples/tap-wifi-virtual-machine.py ns-3.26/src/tap-bridge/examples/tap-wifi-virtual-machine.py
--- ns-3.25/src/tap-bridge/examples/tap-wifi-virtual-machine.py	2016-10-03 20:57:08.267247480 -0700
+++ ns-3.26/src/tap-bridge/examples/tap-wifi-virtual-machine.py	2016-10-03 19:49:01.545388413 -0700
@@ -25,6 +25,9 @@
 import ns.wifi
 
 def main(argv):
+
+    ns.core.CommandLine().Parse(argv)
+    
     #
     # We are interacting with the outside, real, world.  This means we have to 
     # interact in real-time and therefore we have to use the real-time simulator
diff -Naur ns-3.25/src/test/adaptive-red-queue-disc-test-suite.cc ns-3.26/src/test/adaptive-red-queue-disc-test-suite.cc
--- ns-3.25/src/test/adaptive-red-queue-disc-test-suite.cc	2016-10-03 20:57:08.273247433 -0700
+++ ns-3.26/src/test/adaptive-red-queue-disc-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,492 +0,0 @@
-/* -*- 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.25/src/test/ns3tc/adaptive-red-queue-disc-test-suite.cc ns-3.26/src/test/ns3tc/adaptive-red-queue-disc-test-suite.cc
--- ns-3.25/src/test/ns3tc/adaptive-red-queue-disc-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/test/ns3tc/adaptive-red-queue-disc-test-suite.cc	2016-10-03 19:49:01.551388368 -0700
@@ -0,0 +1,469 @@
+/* -*- 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/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 ();
+  uint32_t drops = st.unforcedDrop + st.forcedDrop + st.qLimDrop;
+  NS_TEST_EXPECT_MSG_EQ (drops, 0, "There should be zero dropped packets");
+
+
+  // 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 ();
+  drops = st.unforcedDrop + st.forcedDrop + st.qLimDrop;
+  NS_TEST_EXPECT_MSG_NE (drops, 0, "There should be some dropped packets");
+
+
+  // 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 ();
+  drops = st.unforcedDrop + st.forcedDrop + st.qLimDrop;
+  NS_TEST_EXPECT_MSG_EQ (drops, 0, "There should be zero dropped packets");
+
+
+  // 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 ();
+  drops = st.unforcedDrop + st.forcedDrop + st.qLimDrop;
+  NS_TEST_EXPECT_MSG_NE (drops, 0, "There should be some dropped packets");
+
+
+  // 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 ();
+  uint32_t test5 = st.unforcedDrop + st.forcedDrop + st.qLimDrop;
+  NS_TEST_EXPECT_MSG_NE (test5, 0, "There should be some dropped packets");
+
+
+  // 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 ();
+  uint32_t test6 = st.unforcedDrop + st.forcedDrop + st.qLimDrop;
+  NS_TEST_EXPECT_MSG_GT (test6, test5, "Test 6 should have more drops than Test 5");
+
+
+  // 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 ();
+  drops = st.unforcedDrop + st.forcedDrop + st.qLimDrop;
+  NS_TEST_EXPECT_MSG_NE (drops, 0, "There should be some dropped packets");
+  NS_TEST_EXPECT_MSG_GT (st.forcedDrop, st.unforcedDrop, "There should be more packets dropped due to hard mark");
+
+
+  // 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 ();
+  drops = st.unforcedDrop + st.forcedDrop + st.qLimDrop;
+  NS_TEST_EXPECT_MSG_EQ (drops, 0, "There should be zero dropped packets");
+}
+
+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 = 1000;
+  uint32_t    modeSize = 1;             // 1 for packets; pktSize for bytes
+  std::string aredLinkDataRate = "1.5Mbps";
+  std::string aredLinkDelay = "20ms";
+
+  double global_start_time = 0.0;
+  double global_stop_time = 7.0;
+  double sink_start_time = global_start_time;
+  double sink_stop_time = global_stop_time + 3.0;
+  double client_start_time = global_start_time + 1.5;
+  double client_stop_time = global_stop_time - 2.0;
+
+  NodeContainer n0n2;
+  NodeContainer n1n2;
+  NodeContainer n2n3;
+  NodeContainer n3n4;
+  NodeContainer n3n5;
+
+  Ipv4InterfaceContainer i0i2;
+  Ipv4InterfaceContainer i1i2;
+  Ipv4InterfaceContainer i2i3;
+  Ipv4InterfaceContainer i3i4;
+  Ipv4InterfaceContainer i3i5;
+
+  NodeContainer c;
+  c.Create (6);
+  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;
+
+  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 = 25 * 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 (meanPktSize + ipHeader.GetSerializedSize ()));
+  Config::SetDefault ("ns3::RedQueueDisc::TargetDelay", TimeValue (Seconds (0.2)));
+
+  InternetStackHelper internet;
+  internet.Install (c);
+
+  TrafficControlHelper tchPfifo;
+  uint16_t handle = tchPfifo.SetRootQueueDisc ("ns3::PfifoFastQueueDisc");
+  tchPfifo.AddInternalQueues (handle, 3, "ns3::DropTailQueue", "MaxPackets", UintegerValue (1000));
+
+  TrafficControlHelper tchRed;
+  tchRed.SetRootQueueDisc ("ns3::RedQueueDisc", "LinkBandwidth", StringValue (aredLinkDataRate),
+                           "LinkDelay", StringValue (aredLinkDelay));
+
+  PointToPointHelper p2p;
+
+  NetDeviceContainer devn0n2;
+  NetDeviceContainer devn1n2;
+  NetDeviceContainer devn2n3;
+  NetDeviceContainer devn3n4;
+  NetDeviceContainer devn3n5;
+
+  QueueDiscContainer queueDiscs;
+
+  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);
+
+  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 ();
+
+  // 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 (pktSize));
+  clientHelper1.SetAttribute ("DataRate", DataRateValue (DataRate ("100Mbps")));
+
+  // 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 (pktSize));
+  clientHelper2.SetAttribute ("DataRate", DataRateValue (DataRate ("100Mbps")));
+
+  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));
+
+  Simulator::Stop (Seconds (sink_stop_time));
+  Simulator::Run ();
+
+  RedQueueDisc::Stats st = StaticCast<RedQueueDisc> (queueDiscs.Get (0))->GetStats ();
+
+  NS_TEST_EXPECT_MSG_LT (st.unforcedDrop, st.forcedDrop, "forcedDrop should be more than unforcedDrop");
+
+  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.25/src/test/ns3tc/fq-codel-queue-disc-test-suite.cc ns-3.26/src/test/ns3tc/fq-codel-queue-disc-test-suite.cc
--- ns-3.25/src/test/ns3tc/fq-codel-queue-disc-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/test/ns3tc/fq-codel-queue-disc-test-suite.cc	2016-10-03 19:49:01.552388361 -0700
@@ -0,0 +1,504 @@
+/* -*- 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
+ *
+ * Authors: Pasquale Imputato <p.imputato@gmail.com>
+ *          Stefano Avallone <stefano.avallone@unina.it>
+*/
+
+#include "ns3/test.h"
+#include "ns3/simulator.h"
+#include "ns3/fq-codel-queue-disc.h"
+#include "ns3/ipv4-header.h"
+#include "ns3/ipv4-packet-filter.h"
+#include "ns3/ipv4-queue-disc-item.h"
+#include "ns3/ipv4-address.h"
+#include "ns3/ipv6-header.h"
+#include "ns3/ipv6-packet-filter.h"
+#include "ns3/ipv6-queue-disc-item.h"
+#include "ns3/tcp-header.h"
+#include "ns3/udp-header.h"
+#include "ns3/uinteger.h"
+#include "ns3/pointer.h"
+
+using namespace ns3;
+
+/**
+ * This class tests packets for which there is no suitable filter
+ */
+class FqCoDelQueueDiscNoSuitableFilter : public TestCase
+{
+public:
+  FqCoDelQueueDiscNoSuitableFilter ();
+  virtual ~FqCoDelQueueDiscNoSuitableFilter ();
+
+private:
+  virtual void DoRun (void);
+};
+
+FqCoDelQueueDiscNoSuitableFilter::FqCoDelQueueDiscNoSuitableFilter ()
+  : TestCase ("Test packets that are not classified by any filter")
+{
+}
+
+FqCoDelQueueDiscNoSuitableFilter::~FqCoDelQueueDiscNoSuitableFilter ()
+{
+}
+
+void
+FqCoDelQueueDiscNoSuitableFilter::DoRun (void)
+{
+  // Packets that cannot be classified by the available filters should be dropped
+  Ptr<FqCoDelQueueDisc> queueDisc = CreateObjectWithAttributes<FqCoDelQueueDisc> ("PacketLimit", UintegerValue (4));
+  Ptr<FqCoDelIpv4PacketFilter> filter = CreateObject<FqCoDelIpv4PacketFilter> ();
+  queueDisc->AddPacketFilter (filter);
+
+  queueDisc->SetQuantum (1500);
+  queueDisc->Initialize ();
+
+  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->GetNQueueDiscClasses (), 0, "no flow queue should have been created");
+
+  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->GetNQueueDiscClasses (), 0, "no flow queue should have been created");
+
+  Simulator::Destroy ();
+}
+
+/**
+ * This class tests the IP flows separation and the packet limit
+ */
+class FqCoDelQueueDiscIPFlowsSeparationAndPacketLimit : public TestCase
+{
+public:
+  FqCoDelQueueDiscIPFlowsSeparationAndPacketLimit ();
+  virtual ~FqCoDelQueueDiscIPFlowsSeparationAndPacketLimit ();
+
+private:
+  virtual void DoRun (void);
+  void AddPacket (Ptr<FqCoDelQueueDisc> queue, Ipv4Header hdr);
+};
+
+FqCoDelQueueDiscIPFlowsSeparationAndPacketLimit::FqCoDelQueueDiscIPFlowsSeparationAndPacketLimit ()
+  : TestCase ("Test IP flows separation and packet limit")
+{
+}
+
+FqCoDelQueueDiscIPFlowsSeparationAndPacketLimit::~FqCoDelQueueDiscIPFlowsSeparationAndPacketLimit ()
+{
+}
+
+void
+FqCoDelQueueDiscIPFlowsSeparationAndPacketLimit::AddPacket (Ptr<FqCoDelQueueDisc> queue, Ipv4Header hdr)
+{
+  Ptr<Packet> p = Create<Packet> (100);
+  Address dest;
+  Ptr<Ipv4QueueDiscItem> item = Create<Ipv4QueueDiscItem> (p, dest, 0, hdr);
+  queue->Enqueue (item);
+}
+
+void
+FqCoDelQueueDiscIPFlowsSeparationAndPacketLimit::DoRun (void)
+{
+  Ptr<FqCoDelQueueDisc> queueDisc = CreateObjectWithAttributes<FqCoDelQueueDisc> ("PacketLimit", UintegerValue (4));
+  Ptr<FqCoDelIpv6PacketFilter> ipv6Filter = CreateObject<FqCoDelIpv6PacketFilter> ();
+  Ptr<FqCoDelIpv4PacketFilter> ipv4Filter = CreateObject<FqCoDelIpv4PacketFilter> ();
+  queueDisc->AddPacketFilter (ipv6Filter);
+  queueDisc->AddPacketFilter (ipv4Filter);
+
+  queueDisc->SetQuantum (1500);
+  queueDisc->Initialize ();
+
+  Ipv4Header hdr;
+  hdr.SetPayloadSize (100);
+  hdr.SetSource (Ipv4Address ("10.10.1.1"));
+  hdr.SetDestination (Ipv4Address ("10.10.1.2"));
+  hdr.SetProtocol (7);
+
+  // Add three packets from the first flow
+  AddPacket (queueDisc, hdr);
+  AddPacket (queueDisc, hdr);
+  AddPacket (queueDisc, hdr);
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->QueueDisc::GetNPackets (), 3, "unexpected number of packets in the queue disc");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (0)->GetQueueDisc ()->GetNPackets (), 3, "unexpected number of packets in the flow queue");
+
+  // Add two packets from the second flow
+  hdr.SetDestination (Ipv4Address ("10.10.1.7"));
+  // Add the first packet
+  AddPacket (queueDisc, hdr);
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->QueueDisc::GetNPackets (), 4, "unexpected number of packets in the queue disc");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (0)->GetQueueDisc ()->GetNPackets (), 3, "unexpected number of packets in the flow queue");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (1)->GetQueueDisc ()->GetNPackets (), 1, "unexpected number of packets in the flow queue");
+  // Add the second packet that causes two packets to be dropped from the fat flow (max backlog = 300, threshold = 150)
+  AddPacket (queueDisc, hdr);
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->QueueDisc::GetNPackets (), 3, "unexpected number of packets in the queue disc");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (0)->GetQueueDisc ()->GetNPackets (), 1, "unexpected number of packets in the flow queue");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (1)->GetQueueDisc ()->GetNPackets (), 2, "unexpected number of packets in the flow queue");
+
+  Simulator::Destroy ();
+}
+
+/**
+ * This class tests the deficit per flow
+ */
+class FqCoDelQueueDiscDeficit : public TestCase
+{
+public:
+  FqCoDelQueueDiscDeficit ();
+  virtual ~FqCoDelQueueDiscDeficit ();
+
+private:
+  virtual void DoRun (void);
+  void AddPacket (Ptr<FqCoDelQueueDisc> queue, Ipv4Header hdr);
+};
+
+FqCoDelQueueDiscDeficit::FqCoDelQueueDiscDeficit ()
+  : TestCase ("Test credits and flows status")
+{
+}
+
+FqCoDelQueueDiscDeficit::~FqCoDelQueueDiscDeficit ()
+{
+}
+
+void
+FqCoDelQueueDiscDeficit::AddPacket (Ptr<FqCoDelQueueDisc> queue, Ipv4Header hdr)
+{
+  Ptr<Packet> p = Create<Packet> (100);
+  Address dest;
+  Ptr<Ipv4QueueDiscItem> item = Create<Ipv4QueueDiscItem> (p, dest, 0, hdr);
+  queue->Enqueue (item);
+}
+
+void
+FqCoDelQueueDiscDeficit::DoRun (void)
+{
+  Ptr<FqCoDelQueueDisc> queueDisc = CreateObjectWithAttributes<FqCoDelQueueDisc> ();
+  Ptr<FqCoDelIpv6PacketFilter> ipv6Filter = CreateObject<FqCoDelIpv6PacketFilter> ();
+  Ptr<FqCoDelIpv4PacketFilter> ipv4Filter = CreateObject<FqCoDelIpv4PacketFilter> ();
+  queueDisc->AddPacketFilter (ipv6Filter);
+  queueDisc->AddPacketFilter (ipv4Filter);
+
+  queueDisc->SetQuantum (90);
+  queueDisc->Initialize ();
+
+  Ipv4Header hdr;
+  hdr.SetPayloadSize (100);
+  hdr.SetSource (Ipv4Address ("10.10.1.1"));
+  hdr.SetDestination (Ipv4Address ("10.10.1.2"));
+  hdr.SetProtocol (7);
+
+  // Add a packet from the first flow
+  AddPacket (queueDisc, hdr);
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->QueueDisc::GetNPackets (), 1, "unexpected number of packets in the queue disc");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (0)->GetQueueDisc ()->GetNPackets (), 1, "unexpected number of packets in the first flow queue");
+  Ptr<FqCoDelFlow> flow1 = StaticCast<FqCoDelFlow> (queueDisc->GetQueueDiscClass (0));
+  NS_TEST_ASSERT_MSG_EQ (flow1->GetDeficit (), static_cast<int32_t> (queueDisc->GetQuantum ()), "the deficit of the first flow must equal the quantum");
+  NS_TEST_ASSERT_MSG_EQ (flow1->GetStatus (), FqCoDelFlow::NEW_FLOW, "the first flow must be in the list of new queues");
+  // Dequeue a packet
+  queueDisc->Dequeue ();
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->QueueDisc::GetNPackets (), 0, "unexpected number of packets in the queue disc");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (0)->GetQueueDisc ()->GetNPackets (), 0, "unexpected number of packets in the first flow queue");
+  // the deficit for the first flow becomes 90 - (100+20) = -30
+  NS_TEST_ASSERT_MSG_EQ (flow1->GetDeficit (), -30, "unexpected deficit for the first flow");
+
+  // Add two packets from the first flow
+  AddPacket (queueDisc, hdr);
+  AddPacket (queueDisc, hdr);
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->QueueDisc::GetNPackets (), 2, "unexpected number of packets in the queue disc");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (0)->GetQueueDisc ()->GetNPackets (), 2, "unexpected number of packets in the first flow queue");
+  NS_TEST_ASSERT_MSG_EQ (flow1->GetStatus (), FqCoDelFlow::NEW_FLOW, "the first flow must still be in the list of new queues");
+
+  // Add two packets from the second flow
+  hdr.SetDestination (Ipv4Address ("10.10.1.10"));
+  AddPacket (queueDisc, hdr);
+  AddPacket (queueDisc, hdr);
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->QueueDisc::GetNPackets (), 4, "unexpected number of packets in the queue disc");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (0)->GetQueueDisc ()->GetNPackets (), 2, "unexpected number of packets in the first flow queue");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (1)->GetQueueDisc ()->GetNPackets (), 2, "unexpected number of packets in the second flow queue");
+  Ptr<FqCoDelFlow> flow2 = StaticCast<FqCoDelFlow> (queueDisc->GetQueueDiscClass (1));
+  NS_TEST_ASSERT_MSG_EQ (flow2->GetDeficit (), static_cast<int32_t> (queueDisc->GetQuantum ()), "the deficit of the second flow must equal the quantum");
+  NS_TEST_ASSERT_MSG_EQ (flow2->GetStatus (), FqCoDelFlow::NEW_FLOW, "the second flow must be in the list of new queues");
+
+  // Dequeue a packet (from the second flow, as the first flow has a negative deficit)
+  queueDisc->Dequeue ();
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->QueueDisc::GetNPackets (), 3, "unexpected number of packets in the queue disc");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (0)->GetQueueDisc ()->GetNPackets (), 2, "unexpected number of packets in the first flow queue");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (1)->GetQueueDisc ()->GetNPackets (), 1, "unexpected number of packets in the second flow queue");
+  // the first flow got a quantum of deficit (-30+90=60) and has been moved to the end of the list of old queues
+  NS_TEST_ASSERT_MSG_EQ (flow1->GetDeficit (), 60, "unexpected deficit for the first flow");
+  NS_TEST_ASSERT_MSG_EQ (flow1->GetStatus (), FqCoDelFlow::OLD_FLOW, "the first flow must be in the list of old queues");
+  // the second flow has a negative deficit (-30) and is still in the list of new queues
+  NS_TEST_ASSERT_MSG_EQ (flow2->GetDeficit (), -30, "unexpected deficit for the second flow");
+  NS_TEST_ASSERT_MSG_EQ (flow2->GetStatus (), FqCoDelFlow::NEW_FLOW, "the second flow must be in the list of new queues");
+
+  // Dequeue a packet (from the first flow, as the second flow has a negative deficit)
+  queueDisc->Dequeue ();
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->QueueDisc::GetNPackets (), 2, "unexpected number of packets in the queue disc");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (0)->GetQueueDisc ()->GetNPackets (), 1, "unexpected number of packets in the first flow queue");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (1)->GetQueueDisc ()->GetNPackets (), 1, "unexpected number of packets in the second flow queue");
+  // the first flow has a negative deficit (60-(100+20)= -60) and stays in the list of old queues
+  NS_TEST_ASSERT_MSG_EQ (flow1->GetDeficit (), -60, "unexpected deficit for the first flow");
+  NS_TEST_ASSERT_MSG_EQ (flow1->GetStatus (), FqCoDelFlow::OLD_FLOW, "the first flow must be in the list of old queues");
+  // the second flow got a quantum of deficit (-30+90=60) and has been moved to the end of the list of old queues
+  NS_TEST_ASSERT_MSG_EQ (flow2->GetDeficit (), 60, "unexpected deficit for the second flow");
+  NS_TEST_ASSERT_MSG_EQ (flow2->GetStatus (), FqCoDelFlow::OLD_FLOW, "the second flow must be in the list of new queues");
+
+  // Dequeue a packet (from the second flow, as the first flow has a negative deficit)
+  queueDisc->Dequeue ();
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->QueueDisc::GetNPackets (), 1, "unexpected number of packets in the queue disc");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (0)->GetQueueDisc ()->GetNPackets (), 1, "unexpected number of packets in the first flow queue");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (1)->GetQueueDisc ()->GetNPackets (), 0, "unexpected number of packets in the second flow queue");
+  // the first flow got a quantum of deficit (-60+90=30) and has been moved to the end of the list of old queues
+  NS_TEST_ASSERT_MSG_EQ (flow1->GetDeficit (), 30, "unexpected deficit for the first flow");
+  NS_TEST_ASSERT_MSG_EQ (flow1->GetStatus (), FqCoDelFlow::OLD_FLOW, "the first flow must be in the list of old queues");
+  // the second flow has a negative deficit (60-(100+20)= -60)
+  NS_TEST_ASSERT_MSG_EQ (flow2->GetDeficit (), -60, "unexpected deficit for the second flow");
+  NS_TEST_ASSERT_MSG_EQ (flow2->GetStatus (), FqCoDelFlow::OLD_FLOW, "the second flow must be in the list of new queues");
+
+  // Dequeue a packet (from the first flow, as the second flow has a negative deficit)
+  queueDisc->Dequeue ();
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->QueueDisc::GetNPackets (), 0, "unexpected number of packets in the queue disc");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (0)->GetQueueDisc ()->GetNPackets (), 0, "unexpected number of packets in the first flow queue");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (1)->GetQueueDisc ()->GetNPackets (), 0, "unexpected number of packets in the second flow queue");
+  // the first flow has a negative deficit (30-(100+20)= -90)
+  NS_TEST_ASSERT_MSG_EQ (flow1->GetDeficit (), -90, "unexpected deficit for the first flow");
+  NS_TEST_ASSERT_MSG_EQ (flow1->GetStatus (), FqCoDelFlow::OLD_FLOW, "the first flow must be in the list of old queues");
+  // the second flow got a quantum of deficit (-60+90=30) and has been moved to the end of the list of old queues
+  NS_TEST_ASSERT_MSG_EQ (flow2->GetDeficit (), 30, "unexpected deficit for the second flow");
+  NS_TEST_ASSERT_MSG_EQ (flow2->GetStatus (), FqCoDelFlow::OLD_FLOW, "the second flow must be in the list of new queues");
+
+  // Dequeue a packet
+  queueDisc->Dequeue ();
+  // the first flow is at the head of the list of old queues but has a negative deficit, thus it gets a quantun
+  // of deficit (-90+90=0) and is moved to the end of the list of old queues. Then, the second flow (which has a
+  // positive deficit) is selected, but the second flow is empty and thus it is set to inactive. The first flow is
+  // reconsidered, but it has a null deficit, hence it gets another quantum of deficit (0+90=90). Then, the first
+  // flow is reconsidered again, now it has a positive deficit and hence it is selected. But, it is empty and
+  // therefore is set to inactive, too.
+  NS_TEST_ASSERT_MSG_EQ (flow1->GetDeficit (), 90, "unexpected deficit for the first flow");
+  NS_TEST_ASSERT_MSG_EQ (flow1->GetStatus (), FqCoDelFlow::INACTIVE, "the first flow must be inactive");
+  NS_TEST_ASSERT_MSG_EQ (flow2->GetDeficit (), 30, "unexpected deficit for the second flow");
+  NS_TEST_ASSERT_MSG_EQ (flow2->GetStatus (), FqCoDelFlow::INACTIVE, "the second flow must be inactive");
+
+  Simulator::Destroy ();
+}
+
+/**
+ * This class tests the TCP flows separation
+ */
+class FqCoDelQueueDiscTCPFlowsSeparation : public TestCase
+{
+public:
+  FqCoDelQueueDiscTCPFlowsSeparation ();
+  virtual ~FqCoDelQueueDiscTCPFlowsSeparation ();
+
+private:
+  virtual void DoRun (void);
+  void AddPacket (Ptr<FqCoDelQueueDisc> queue, Ipv4Header ipHdr, TcpHeader tcpHdr);
+};
+
+FqCoDelQueueDiscTCPFlowsSeparation::FqCoDelQueueDiscTCPFlowsSeparation ()
+  : TestCase ("Test TCP flows separation")
+{
+}
+
+FqCoDelQueueDiscTCPFlowsSeparation::~FqCoDelQueueDiscTCPFlowsSeparation ()
+{
+}
+
+void
+FqCoDelQueueDiscTCPFlowsSeparation::AddPacket (Ptr<FqCoDelQueueDisc> queue, Ipv4Header ipHdr, TcpHeader tcpHdr)
+{
+  Ptr<Packet> p = Create<Packet> (100);
+  p->AddHeader (tcpHdr);
+  Address dest;
+  Ptr<Ipv4QueueDiscItem> item = Create<Ipv4QueueDiscItem> (p, dest, 0, ipHdr);
+  queue->Enqueue (item);
+}
+
+void
+FqCoDelQueueDiscTCPFlowsSeparation::DoRun (void)
+{
+  Ptr<FqCoDelQueueDisc> queueDisc = CreateObjectWithAttributes<FqCoDelQueueDisc> ("PacketLimit", UintegerValue (10));
+  Ptr<FqCoDelIpv6PacketFilter> ipv6Filter = CreateObject<FqCoDelIpv6PacketFilter> ();
+  Ptr<FqCoDelIpv4PacketFilter> ipv4Filter = CreateObject<FqCoDelIpv4PacketFilter> ();
+  queueDisc->AddPacketFilter (ipv6Filter);
+  queueDisc->AddPacketFilter (ipv4Filter);
+
+  queueDisc->SetQuantum (1500);
+  queueDisc->Initialize ();
+
+  Ipv4Header hdr;
+  hdr.SetPayloadSize (100);
+  hdr.SetSource (Ipv4Address ("10.10.1.1"));
+  hdr.SetDestination (Ipv4Address ("10.10.1.2"));
+  hdr.SetProtocol (6);
+
+  TcpHeader tcpHdr;
+  tcpHdr.SetSourcePort (7);
+  tcpHdr.SetDestinationPort (27);
+
+  // Add three packets from the first flow
+  AddPacket (queueDisc, hdr, tcpHdr);
+  AddPacket (queueDisc, hdr, tcpHdr);
+  AddPacket (queueDisc, hdr, tcpHdr);
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->QueueDisc::GetNPackets (), 3, "unexpected number of packets in the queue disc");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (0)->GetQueueDisc ()->GetNPackets (), 3, "unexpected number of packets in the first flow queue");
+
+  // Add a packet from the second flow
+  tcpHdr.SetSourcePort (8);
+  AddPacket (queueDisc, hdr, tcpHdr);
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->QueueDisc::GetNPackets (), 4, "unexpected number of packets in the queue disc");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (0)->GetQueueDisc ()->GetNPackets (), 3, "unexpected number of packets in the first flow queue");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (1)->GetQueueDisc ()->GetNPackets (), 1, "unexpected number of packets in the second flow queue");
+
+  // Add a packet from the third flow
+  tcpHdr.SetDestinationPort (28);
+  AddPacket (queueDisc, hdr, tcpHdr);
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->QueueDisc::GetNPackets (), 5, "unexpected number of packets in the queue disc");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (0)->GetQueueDisc ()->GetNPackets (), 3, "unexpected number of packets in the first flow queue");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (1)->GetQueueDisc ()->GetNPackets (), 1, "unexpected number of packets in the second flow queue");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (2)->GetQueueDisc ()->GetNPackets (), 1, "unexpected number of packets in the third flow queue");
+
+  // Add two packets from the fourth flow
+  tcpHdr.SetSourcePort (7);
+  AddPacket (queueDisc, hdr, tcpHdr);
+  AddPacket (queueDisc, hdr, tcpHdr);
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->QueueDisc::GetNPackets (), 7, "unexpected number of packets in the queue disc");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (0)->GetQueueDisc ()->GetNPackets (), 3, "unexpected number of packets in the first flow queue");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (1)->GetQueueDisc ()->GetNPackets (), 1, "unexpected number of packets in the second flow queue");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (2)->GetQueueDisc ()->GetNPackets (), 1, "unexpected number of packets in the third flow queue");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (3)->GetQueueDisc ()->GetNPackets (), 2, "unexpected number of packets in the third flow queue");
+
+  Simulator::Destroy ();
+}
+
+/**
+ * This class tests the UDP flows separation
+ */
+class FqCoDelQueueDiscUDPFlowsSeparation : public TestCase
+{
+public:
+  FqCoDelQueueDiscUDPFlowsSeparation ();
+  virtual ~FqCoDelQueueDiscUDPFlowsSeparation ();
+
+private:
+  virtual void DoRun (void);
+  void AddPacket (Ptr<FqCoDelQueueDisc> queue, Ipv4Header ipHdr, UdpHeader udpHdr);
+};
+
+FqCoDelQueueDiscUDPFlowsSeparation::FqCoDelQueueDiscUDPFlowsSeparation ()
+  : TestCase ("Test UDP flows separation")
+{
+}
+
+FqCoDelQueueDiscUDPFlowsSeparation::~FqCoDelQueueDiscUDPFlowsSeparation ()
+{
+}
+
+void
+FqCoDelQueueDiscUDPFlowsSeparation::AddPacket (Ptr<FqCoDelQueueDisc> queue, Ipv4Header ipHdr, UdpHeader udpHdr)
+{
+  Ptr<Packet> p = Create<Packet> (100);
+  p->AddHeader (udpHdr);
+  Address dest;
+  Ptr<Ipv4QueueDiscItem> item = Create<Ipv4QueueDiscItem> (p, dest, 0, ipHdr);
+  queue->Enqueue (item);
+}
+
+void
+FqCoDelQueueDiscUDPFlowsSeparation::DoRun (void)
+{
+  Ptr<FqCoDelQueueDisc> queueDisc = CreateObjectWithAttributes<FqCoDelQueueDisc> ("PacketLimit", UintegerValue (10));
+  Ptr<FqCoDelIpv6PacketFilter> ipv6Filter = CreateObject<FqCoDelIpv6PacketFilter> ();
+  Ptr<FqCoDelIpv4PacketFilter> ipv4Filter = CreateObject<FqCoDelIpv4PacketFilter> ();
+  queueDisc->AddPacketFilter (ipv6Filter);
+  queueDisc->AddPacketFilter (ipv4Filter);
+
+  queueDisc->SetQuantum (1500);
+  queueDisc->Initialize ();
+
+  Ipv4Header hdr;
+  hdr.SetPayloadSize (100);
+  hdr.SetSource (Ipv4Address ("10.10.1.1"));
+  hdr.SetDestination (Ipv4Address ("10.10.1.2"));
+  hdr.SetProtocol (17);
+
+  UdpHeader udpHdr;
+  udpHdr.SetSourcePort (7);
+  udpHdr.SetDestinationPort (27);
+
+  // Add three packets from the first flow
+  AddPacket (queueDisc, hdr, udpHdr);
+  AddPacket (queueDisc, hdr, udpHdr);
+  AddPacket (queueDisc, hdr, udpHdr);
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->QueueDisc::GetNPackets (), 3, "unexpected number of packets in the queue disc");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (0)->GetQueueDisc ()->GetNPackets (), 3, "unexpected number of packets in the first flow queue");
+
+  // Add a packet from the second flow
+  udpHdr.SetSourcePort (8);
+  AddPacket (queueDisc, hdr, udpHdr);
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->QueueDisc::GetNPackets (), 4, "unexpected number of packets in the queue disc");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (0)->GetQueueDisc ()->GetNPackets (), 3, "unexpected number of packets in the first flow queue");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (1)->GetQueueDisc ()->GetNPackets (), 1, "unexpected number of packets in the second flow queue");
+
+  // Add a packet from the third flow
+  udpHdr.SetDestinationPort (28);
+  AddPacket (queueDisc, hdr, udpHdr);
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->QueueDisc::GetNPackets (), 5, "unexpected number of packets in the queue disc");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (0)->GetQueueDisc ()->GetNPackets (), 3, "unexpected number of packets in the first flow queue");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (1)->GetQueueDisc ()->GetNPackets (), 1, "unexpected number of packets in the second flow queue");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (2)->GetQueueDisc ()->GetNPackets (), 1, "unexpected number of packets in the third flow queue");
+
+  // Add two packets from the fourth flow
+  udpHdr.SetSourcePort (7);
+  AddPacket (queueDisc, hdr, udpHdr);
+  AddPacket (queueDisc, hdr, udpHdr);
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->QueueDisc::GetNPackets (), 7, "unexpected number of packets in the queue disc");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (0)->GetQueueDisc ()->GetNPackets (), 3, "unexpected number of packets in the first flow queue");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (1)->GetQueueDisc ()->GetNPackets (), 1, "unexpected number of packets in the second flow queue");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (2)->GetQueueDisc ()->GetNPackets (), 1, "unexpected number of packets in the third flow queue");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetQueueDiscClass (3)->GetQueueDisc ()->GetNPackets (), 2, "unexpected number of packets in the third flow queue");
+
+  Simulator::Destroy ();
+}
+
+class FqCoDelQueueDiscTestSuite : public TestSuite
+{
+public:
+  FqCoDelQueueDiscTestSuite ();
+};
+
+FqCoDelQueueDiscTestSuite::FqCoDelQueueDiscTestSuite ()
+  : TestSuite ("fq-codel-queue-disc", UNIT)
+{
+  AddTestCase (new FqCoDelQueueDiscNoSuitableFilter, TestCase::QUICK);
+  AddTestCase (new FqCoDelQueueDiscIPFlowsSeparationAndPacketLimit, TestCase::QUICK);
+  AddTestCase (new FqCoDelQueueDiscDeficit, TestCase::QUICK);
+  AddTestCase (new FqCoDelQueueDiscTCPFlowsSeparation, TestCase::QUICK);
+  AddTestCase (new FqCoDelQueueDiscUDPFlowsSeparation, TestCase::QUICK);
+}
+
+static FqCoDelQueueDiscTestSuite fqCoDelQueueDiscTestSuite;
diff -Naur ns-3.25/src/test/ns3tc/pfifo-fast-queue-disc-test-suite.cc ns-3.26/src/test/ns3tc/pfifo-fast-queue-disc-test-suite.cc
--- ns-3.25/src/test/ns3tc/pfifo-fast-queue-disc-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/test/ns3tc/pfifo-fast-queue-disc-test-suite.cc	2016-10-03 19:49:01.552388361 -0700
@@ -0,0 +1,339 @@
+/* -*- 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/enum.h"
+#include "ns3/uinteger.h"
+#include "ns3/pointer.h"
+#include "ns3/object-factory.h"
+#include "ns3/socket.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);
+  void TestTosValue (Ptr<PfifoFastQueueDisc> queue, uint8_t tos, uint32_t band);
+};
+
+PfifoFastQueueDiscTosPrioritization::PfifoFastQueueDiscTosPrioritization ()
+  : TestCase ("Test TOS-based prioritization")
+{
+}
+
+PfifoFastQueueDiscTosPrioritization::~PfifoFastQueueDiscTosPrioritization ()
+{
+}
+
+void
+PfifoFastQueueDiscTosPrioritization::TestTosValue (Ptr<PfifoFastQueueDisc> queue, uint8_t tos, uint32_t band)
+{
+  Ptr<Packet> p = Create<Packet> (100);
+  Ipv4Header ipHeader;
+  ipHeader.SetPayloadSize (100);
+  ipHeader.SetTos (tos);
+  ipHeader.SetProtocol (6);
+  SocketPriorityTag priorityTag;
+  priorityTag.SetPriority (Socket::IpTos2Priority (tos));
+  p->AddPacketTag (priorityTag);
+  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> ();
+  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");
+
+                                      // Service name       priority         band
+  TestTosValue (queueDisc, 0x00, 1);  // Normal service  -> Best Effort (0) -> 1
+  TestTosValue (queueDisc, 0x02, 1);  // MMC             -> Best Effort (0) -> 1
+  TestTosValue (queueDisc, 0x04, 1);  // MR              -> Best Effort (0) -> 1
+  TestTosValue (queueDisc, 0x06, 1);  // MMC+MR          -> Best Effort (0) -> 1
+  TestTosValue (queueDisc, 0x08, 2);  // Max. Throughput -> Bulk (2)        -> 2
+  TestTosValue (queueDisc, 0x0a, 2);  // MMC+MT          -> Bulk (2)        -> 2
+  TestTosValue (queueDisc, 0x0c, 2);  // MR+MT           -> Bulk (2)        -> 2
+  TestTosValue (queueDisc, 0x0e, 2);  // MMC+MR+MT       -> Bulk (2)        -> 2
+  TestTosValue (queueDisc, 0x10, 0);  // Minimize Delay  -> Interactive (6) -> 0
+  TestTosValue (queueDisc, 0x12, 0);  // MMC+MD          -> Interactive (6) -> 0
+  TestTosValue (queueDisc, 0x14, 0);  // MR+MD           -> Interactive (6) -> 0
+  TestTosValue (queueDisc, 0x16, 0);  // MMC+MR+MD       -> Interactive (6) -> 0
+  TestTosValue (queueDisc, 0x18, 1);  // MT+MD           -> Int. Bulk (4)   -> 1
+  TestTosValue (queueDisc, 0x1a, 1);  // MMC+MT+MD       -> Int. Bulk (4)   -> 1
+  TestTosValue (queueDisc, 0x1c, 1);  // MR+MT+MD        -> Int. Bulk (4)   -> 1
+  TestTosValue (queueDisc, 0x1e, 1);  // MMC+MR+MT+MD    -> Int. Bulk (4)   -> 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);
+  void TestDscpValue (Ptr<PfifoFastQueueDisc> queue, Ipv4Header::DscpType dscp, uint32_t band);
+};
+
+PfifoFastQueueDiscDscpPrioritization::PfifoFastQueueDiscDscpPrioritization ()
+  : TestCase ("Test DSCP-based prioritization")
+{
+}
+
+PfifoFastQueueDiscDscpPrioritization::~PfifoFastQueueDiscDscpPrioritization ()
+{
+}
+
+void
+PfifoFastQueueDiscDscpPrioritization::TestDscpValue (Ptr<PfifoFastQueueDisc> queue, Ipv4Header::DscpType dscp, uint32_t band)
+{
+  Ptr<Packet> p = Create<Packet> (100);
+  Ipv4Header ipHeader;
+  ipHeader.SetPayloadSize (100);
+  ipHeader.SetProtocol (6);
+  ipHeader.SetDscp (dscp);
+  SocketPriorityTag priorityTag;
+  priorityTag.SetPriority (Socket::IpTos2Priority (ipHeader.GetTos ()));
+  p->AddPacketTag (priorityTag);
+  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> ();
+  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");
+
+                                                          // priority         band
+  TestDscpValue (queueDisc, Ipv4Header::DscpDefault, 1);  // Best Effort (0) -> 1
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_EF, 1);      // Int. Bulk (4)   -> 1
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF11, 2);    // Bulk (2)        -> 2
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF21, 2);    // Bulk (2)        -> 2
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF31, 2);    // Bulk (2)        -> 2
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF41, 2);    // Bulk (2)        -> 2
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF12, 0);    // Interactive (6) -> 0
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF22, 0);    // Interactive (6) -> 0
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF32, 0);    // Interactive (6) -> 0
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF42, 0);    // Interactive (6) -> 0
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF13, 1);    // Int. Bulk (4)   -> 1
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF23, 1);    // Int. Bulk (4)   -> 1
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF33, 1);    // Int. Bulk (4)   -> 1
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF43, 1);    // Int. Bulk (4)   -> 1
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_CS1, 1);     // Best Effort (0) -> 1
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_CS2, 1);     // Best Effort (0) -> 1
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_CS3, 1);     // Best Effort (0) -> 1
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_CS4, 1);     // Best Effort (0) -> 1
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_CS5, 1);     // Best Effort (0) -> 1
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_CS6, 1);     // Best Effort (0) -> 1
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_CS7, 1);     // Best Effort (0) -> 1
+}
+
+/**
+ * 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);
+  SocketPriorityTag priorityTag;
+  priorityTag.SetPriority (Socket::IpTos2Priority (ipHeader.GetTos ()));
+  p->AddPacketTag (priorityTag);
+  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);
+
+  // 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 packets without a priority tag are handled by placing
+ * them into band 1
+ */
+class PfifoFastQueueDiscNoPriority : public TestCase
+{
+public:
+  PfifoFastQueueDiscNoPriority ();
+  virtual ~PfifoFastQueueDiscNoPriority ();
+
+private:
+  virtual void DoRun (void);
+};
+
+PfifoFastQueueDiscNoPriority::PfifoFastQueueDiscNoPriority ()
+  : TestCase ("Test queue with no priority tag")
+{
+}
+
+PfifoFastQueueDiscNoPriority::~PfifoFastQueueDiscNoPriority ()
+{
+}
+
+void
+PfifoFastQueueDiscNoPriority::DoRun (void)
+{
+  // all packets with non-IP headers should enqueue in band 1
+  Ptr<PfifoFastQueueDisc> queueDisc = CreateObject<PfifoFastQueueDisc> ();
+  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 PfifoFastQueueDiscNoPriority, TestCase::QUICK);
+}
+
+static PfifoFastQueueDiscTestSuite pfifoFastQueueTestSuite;
diff -Naur ns-3.25/src/test/ns3tc/pie-queue-disc-test-suite.cc ns-3.26/src/test/ns3tc/pie-queue-disc-test-suite.cc
--- ns-3.25/src/test/ns3tc/pie-queue-disc-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/test/ns3tc/pie-queue-disc-test-suite.cc	2016-10-03 19:49:01.553388353 -0700
@@ -0,0 +1,356 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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
+ *
+ * Authors: Shravya Ks <shravya.ks0@gmail.com>
+ *          Smriti Murali <m.smriti.95@gmail.com>
+ *          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/traffic-control-module.h"
+
+using namespace ns3;
+
+class PieQueueDiscTestItem : public QueueDiscItem
+{
+public:
+  PieQueueDiscTestItem (Ptr<Packet> p, const Address & addr, uint16_t protocol);
+  virtual ~PieQueueDiscTestItem ();
+  virtual void AddHeader (void);
+
+private:
+  PieQueueDiscTestItem ();
+  PieQueueDiscTestItem (const PieQueueDiscTestItem &);
+  PieQueueDiscTestItem &operator = (const PieQueueDiscTestItem &);
+};
+
+PieQueueDiscTestItem::PieQueueDiscTestItem (Ptr<Packet> p, const Address & addr, uint16_t protocol)
+  : QueueDiscItem (p, addr, protocol)
+{
+}
+
+PieQueueDiscTestItem::~PieQueueDiscTestItem ()
+{
+}
+
+void
+PieQueueDiscTestItem::AddHeader (void)
+{
+}
+
+class PieQueueDiscTestCase : public TestCase
+{
+public:
+  PieQueueDiscTestCase ();
+  virtual void DoRun (void);
+private:
+  void Enqueue (Ptr<PieQueueDisc> queue, uint32_t size, uint32_t nPkt);
+  void RunPieTest (StringValue mode);
+};
+
+PieQueueDiscTestCase::PieQueueDiscTestCase ()
+  : TestCase ("Sanity check on the pie queue implementation")
+{
+}
+
+void
+PieQueueDiscTestCase::RunPieTest (StringValue mode)
+{
+  uint32_t pktSize = 0;
+  // 1 for packets; pktSize for bytes
+  uint32_t modeSize = 1;
+  uint32_t qSize = 8;
+  Ptr<PieQueueDisc> queue = CreateObject<PieQueueDisc> ();
+
+  // 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 ("QueueLimit", UintegerValue (qSize)), true,
+                         "Verify that we can actually set the attribute QueueLimit");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("A", DoubleValue (0.125)), true,
+                         "Verify that we can actually set the attribute A");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("B", DoubleValue (1.25)), true,
+                         "Verify that we can actually set the attribute B");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Tupdate", TimeValue (Seconds (0.03))), true,
+                         "Verify that we can actually set the attribute Tupdate");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Supdate", TimeValue (Seconds (0.0))), true,
+                         "Verify that we can actually set the attribute Supdate");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("DequeueThreshold", UintegerValue (10000)), true,
+                         "Verify that we can actually set the attribute DequeueThreshold");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueDelayReference", TimeValue (Seconds (0.02))), true,
+                         "Verify that we can actually set the attribute QueueDelayReference");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxBurstAllowance", TimeValue (Seconds (0.1))), true,
+                         "Verify that we can actually set the attribute MaxBurstAllowance");
+
+  Address dest;
+
+  if (queue->GetMode () == Queue::QUEUE_MODE_BYTES)
+    {
+      pktSize = 1000;
+      modeSize = pktSize;
+      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<PieQueueDiscTestItem> (p1, dest, 0));
+  NS_TEST_EXPECT_MSG_EQ (queue->GetQueueSize (), 1 * modeSize, "There should be one packet in there");
+  queue->Enqueue (Create<PieQueueDiscTestItem> (p2, dest, 0));
+  NS_TEST_EXPECT_MSG_EQ (queue->GetQueueSize (), 2 * modeSize, "There should be two packets in there");
+  queue->Enqueue (Create<PieQueueDiscTestItem> (p3, dest, 0));
+  queue->Enqueue (Create<PieQueueDiscTestItem> (p4, dest, 0));
+  queue->Enqueue (Create<PieQueueDiscTestItem> (p5, dest, 0));
+  queue->Enqueue (Create<PieQueueDiscTestItem> (p6, dest, 0));
+  queue->Enqueue (Create<PieQueueDiscTestItem> (p7, dest, 0));
+  queue->Enqueue (Create<PieQueueDiscTestItem> (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: test in a simple dumbbell topology
+  pktSize = 1000;
+  std::string pieLinkDataRate = "1.5Mbps";
+  std::string pieLinkDelay = "20ms";
+
+  double global_start_time = 0.0;
+  double global_stop_time = 7.0;
+  double sink_start_time = global_start_time;
+  double sink_stop_time = global_stop_time + 3.0;
+  double client_start_time = global_start_time + 1.5;
+  double client_stop_time = global_stop_time - 2.0;
+
+  NodeContainer n0n2;
+  NodeContainer n1n2;
+  NodeContainer n2n3;
+  NodeContainer n3n4;
+  NodeContainer n3n5;
+
+  Ipv4InterfaceContainer i0i2;
+  Ipv4InterfaceContainer i1i2;
+  Ipv4InterfaceContainer i2i3;
+  Ipv4InterfaceContainer i3i4;
+  Ipv4InterfaceContainer i3i5;
+
+  NodeContainer c;
+  c.Create (6);
+  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;
+
+  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 ();
+    }
+
+  qSize = 100 * modeSize;
+
+  // PIE params
+  Config::SetDefault ("ns3::PieQueueDisc::Mode", StringValue (mode));
+  Config::SetDefault ("ns3::PieQueueDisc::MeanPktSize", UintegerValue (meanPktSize + ipHeader.GetSerializedSize ()));
+  Config::SetDefault ("ns3::PieQueueDisc::DequeueThreshold", UintegerValue (10000));
+  Config::SetDefault ("ns3::PieQueueDisc::QueueDelayReference", TimeValue (Seconds (0.02)));
+  Config::SetDefault ("ns3::PieQueueDisc::MaxBurstAllowance", TimeValue (Seconds (0.1)));
+  Config::SetDefault ("ns3::PieQueueDisc::QueueLimit", UintegerValue (qSize));
+
+  InternetStackHelper internet;
+  internet.Install (c);
+
+  TrafficControlHelper tchPfifo;
+  uint16_t handle = tchPfifo.SetRootQueueDisc ("ns3::PfifoFastQueueDisc");
+  tchPfifo.AddInternalQueues (handle, 3, "ns3::DropTailQueue", "MaxPackets", UintegerValue (1000));
+
+  TrafficControlHelper tchPie;
+  tchPie.SetRootQueueDisc ("ns3::PieQueueDisc");
+
+  PointToPointHelper p2p;
+
+  NetDeviceContainer devn0n2;
+  NetDeviceContainer devn1n2;
+  NetDeviceContainer devn2n3;
+  NetDeviceContainer devn3n4;
+  NetDeviceContainer devn3n5;
+
+  QueueDiscContainer queueDiscs;
+
+  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 (pieLinkDataRate));
+  p2p.SetChannelAttribute ("Delay", StringValue (pieLinkDelay));
+  devn2n3 = p2p.Install (n2n3);
+  // only backbone link has PIE queue disc
+  queueDiscs = tchPie.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);
+
+  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 ();
+
+  // 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 (pktSize));
+  clientHelper1.SetAttribute ("DataRate", DataRateValue (DataRate ("100Mbps")));
+
+  // 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 (pktSize));
+  clientHelper2.SetAttribute ("DataRate", DataRateValue (DataRate ("100Mbps")));
+
+  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));
+
+  Simulator::Stop (Seconds (sink_stop_time));
+  Simulator::Run ();
+
+  PieQueueDisc::Stats st = StaticCast<PieQueueDisc> (queueDiscs.Get (0))->GetStats ();
+
+  NS_TEST_EXPECT_MSG_NE (st.unforcedDrop, 0, "There should be some packets dropped due to prob mark");
+  NS_TEST_EXPECT_MSG_EQ (st.forcedDrop, 0, "There should be zero packets dropped due to queue limit");
+
+  Simulator::Destroy ();
+}
+
+void
+PieQueueDiscTestCase::DoRun (void)
+{
+  RunPieTest (StringValue ("QUEUE_MODE_PACKETS"));
+  RunPieTest (StringValue ("QUEUE_MODE_BYTES"));
+  Simulator::Destroy ();
+}
+
+static class PieQueueDiscTestSuite : public TestSuite
+{
+public:
+  PieQueueDiscTestSuite ()
+    : TestSuite ("pie-queue-disc", UNIT)
+  {
+    AddTestCase (new PieQueueDiscTestCase (), TestCase::QUICK);
+  }
+} g_pieQueueTestSuite;
diff -Naur ns-3.25/src/test/ns3tcp/ns3tcp-interop-test-suite.cc ns-3.26/src/test/ns3tcp/ns3tcp-interop-test-suite.cc
--- ns-3.25/src/test/ns3tcp/ns3tcp-interop-test-suite.cc	2016-10-03 20:57:08.276247410 -0700
+++ ns-3.26/src/test/ns3tcp/ns3tcp-interop-test-suite.cc	2016-10-03 19:49:01.554388346 -0700
@@ -38,7 +38,17 @@
 
 NS_LOG_COMPONENT_DEFINE ("Ns3TcpInteropTest");
 
+// The below boolean constants should only be changed to 'true'       
+// during test debugging (i.e. do not commit the value 'true')
+
+// set to 'true' to have the test suite overwrite the response vectors
+// stored in the test directory.  This should only be done if you are
+// convinced through other means (e.g. pcap tracing or logging) that the
+// revised vectors are the correct ones.  In other words, don't simply
+// enable this to true to clear a failing test without looking at the
+// results closely.
 const bool WRITE_VECTORS = false;           // set to true to write response vectors
+const bool WRITE_PCAP = false;              // set to true to write out pcap
 const uint32_t PCAP_LINK_TYPE = 1187373553; // Some large random number -- we use to verify data was written by this program
 const uint32_t PCAP_SNAPLEN   = 64;         // Don't bother to save much data
 
@@ -94,10 +104,11 @@
   std::string m_pcapFilename;
   PcapFile m_pcapFile;
   bool m_writeVectors;
+  bool m_writeResults;
 };
 
 Ns3TcpInteroperabilityTestCase::Ns3TcpInteroperabilityTestCase ()
-  : TestCase ("Check to see that the ns-3 TCP can work with liblinux2.6.26.so"), m_writeVectors (WRITE_VECTORS)
+  : TestCase ("Check to see that the ns-3 TCP can work with liblinux2.6.26.so"), m_writeVectors (WRITE_VECTORS), m_writeResults (WRITE_PCAP)
 {
 }
 
@@ -286,9 +297,9 @@
   // will be checked during the actual execution of the test.
   //
 
-  if (m_writeVectors)
+  if (m_writeResults)
     {
-      pointToPoint.EnablePcapAll ("tcp-interop");
+      pointToPoint.EnablePcapAll ("ns3-tcp-interop");
     }
 
   Simulator::Stop (Seconds (20));
diff -Naur ns-3.25/src/test/ns3tcp/ns3tcp-loss-test-suite.cc ns-3.26/src/test/ns3tcp/ns3tcp-loss-test-suite.cc
--- ns-3.25/src/test/ns3tcp/ns3tcp-loss-test-suite.cc	2016-10-03 20:57:08.277247402 -0700
+++ ns-3.26/src/test/ns3tcp/ns3tcp-loss-test-suite.cc	2016-10-03 19:49:01.555388338 -0700
@@ -44,7 +44,17 @@
 
 NS_LOG_COMPONENT_DEFINE ("Ns3TcpLossTest");
 
+// The below boolean constants should only be changed to 'true'
+// during test debugging (i.e. do not commit the value 'true')
+
+// set to 'true' to have the test suite overwrite the response vectors
+// stored in the test directory.  This should only be done if you are
+// convinced through other means (e.g. pcap tracing or logging) that the
+// revised vectors are the correct ones.  In other words, don't simply
+// enable this to true to clear a failing test without looking at the
+// results closely.
 const bool WRITE_VECTORS = false;            // set to true to write response vectors
+const bool WRITE_PCAP = false;              // set to true to write out pcap
 const bool WRITE_LOGGING = false;            // set to true to write logging
 const uint32_t PCAP_LINK_TYPE = 1187373557; // Some large random number -- we use to verify data was written by this program
 const uint32_t PCAP_SNAPLEN   = 64;         // Don't bother to save much data
@@ -93,7 +103,7 @@
     m_totalTxBytes (200000),
     m_currentTxBytes (0),
     m_writeVectors (WRITE_VECTORS),
-    m_writeResults (false),
+    m_writeResults (WRITE_PCAP),
     m_writeLogging (WRITE_LOGGING),
     m_needToClose (true),
     m_tcpModel ("ns3::TcpWestwood")
@@ -106,7 +116,7 @@
     m_totalTxBytes (200000),
     m_currentTxBytes (0),
     m_writeVectors (WRITE_VECTORS),
-    m_writeResults (false),
+    m_writeResults (WRITE_PCAP),
     m_writeLogging (WRITE_LOGGING),
     m_needToClose (true),
     m_tcpModel (tcpModel)
diff -Naur ns-3.25/src/test/ns3tcp/ns3tcp-state-test-suite.cc ns-3.26/src/test/ns3tcp/ns3tcp-state-test-suite.cc
--- ns-3.25/src/test/ns3tcp/ns3tcp-state-test-suite.cc	2016-10-03 20:57:08.279247386 -0700
+++ ns-3.26/src/test/ns3tcp/ns3tcp-state-test-suite.cc	2016-10-03 19:49:01.557388324 -0700
@@ -46,7 +46,17 @@
 
 NS_LOG_COMPONENT_DEFINE ("Ns3TcpStateTest");
 
+// The below boolean constants should only be changed to 'true' 
+// during test debugging (i.e. do not commit the value 'true')
+
+// set to 'true' to have the test suite overwrite the response vectors
+// stored in the test directory.  This should only be done if you are
+// convinced through other means (e.g. pcap tracing or logging) that the
+// revised vectors are the correct ones.  In other words, don't simply
+// enable this to true to clear a failing test without looking at the
+// results closely.  
 const bool WRITE_VECTORS = false;           // set to true to write response vectors
+const bool WRITE_PCAP = false;              // set to true to write out pcap
 const bool WRITE_LOGGING = false;           // set to true to write logging
 const uint32_t PCAP_LINK_TYPE = 1187373554; // Some large random number -- we use to verify data was written by this program
 const uint32_t PCAP_SNAPLEN   = 64;         // Don't bother to save much data
@@ -92,7 +102,7 @@
     m_totalTxBytes (20000),
     m_currentTxBytes (0),
     m_writeVectors (WRITE_VECTORS),
-    m_writeResults (false),
+    m_writeResults (WRITE_PCAP),
     m_writeLogging (WRITE_LOGGING),
     m_needToClose (true)
 {
@@ -104,7 +114,7 @@
     m_totalTxBytes (20000),
     m_currentTxBytes (0),
     m_writeVectors (WRITE_VECTORS),
-    m_writeResults (false),
+    m_writeResults (WRITE_PCAP),
     m_writeLogging (WRITE_LOGGING),
     m_needToClose (true)
 {
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-interop-response-vectors.pcap ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-interop-response-vectors.pcap
--- ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-interop-response-vectors.pcap	2016-10-03 20:57:08.280247379 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-interop-response-vectors.pcap	2016-10-03 19:49:01.558388316 -0700
@@ -1,5 +1,5 @@
-ò          @   F   3  $   $   ^    g'     
-            Y+          ^   i'     
+ò          @   F   3  $   $   ^    g'    
+            Y+          ^   i'     
          l          ^   m3     
          l          ^   q3     
          l         ^   u3     
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno0-response-vectors.pcap ns-3.26/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	2016-10-03 20:57:08.281247371 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno0-response-vectors.pcap	2016-10-03 19:49:01.559388309 -0700
@@ -1,4 +1,4 @@
-ò          @   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
+ò          @   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                                                    @
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno1-response-vectors.pcap ns-3.26/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	2016-10-03 20:57:08.281247371 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno1-response-vectors.pcap	2016-10-03 19:49:01.559388309 -0700
@@ -1,4 +1,4 @@
-ò          @   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
+ò          @   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                                                    
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno2-response-vectors.pcap ns-3.26/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	2016-10-03 20:57:08.282247363 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno2-response-vectors.pcap	2016-10-03 19:49:01.560388301 -0700
@@ -1,4 +1,4 @@
-ò          @   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                                                    ݠ
+ò          @   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                                                    
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno3-response-vectors.pcap ns-3.26/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	2016-10-03 20:57:08.283247355 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno3-response-vectors.pcap	2016-10-03 19:49:01.561388294 -0700
@@ -1,4 +1,4 @@
-ò          @   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                                                    
+ò          @   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
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno4-response-vectors.pcap ns-3.26/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	2016-10-03 20:57:08.284247347 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno4-response-vectors.pcap	2016-10-03 19:49:01.562388286 -0700
@@ -1,4 +1,4 @@
-ò          @   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
+ò          @   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                                                    ]	
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood0-response-vectors.pcap ns-3.26/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	2016-10-03 20:57:08.284247347 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood0-response-vectors.pcap	2016-10-03 19:49:01.563388279 -0700
@@ -1,4 +1,4 @@
-ò          @   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
+ò          @   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                                                    @
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood1-response-vectors.pcap ns-3.26/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	2016-10-03 20:57:08.285247340 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood1-response-vectors.pcap	2016-10-03 19:49:01.563388279 -0700
@@ -1,4 +1,4 @@
-ò          @   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                                                    ݠ
+ò          @   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
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood2-response-vectors.pcap ns-3.26/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	2016-10-03 20:57:08.285247340 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood2-response-vectors.pcap	2016-10-03 19:49:01.564388271 -0700
@@ -1,4 +1,4 @@
-ò          @   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
+ò          @   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
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood3-response-vectors.pcap ns-3.26/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	2016-10-03 20:57:08.286247332 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood3-response-vectors.pcap	2016-10-03 19:49:01.565388264 -0700
@@ -1,4 +1,4 @@
-ò          @   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
+ò          @   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
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood4-response-vectors.pcap ns-3.26/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	2016-10-03 20:57:08.287247324 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood4-response-vectors.pcap	2016-10-03 19:49:01.565388264 -0700
@@ -1,4 +1,4 @@
-ò          @   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
+ò          @   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
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus0-response-vectors.pcap ns-3.26/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	2016-10-03 20:57:08.287247324 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus0-response-vectors.pcap	2016-10-03 19:49:01.566388257 -0700
@@ -1,4 +1,4 @@
-ò          @   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
+ò          @   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                                                    @
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus1-response-vectors.pcap ns-3.26/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	2016-10-03 20:57:08.288247316 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus1-response-vectors.pcap	2016-10-03 19:49:01.566388257 -0700
@@ -1,4 +1,4 @@
-ò          @   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                                                    ݠ
+ò          @   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
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus2-response-vectors.pcap ns-3.26/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	2016-10-03 20:57:08.288247316 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus2-response-vectors.pcap	2016-10-03 19:49:01.567388249 -0700
@@ -1,4 +1,4 @@
-ò          @   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
+ò          @   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
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus3-response-vectors.pcap ns-3.26/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	2016-10-03 20:57:08.289247308 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus3-response-vectors.pcap	2016-10-03 19:49:01.568388242 -0700
@@ -1,4 +1,4 @@
-ò          @   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
+ò          @   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
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus4-response-vectors.pcap ns-3.26/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	2016-10-03 20:57:08.289247308 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus4-response-vectors.pcap	2016-10-03 19:49:01.568388242 -0700
@@ -1,4 +1,4 @@
-ò          @   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
+ò          @   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
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state0-response-vectors.pcap ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-state0-response-vectors.pcap
--- ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state0-response-vectors.pcap	2016-10-03 20:57:08.290247301 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-state0-response-vectors.pcap	2016-10-03 19:49:01.569388234 -0700
@@ -1 +1 @@
-ò          @   F              P        `          O        P      P         O  @     P      P                                                     ?O        P     P     
\ No newline at end of file
+ò          @   F              P        `         O        P      P         O  @     P      P                                                     ?O        P     P     
\ No newline at end of file
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state1-response-vectors.pcap ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-state1-response-vectors.pcap
--- ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state1-response-vectors.pcap	2016-10-03 20:57:08.290247301 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-state1-response-vectors.pcap	2016-10-03 19:49:01.569388234 -0700
@@ -1 +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                                                     /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
+ò          @   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.25/src/test/ns3tcp/response-vectors/ns3tcp-state2-response-vectors.pcap ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-state2-response-vectors.pcap
--- ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state2-response-vectors.pcap	2016-10-03 20:57:08.291247293 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-state2-response-vectors.pcap	2016-10-03 19:49:01.570388227 -0700
@@ -1 +1 @@
-ò          @   F              P        `                   P        `         O        P      P        O  @     P      P                                                    ?O        P     P     
\ No newline at end of file
+ò          @   F              P        `                  P        `        O        P      P        O  @     P      P                                                    ?O        P     P     
\ No newline at end of file
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state3-response-vectors.pcap ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-state3-response-vectors.pcap
--- ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state3-response-vectors.pcap	2016-10-03 20:57:08.291247293 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-state3-response-vectors.pcap	2016-10-03 19:49:01.570388227 -0700
@@ -1 +1 @@
-ò          @   F              P        `                   P        `         O        P      P        O  @     P      P                                                    M  @     P     P                                                            P     P     
\ No newline at end of file
+ò          @   F              P        `                  P        `        O        P      P        O  @     P      P                                                    M  @     P     P                                                            P     P     
\ No newline at end of file
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state4-response-vectors.pcap ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-state4-response-vectors.pcap
--- ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state4-response-vectors.pcap	2016-10-03 20:57:08.291247293 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-state4-response-vectors.pcap	2016-10-03 19:49:01.570388227 -0700
@@ -1 +1 @@
-ò          @   F              P        `          O        P      P         O  @     P      P                                                     M  @     P     P                                                             P     P     
\ No newline at end of file
+ò          @   F              P        `         O        P      P         O  @     P      P                                                     M  @     P     P                                                             P     P     
\ No newline at end of file
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state5-response-vectors.pcap ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-state5-response-vectors.pcap
--- ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state5-response-vectors.pcap	2016-10-03 20:57:08.291247293 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-state5-response-vectors.pcap	2016-10-03 19:49:01.570388227 -0700
@@ -1 +1 @@
-ò          @   F              P        `          O        P      P                 P      P         o        P      P     
\ No newline at end of file
+ò          @   F              P        `         O        P      P                 P      P         o        P      P     
\ No newline at end of file
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state6-response-vectors.pcap ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-state6-response-vectors.pcap
--- ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state6-response-vectors.pcap	2016-10-03 20:57:08.292247285 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-state6-response-vectors.pcap	2016-10-03 19:49:01.571388219 -0700
@@ -1 +1 @@
-ò          @   F              P        `          O        P      P         O  @     P      P                                                     M  @     P     P                                                     M  @     P     P                                                     ?  @     P     P                                                     ?  @     P     P                                                     o        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                                                     o        P     P     
\ No newline at end of file
diff -Naur ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state7-response-vectors.pcap ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-state7-response-vectors.pcap
--- ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state7-response-vectors.pcap	2016-10-03 20:57:08.292247285 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-state7-response-vectors.pcap	2016-10-03 19:49:01.571388219 -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.25/src/test/ns3tcp/response-vectors/ns3tcp-state8-response-vectors.pcap ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-state8-response-vectors.pcap
--- ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state8-response-vectors.pcap	2016-10-03 20:57:08.292247285 -0700
+++ ns-3.26/src/test/ns3tcp/response-vectors/ns3tcp-state8-response-vectors.pcap	2016-10-03 19:49:01.571388219 -0700
@@ -1 +1 @@
-ò          @   F              P        `          O        P      P         O  @     P      P                                                     M  @     P     P                                                     M  @     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.25/src/test/ns3wifi/wifi-ac-mapping-test-suite.cc ns-3.26/src/test/ns3wifi/wifi-ac-mapping-test-suite.cc
--- ns-3.25/src/test/ns3wifi/wifi-ac-mapping-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/test/ns3wifi/wifi-ac-mapping-test-suite.cc	2016-10-03 19:49:01.572388212 -0700
@@ -0,0 +1,210 @@
+/* -*- 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
+ *
+ * Author: Stefano Avallone <stavallo@unina.it>
+ */
+
+#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/pointer.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/wifi-net-device.h"
+#include "ns3/wifi-mac.h"
+#include "ns3/wifi-mac-queue.h"
+#include "ns3/edca-txop-n.h"
+#include "ns3/yans-wifi-helper.h"
+#include "ns3/mobility-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"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("WifiAcMappingTest");
+
+class WifiAcMappingTest : public TestCase
+{
+public:
+  WifiAcMappingTest (uint8_t tos, uint8_t expectedQueue);
+  virtual void DoRun (void);
+
+private:
+  uint8_t m_tos;
+  uint8_t m_expectedQueue;
+};
+
+WifiAcMappingTest::WifiAcMappingTest (uint8_t tos, uint8_t expectedQueue)
+  : TestCase ("User priority to Access Category mapping test"),
+    m_tos (tos),
+    m_expectedQueue (expectedQueue)
+{
+}
+
+void
+WifiAcMappingTest::DoRun (void)
+{
+  WifiHelper wifi;
+  WifiMacHelper wifiMac;
+  YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
+  YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
+  wifiPhy.SetChannel (wifiChannel.Create ());
+
+  Ssid ssid = Ssid ("wifi-ac-mapping");
+  wifi.SetRemoteStationManager ("ns3::ArfWifiManager");
+
+  // Setup the AP, which will be the source of traffic for this test
+  NodeContainer ap;
+  ap.Create (1);
+  wifiMac.SetType ("ns3::ApWifiMac",
+                   "QosSupported", BooleanValue (true),
+                   "Ssid", SsidValue (ssid));
+
+  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));
+  NetDeviceContainer staDev = wifi.Install (wifiPhy, wifiMac, sta);
+
+  // Our devices will have fixed positions
+  MobilityHelper mobility;
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.SetPositionAllocator ("ns3::GridPositionAllocator",
+                                 "MinX", DoubleValue (0.0),
+                                 "MinY", DoubleValue (0.0),
+                                 "DeltaX", DoubleValue (5.0),
+                                 "DeltaY", DoubleValue (10.0),
+                                 "GridWidth", UintegerValue (2),
+                                 "LayoutType", StringValue ("RowFirst"));
+  mobility.Install (sta);
+  mobility.Install (ap);
+
+  // Now we install internet stacks on our devices
+  InternetStackHelper stack;
+  stack.Install (ap);
+  stack.Install (sta);
+
+  Ipv4AddressHelper address;
+  address.SetBase ("192.168.0.0", "255.255.255.0");
+  Ipv4InterfaceContainer staNodeInterface, apNodeInterface;
+  staNodeInterface = address.Assign (staDev);
+  apNodeInterface = address.Assign (apDev);
+
+  uint16_t udpPort = 50000;
+
+  PacketSinkHelper packetSink ("ns3::UdpSocketFactory",
+                               InetSocketAddress (Ipv4Address::GetAny (), udpPort));
+  ApplicationContainer sinkApp = packetSink.Install (sta.Get (0));
+  sinkApp.Start (Seconds (0));
+  sinkApp.Stop (Seconds (3.0));
+
+  // The packet source is an on-off application on the AP device
+  InetSocketAddress dest (staNodeInterface.GetAddress (0), udpPort);
+  dest.SetTos (m_tos);
+  OnOffHelper onoff ("ns3::UdpSocketFactory", dest);
+  onoff.SetConstantRate (DataRate ("5kbps"), 500);
+  ApplicationContainer sourceApp = onoff.Install (ap.Get (0));
+  sourceApp.Start (Seconds (1.0));
+  sourceApp.Stop (Seconds (3.0));
+
+  // The first packet will be transmitted at time 1+(500*8)/5000 = 1.8s.
+  // Let this packet be transmitted successfully, so that the AP can resolve
+  // the IP address of the station and get its MAC address.
+  // The second packet will be transmitted at time 1.8+(500*8)/5000 = 2.6s.
+  // Put the AP in sleep mode at time 2.0s, so that the second packet remains
+  // in a wifi mac queue and we can discover the queue it has been sent to.
+  Ptr<WifiPhy> apPhy = DynamicCast<WifiNetDevice> (apDev.Get (0))->GetPhy ();
+  Simulator::ScheduleWithContext (ap.Get (0)->GetId (), Seconds (2.0),
+                                  &WifiPhy::SetSleepMode, apPhy);
+
+  Simulator::Stop (Seconds (4.0));
+
+  Ptr<WifiMac> apMac = DynamicCast<WifiNetDevice> (apDev.Get (0))->GetMac ();
+  PointerValue ptr;
+  Ptr<WifiMacQueue> queues[4];
+  // Get the four wifi mac queues and set their MaxDelay attribute to a large
+  // value, so that packets are not removed by the Cleanup method
+  apMac->GetAttribute ("BE_EdcaTxopN", ptr);
+  queues[0] = ptr.Get<EdcaTxopN> ()->GetEdcaQueue ();
+  queues[0]->SetAttribute ("MaxDelay", TimeValue (Seconds (10.0)));
+
+  apMac->GetAttribute ("BK_EdcaTxopN", ptr);
+  queues[1] = ptr.Get<EdcaTxopN> ()->GetEdcaQueue ();
+  queues[1]->SetAttribute ("MaxDelay", TimeValue (Seconds (10.0)));
+
+  apMac->GetAttribute ("VI_EdcaTxopN", ptr);
+  queues[2] = ptr.Get<EdcaTxopN> ()->GetEdcaQueue ();
+  queues[2]->SetAttribute ("MaxDelay", TimeValue (Seconds (10.0)));
+
+  apMac->GetAttribute ("VO_EdcaTxopN", ptr);
+  queues[3] = ptr.Get<EdcaTxopN> ()->GetEdcaQueue ();
+  queues[3]->SetAttribute ("MaxDelay", TimeValue (Seconds (10.0)));
+
+
+  Simulator::Run ();
+
+  for (uint32_t i = 0; i < 4; i++)
+    {
+      if (i == m_expectedQueue)
+        {
+          NS_TEST_ASSERT_MSG_EQ (queues[i]->GetSize (), 1, "There is no packet in the expected queue " << i);
+        }
+      else
+        {
+          NS_TEST_ASSERT_MSG_EQ (queues[i]->GetSize (), 0, "Unexpectedly, there is a packet in queue " << i);
+        }
+    }
+
+  uint32_t totalOctetsThrough =
+    DynamicCast<PacketSink>(sinkApp.Get (0))->GetTotalRx ();
+
+  // Check that the first packet has been received
+  NS_TEST_ASSERT_MSG_EQ (totalOctetsThrough, 500, "A single packet should have been received");
+
+  Simulator::Destroy ();
+}
+
+
+class WifiAcMappingTestSuite : public TestSuite
+{
+public:
+  WifiAcMappingTestSuite ();
+};
+
+WifiAcMappingTestSuite::WifiAcMappingTestSuite ()
+  : TestSuite ("ns3-wifi-ac-mapping", SYSTEM)
+{
+  AddTestCase (new WifiAcMappingTest (0xb8, 2), TestCase::QUICK); // EF in AC_VI
+  AddTestCase (new WifiAcMappingTest (0x28, 1), TestCase::QUICK); // AF11 in AC_BK
+  AddTestCase (new WifiAcMappingTest (0x70, 0), TestCase::QUICK); // AF32 in AC_BE
+  AddTestCase (new WifiAcMappingTest (0xc0, 3), TestCase::QUICK); // CS7 in AC_VO
+}
+
+static WifiAcMappingTestSuite wifiAcMappingTestSuite;
diff -Naur ns-3.25/src/test/traced/traced-callback-typedef-test-suite.cc ns-3.26/src/test/traced/traced-callback-typedef-test-suite.cc
--- ns-3.25/src/test/traced/traced-callback-typedef-test-suite.cc	2016-10-03 20:57:08.295247262 -0700
+++ ns-3.26/src/test/traced/traced-callback-typedef-test-suite.cc	2016-10-03 19:49:01.575388190 -0700
@@ -46,8 +46,78 @@
 
 using namespace ns3;
 
+class TracedCallbackTypedefTestCase : public TestCase
+{
+public:
+  TracedCallbackTypedefTestCase ();
+  virtual ~TracedCallbackTypedefTestCase () {}
+
+  /**
+   * Number of arguments passed to callback.
+   *
+   * Since the sink function is outside the invoking class we can't use
+   * the test macros directly.  Instead, we cache success
+   * in the \c m_nArgs public value, then inspect it
+   * in the CheckType() method.
+   */
+  static int m_nArgs;
+  
+private:
+  
+  /** Invoker boilerplate. */
+  template <typename T1, typename T2, typename T3, typename T4, typename T5>
+  class CheckerBase;
+  
+  /** Callback checkers. */
+  template <typename T1, typename T2, typename T3, typename T4, typename T5>
+  class Checker;
+    
+  template <typename T1, typename T2, typename T3, typename T4>
+  class Checker<T1, T2, T3, T4, empty>;
+
+  template <typename T1, typename T2, typename T3>
+  class Checker<T1, T2, T3, empty, empty>;
+
+    
+  template <typename T1, typename T2>
+  class Checker<T1, T2, empty, empty, empty>;
+
+  template <typename T1>
+  class Checker<T1, empty, empty, empty, empty>;
+
+  virtual void DoRun (void);
+
+};  // TracedCallbackTypedefTestCase
+
+/*
+  --------------------------------------------------------------------
+  Support functions and classes
+  --------------------------------------------------------------------
+*/
+
 namespace {
 
+/** Record typedefs which are identical to previously declared. */
+std::set<std::string>
+Duplicates (void)
+{
+  std::set<std::string> dupes;
+
+  dupes.insert ("LteRlc::NotifyTxTracedCallback");
+  dupes.insert ("LteRlc::ReceiveTracedCallback");
+  dupes.insert ("LteUeRrc::ImsiCidRntiTracedCallback");
+  dupes.insert ("LteUeRrc::MibSibHandoverTracedCallback");
+  dupes.insert ("WifiPhyStateHelper::RxEndErrorTracedCallback");
+
+  return dupes;
+}
+  
+/**
+ * Container for duplicate types.
+ */
+std::set<std::string> g_dupes = Duplicates ();
+
+  
 /**
  * Stringify the known TracedCallback type names.
  *
@@ -131,43 +201,6 @@
 #undef TYPENAME
 
 
-/** Record typedefs which are identical to previously declared. */
-std::set<std::string>
-Duplicates (void)
-{
-  std::set<std::string> dupes;
-
-#define dupename(T)    dupes.insert (# T)
-  
-  dupename (LteRlc::NotifyTxTracedCallback);
-  dupename (LteRlc::ReceiveTracedCallback);
-  dupename (LteUeRrc::ImsiCidRntiTracedCallback);
-  dupename (LteUeRrc::MibSibHandoverTracedCallback);
-  dupename (WifiPhyStateHelper::RxEndErrorTracedCallback);
-
-#undef dupename
-  
-  return dupes;
-}
-  
-/**
- * Container for duplicate types.
- */
-std::set<std::string> g_dupes = Duplicates ();
-
-  
-/**
- * Number of arguments passed to callback.
- *
- * Since the sink function is outside the invoking class,
- * which in this case is TracedCallbackTestCase, we can't use
- * the test macros directly.  Instead, we cache success
- * in the \c g_NArgs global value, then inspect it
- * in the TracedValueCallbackTestCase::CheckType method.
- */
-int g_NArgs = 0;
-
-
 /**
  * Log that a callback was invoked.
  *
@@ -179,7 +212,7 @@
 void SinkIt (unsigned int N)
 {
   std::cout << "with " << N << " args." << std::endl;
-  g_NArgs = N;
+  TracedCallbackTypedefTestCase::m_nArgs = N;
 }
 
 /**
@@ -222,152 +255,142 @@
 };
 /** @} */
 
-/** Non-const non-reference type. */
-template <typename T>
-struct NonConstReferenced
-{
-  typedef typename TypeTraits< typename TypeTraits<T>::ReferencedType >::NonConstType Type;
-};
 
 }  // anonymous namespace
 
 
-class TracedCallbackTypedefTestCase : public TestCase
+/*
+  --------------------------------------------------------------------
+  Class TracedCallbackTypedefTestCase implementation
+
+  We put the template implementations here to break a dependency cycle
+  from the Checkers() to TracedCbSink<> to SinkIt()
+  --------------------------------------------------------------------
+*/
+
+int TracedCallbackTypedefTestCase::m_nArgs = 0;
+
+template <typename T1, typename T2, typename T3, typename T4, typename T5>
+class TracedCallbackTypedefTestCase::CheckerBase : public Object
 {
 public:
-  TracedCallbackTypedefTestCase ();
-  virtual ~TracedCallbackTypedefTestCase () {}
+  typename TypeTraits<T1>::BaseType m1;
+  typename TypeTraits<T2>::BaseType m2;
+  typename TypeTraits<T3>::BaseType m3;
+  typename TypeTraits<T4>::BaseType m4;
+  typename TypeTraits<T5>::BaseType m5;
   
-private:
+  void Cleanup (int N)
+  {
+    if (m_nArgs == 0) std::cout << std::endl;
+    NS_ASSERT_MSG (m_nArgs && m_nArgs == N, "failed.");
+    m_nArgs = 0;
+  }
+};  // TracedCallbackTypedefTestCase::CheckerBase
+
+template <typename T1, typename T2, typename T3, typename T4, typename T5>
+class TracedCallbackTypedefTestCase::Checker : public CheckerBase<T1, T2, T3, T4, T5>
+{
+  TracedCallback<T1, T2, T3, T4, T5> m_cb;
   
-  /** Invoker boilerplate. */
-  template <typename T1, typename T2, typename T3, typename T4, typename T5>
-  class CheckerBase : public Object
+public:
+  template <typename U>
+  void Invoke (void)
   {
-  public:
-    typename TypeTraits<T1>::BaseType m1;
-    typename TypeTraits<T2>::BaseType m2;
-    typename TypeTraits<T3>::BaseType m3;
-    typename TypeTraits<T4>::BaseType m4;
-    typename TypeTraits<T5>::BaseType m5;
+    const int N = 5;
+    U sink = TracedCbSink<T1, T2, T3, T4, T5>::Sink;
+    Callback<void, T1, T2, T3, T4, T5> cb = MakeCallback (sink);
     
-    void Cleanup (int N)
-    {
-      if (g_NArgs == 0) std::cout << std::endl;
-      NS_ASSERT_MSG (g_NArgs && g_NArgs == N, "failed.");
-      g_NArgs = 0;
-    }
-  };  // CheckerBase
+    std::cout << TypeName<U> (N) << " invoked ";
+    m_cb.ConnectWithoutContext (cb);
+    m_cb (this->m1, this->m2, this->m3, this->m4, this->m5);
+    this->Cleanup (N);
+  }
+};  // Checker<5>
+
+template <typename T1, typename T2, typename T3, typename T4>
+class TracedCallbackTypedefTestCase::Checker<T1, T2, T3, T4, empty>
+  : public CheckerBase<T1, T2, T3, T4, empty>
+{
+  TracedCallback<T1, T2, T3, T4> m_cb;
   
-  /** Callback checkers. */
-  template <typename T1, typename T2, typename T3, typename T4, typename T5>
-  class Checker : public CheckerBase<T1, T2, T3, T4, T5>
+public:
+  template <typename U>
+  void Invoke (void)
   {
-    TracedCallback<T1, T2, T3, T4, T5> m_cb;
-    
-  public:
-    template <typename U>
-    void Invoke (void)
-    {
-      const int N = 5;
-      U sink = TracedCbSink<T1, T2, T3, T4, T5>::Sink;
-      Callback<void, T1, T2, T3, T4, T5> cb = MakeCallback (sink);
-      
-      std::cout << TypeName<U> (N) << " invoked ";
-      m_cb.ConnectWithoutContext (cb);
-      m_cb (this->m1, this->m2, this->m3, this->m4, this->m5);
-      this->Cleanup (N);
-    }
-  };  // Checker<5>
+    const int N = 4;
+    U sink = TracedCbSink<T1, T2, T3, T4, empty>::Sink;
+    Callback<void, T1, T2, T3, T4> cb = MakeCallback (sink);
     
-  template <typename T1, typename T2, typename T3, typename T4>
-  class Checker<T1, T2, T3, T4, empty>
-    : public CheckerBase<T1, T2, T3, T4, empty>
+    std::cout << TypeName<U> (N) << " invoked ";
+    m_cb.ConnectWithoutContext (cb);
+    m_cb (this->m1, this->m2, this->m3, this->m4);
+    this->Cleanup (N);
+  }
+};  // Checker <4>
+  
+template <typename T1, typename T2, typename T3>
+class TracedCallbackTypedefTestCase::Checker<T1, T2, T3, empty, empty>
+  : public CheckerBase<T1, T2, T3, empty, empty>
+{
+  TracedCallback<T1, T2, T3> m_cb;
+  
+public:
+  template <typename U>
+  void Invoke (void)
   {
-    TracedCallback<T1, T2, T3, T4> m_cb;
-    
-  public:
-    template <typename U>
-    void Invoke (void)
-    {
-      const int N = 4;
-      U sink = TracedCbSink<T1, T2, T3, T4, empty>::Sink;
-      Callback<void, T1, T2, T3, T4> cb = MakeCallback (sink);
-      
-      std::cout << TypeName<U> (N) << " invoked ";
-      m_cb.ConnectWithoutContext (cb);
-      m_cb (this->m1, this->m2, this->m3, this->m4);
-      this->Cleanup (N);
-    }
-  };  // Checker <4>
+    const int N = 3;
+    U sink = TracedCbSink<T1, T2, T3, empty, empty>::Sink;
+    Callback<void, T1, T2, T3> cb = MakeCallback (sink);
     
+    std::cout << TypeName<U> (N) << " invoked ";
+    m_cb.ConnectWithoutContext (cb);
+    m_cb (this->m1, this->m2, this->m3);
+    this->Cleanup (N);
+  }
+};  // Checker<3>
 
-  template <typename T1, typename T2, typename T3>
-  class Checker<T1, T2, T3, empty, empty>
-    : public CheckerBase<T1, T2, T3, empty, empty>
-  {
-    TracedCallback<T1, T2, T3> m_cb;
-    
-  public:
-    template <typename U>
-    void Invoke (void)
-    {
-      const int N = 3;
-      U sink = TracedCbSink<T1, T2, T3, empty, empty>::Sink;
-      Callback<void, T1, T2, T3> cb = MakeCallback (sink);
-      
-      std::cout << TypeName<U> (N) << " invoked ";
-      m_cb.ConnectWithoutContext (cb);
-      m_cb (this->m1, this->m2, this->m3);
-      this->Cleanup (N);
-    }
-  };  // Checker<3>
-    
-  template <typename T1, typename T2>
-  class Checker<T1, T2, empty, empty, empty>
-    : public CheckerBase<T1, T2, empty, empty, empty>
+template <typename T1, typename T2>
+class TracedCallbackTypedefTestCase::Checker<T1, T2, empty, empty, empty>
+  : public CheckerBase<T1, T2, empty, empty, empty>
+{
+  TracedCallback<T1, T2> m_cb;
+  
+public:
+  template <typename U>
+  void Invoke (void)
   {
-    TracedCallback<T1, T2> m_cb;
+    const int N = 2;
+    U sink = TracedCbSink<T1, T2, empty, empty, empty>::Sink;
+    Callback<void, T1, T2> cb = MakeCallback (sink);
     
-  public:
-    template <typename U>
-    void Invoke (void)
-    {
-      const int N = 2;
-      U sink = TracedCbSink<T1, T2, empty, empty, empty>::Sink;
-      Callback<void, T1, T2> cb = MakeCallback (sink);
-      
-      std::cout << TypeName<U> (N) << " invoked ";
-      m_cb.ConnectWithoutContext (cb);
-      m_cb (this->m1, this->m2);
-      this->Cleanup (N);
-    }
-  };  // Checker<2>
+    std::cout << TypeName<U> (N) << " invoked ";
+    m_cb.ConnectWithoutContext (cb);
+    m_cb (this->m1, this->m2);
+    this->Cleanup (N);
+  }
+};  // Checker<2>
 
-  template <typename T1>
-  class Checker<T1, empty, empty, empty, empty>
-    : public CheckerBase<T1, empty, empty, empty, empty>
+template <typename T1>
+class TracedCallbackTypedefTestCase::Checker<T1, empty, empty, empty, empty>
+  : public CheckerBase<T1, empty, empty, empty, empty>
+{
+  TracedCallback<T1> m_cb;
+  
+public:
+  template <typename U>
+  void Invoke (void)
   {
-    TracedCallback<T1> m_cb;
+    const int N = 1;
+    U sink = TracedCbSink<T1, empty, empty, empty, empty>::Sink;
+    Callback<void, T1> cb = MakeCallback (sink);
     
-  public:
-    template <typename U>
-    void Invoke (void)
-    {
-      const int N = 1;
-      U sink = TracedCbSink<T1, empty, empty, empty, empty>::Sink;
-      Callback<void, T1> cb = MakeCallback (sink);
-      
-      std::cout << TypeName<U> (N) << " invoked ";
-      m_cb.ConnectWithoutContext (cb);
-      m_cb (this->m1);
-      this->Cleanup (N);
-    }
-  };  // Checker<1>
-
-  virtual void DoRun (void);
-
-};  // TracedCallbackTypedefTestCase
+    std::cout << TypeName<U> (N) << " invoked ";
+    m_cb.ConnectWithoutContext (cb);
+    m_cb (this->m1);
+    this->Cleanup (N);
+  }
+};  // Checker<1>
 
 TracedCallbackTypedefTestCase::TracedCallbackTypedefTestCase ()
   : TestCase ("Check basic TracedCallback operation")
@@ -610,8 +633,8 @@
          empty, empty, empty, empty);
 
   CHECK (WifiPhyStateHelper::RxEndErrorTracedCallback,
-         Ptr<const Packet>, double, bool,
-         empty, empty);
+         Ptr<const Packet>, double,
+         empty, empty, empty);
 
   CHECK (WifiPhyStateHelper::RxOkTracedCallback,
          Ptr<const Packet>, double, WifiMode, WifiPreamble,
diff -Naur ns-3.25/src/test/wscript ns-3.26/src/test/wscript
--- ns-3.25/src/test/wscript	2016-10-03 20:57:08.296247254 -0700
+++ ns-3.26/src/test/wscript	2016-10-03 19:49:01.575388190 -0700
@@ -29,8 +29,11 @@
 
     test_test = bld.create_ns3_module_test_library('test')
     test_test.source = [
-        'adaptive-red-queue-disc-test-suite.cc',
         'csma-system-test-suite.cc',
+        'ns3tc/adaptive-red-queue-disc-test-suite.cc',
+        'ns3tc/fq-codel-queue-disc-test-suite.cc',
+        'ns3tc/pfifo-fast-queue-disc-test-suite.cc',
+        'ns3tc/pie-queue-disc-test-suite.cc',
         'ns3tcp/ns3tcp-cwnd-test-suite.cc',
         'ns3tcp/ns3tcp-interop-test-suite.cc',
         'ns3tcp/ns3tcp-loss-test-suite.cc',
@@ -41,6 +44,7 @@
         'ns3tcp/ns3tcp-socket-writer.cc',
         'ns3wifi/wifi-interference-test-suite.cc',
         'ns3wifi/wifi-msdu-aggregator-test-suite.cc',
+        'ns3wifi/wifi-ac-mapping-test-suite.cc',
         'traced/traced-callback-typedef-test-suite.cc',
         'traced/traced-value-callback-typedef-test-suite.cc',
         ]
diff -Naur ns-3.25/src/topology-read/bindings/modulegen__gcc_ILP32.py ns-3.26/src/topology-read/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/topology-read/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.299247230 -0700
+++ ns-3.26/src/topology-read/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.578388167 -0700
@@ -62,6 +62,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -116,6 +118,10 @@
     module.add_class('CallbackImplBase', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     ## callback.h (module 'core'): ns3::CallbackValue [class]
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## inet-topology-reader.h (module 'topology-read'): ns3::InetTopologyReader [class]
@@ -150,6 +156,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -265,6 +273,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3InetTopologyReader_methods(root_module, root_module['ns3::InetTopologyReader'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
@@ -1135,23 +1145,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1266,6 +1276,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -1287,10 +1302,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -1312,6 +1327,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -1327,6 +1346,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -1433,6 +1456,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -2037,6 +2065,70 @@
                    [param('ns3::CallbackBase', 'base')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -2371,16 +2463,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -2408,35 +2515,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -2569,6 +2671,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/topology-read/bindings/modulegen__gcc_LP64.py ns-3.26/src/topology-read/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/topology-read/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.301247215 -0700
+++ ns-3.26/src/topology-read/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.581388145 -0700
@@ -62,6 +62,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -116,6 +118,10 @@
     module.add_class('CallbackImplBase', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     ## callback.h (module 'core'): ns3::CallbackValue [class]
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## inet-topology-reader.h (module 'topology-read'): ns3::InetTopologyReader [class]
@@ -150,6 +156,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -265,6 +273,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3InetTopologyReader_methods(root_module, root_module['ns3::InetTopologyReader'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
@@ -1135,23 +1145,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1266,6 +1276,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -1287,10 +1302,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -1312,6 +1327,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -1327,6 +1346,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -1433,6 +1456,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -2037,6 +2065,70 @@
                    [param('ns3::CallbackBase', 'base')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -2371,16 +2463,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -2408,35 +2515,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -2569,6 +2671,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/topology-read/model/topology-reader.h ns-3.26/src/topology-read/model/topology-reader.h
--- ns-3.25/src/topology-read/model/topology-reader.h	2016-10-03 20:57:08.310247145 -0700
+++ ns-3.26/src/topology-read/model/topology-reader.h	2016-10-03 19:49:01.590388078 -0700
@@ -90,7 +90,7 @@
     std::string GetToNodeName (void) const;
     /**
      * \brief Returns the value of a link attribute. The attribute must exist.
-     * \param [in] Name the name of the attribute.
+     * \param [in] name the name of the attribute.
      * \return The value of the attribute.
      */
     std::string GetAttribute (const std::string &name) const;
diff -Naur ns-3.25/src/traffic-control/bindings/callbacks_list.py ns-3.26/src/traffic-control/bindings/callbacks_list.py
--- ns-3.25/src/traffic-control/bindings/callbacks_list.py	2016-10-03 20:57:08.311247137 -0700
+++ ns-3.26/src/traffic-control/bindings/callbacks_list.py	2016-10-03 19:49:01.592388063 -0700
@@ -1,5 +1,6 @@
 callback_classes = [
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', '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::QueueItem>', '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'],
-    ['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.25/src/traffic-control/bindings/modulegen__gcc_ILP32.py ns-3.26/src/traffic-control/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/traffic-control/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.314247113 -0700
+++ ns-3.26/src/traffic-control/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.595388040 -0700
@@ -50,6 +50,34 @@
     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')
+    ## int-to-type.h (module 'core'): ns3::IntToType<0> [struct]
+    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['0'])
+    ## int-to-type.h (module 'core'): ns3::IntToType<0>::v_e [enumeration]
+    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 0 >'], import_from_module='ns.core')
+    ## int-to-type.h (module 'core'): ns3::IntToType<1> [struct]
+    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['1'])
+    ## int-to-type.h (module 'core'): ns3::IntToType<1>::v_e [enumeration]
+    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 1 >'], import_from_module='ns.core')
+    ## int-to-type.h (module 'core'): ns3::IntToType<2> [struct]
+    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['2'])
+    ## int-to-type.h (module 'core'): ns3::IntToType<2>::v_e [enumeration]
+    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 2 >'], import_from_module='ns.core')
+    ## int-to-type.h (module 'core'): ns3::IntToType<3> [struct]
+    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['3'])
+    ## int-to-type.h (module 'core'): ns3::IntToType<3>::v_e [enumeration]
+    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 3 >'], import_from_module='ns.core')
+    ## int-to-type.h (module 'core'): ns3::IntToType<4> [struct]
+    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['4'])
+    ## int-to-type.h (module 'core'): ns3::IntToType<4>::v_e [enumeration]
+    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 4 >'], import_from_module='ns.core')
+    ## int-to-type.h (module 'core'): ns3::IntToType<5> [struct]
+    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['5'])
+    ## int-to-type.h (module 'core'): ns3::IntToType<5>::v_e [enumeration]
+    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 5 >'], import_from_module='ns.core')
+    ## int-to-type.h (module 'core'): ns3::IntToType<6> [struct]
+    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['6'])
+    ## int-to-type.h (module 'core'): ns3::IntToType<6>::v_e [enumeration]
+    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 6 >'], import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -100,12 +128,22 @@
     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')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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')
+    ## timer.h (module 'core'): ns3::Timer [class]
+    module.add_class('Timer', import_from_module='ns.core')
+    ## timer.h (module 'core'): ns3::Timer::DestroyPolicy [enumeration]
+    module.add_enum('DestroyPolicy', ['CANCEL_ON_DESTROY', 'REMOVE_ON_DESTROY', 'CHECK_ON_DESTROY'], outer_class=root_module['ns3::Timer'], import_from_module='ns.core')
+    ## timer.h (module 'core'): ns3::Timer::State [enumeration]
+    module.add_enum('State', ['RUNNING', 'EXPIRED', 'SUSPENDED'], outer_class=root_module['ns3::Timer'], import_from_module='ns.core')
+    ## timer-impl.h (module 'core'): ns3::TimerImpl [class]
+    module.add_class('TimerImpl', allow_subclassing=True, import_from_module='ns.core')
     ## 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]
@@ -116,6 +154,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -234,6 +274,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -246,6 +290,12 @@
     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'])
+    ## fq-codel-queue-disc.h (module 'traffic-control'): ns3::FqCoDelFlow [class]
+    module.add_class('FqCoDelFlow', parent=root_module['ns3::QueueDiscClass'])
+    ## fq-codel-queue-disc.h (module 'traffic-control'): ns3::FqCoDelFlow::FlowStatus [enumeration]
+    module.add_enum('FlowStatus', ['INACTIVE', 'NEW_FLOW', 'OLD_FLOW'], outer_class=root_module['ns3::FqCoDelFlow'])
+    ## fq-codel-queue-disc.h (module 'traffic-control'): ns3::FqCoDelQueueDisc [class]
+    module.add_class('FqCoDelQueueDisc', parent=root_module['ns3::QueueDisc'])
     ## 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]
@@ -296,8 +346,16 @@
     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'])
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::PieQueueDisc [class]
+    module.add_class('PieQueueDisc', parent=root_module['ns3::QueueDisc'])
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::PieQueueDisc::BurstStateT [enumeration]
+    module.add_enum('BurstStateT', ['NO_BURST', 'IN_BURST', 'IN_BURST_PROTECTING'], outer_class=root_module['ns3::PieQueueDisc'])
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::PieQueueDisc::Stats [struct]
+    module.add_class('Stats', outer_class=root_module['ns3::PieQueueDisc'])
     ## 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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -404,6 +462,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
     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&')
@@ -427,6 +488,13 @@
     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_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
+    register_Ns3IntToType__1_methods(root_module, root_module['ns3::IntToType< 1 >'])
+    register_Ns3IntToType__2_methods(root_module, root_module['ns3::IntToType< 2 >'])
+    register_Ns3IntToType__3_methods(root_module, root_module['ns3::IntToType< 3 >'])
+    register_Ns3IntToType__4_methods(root_module, root_module['ns3::IntToType< 4 >'])
+    register_Ns3IntToType__5_methods(root_module, root_module['ns3::IntToType< 5 >'])
+    register_Ns3IntToType__6_methods(root_module, root_module['ns3::IntToType< 6 >'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -450,6 +518,8 @@
     register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
     register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
+    register_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__Unsigned_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
     register_Ns3TrafficControlHelper_methods(root_module, root_module['ns3::TrafficControlHelper'])
@@ -506,12 +576,16 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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_Ns3FqCoDelFlow_methods(root_module, root_module['ns3::FqCoDelFlow'])
+    register_Ns3FqCoDelQueueDisc_methods(root_module, root_module['ns3::FqCoDelQueueDisc'])
     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'])
@@ -536,6 +610,8 @@
     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_Ns3PieQueueDisc_methods(root_module, root_module['ns3::PieQueueDisc'])
+    register_Ns3PieQueueDiscStats_methods(root_module, root_module['ns3::PieQueueDisc::Stats'])
     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'])
@@ -760,6 +836,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1135,6 +1216,55 @@
                    [])
     return
 
+def register_Ns3IntToType__0_methods(root_module, cls):
+    ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType() [constructor]
+    cls.add_constructor([])
+    ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType(ns3::IntToType<0> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntToType< 0 > const &', 'arg0')])
+    return
+
+def register_Ns3IntToType__1_methods(root_module, cls):
+    ## int-to-type.h (module 'core'): ns3::IntToType<1>::IntToType() [constructor]
+    cls.add_constructor([])
+    ## int-to-type.h (module 'core'): ns3::IntToType<1>::IntToType(ns3::IntToType<1> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntToType< 1 > const &', 'arg0')])
+    return
+
+def register_Ns3IntToType__2_methods(root_module, cls):
+    ## int-to-type.h (module 'core'): ns3::IntToType<2>::IntToType() [constructor]
+    cls.add_constructor([])
+    ## int-to-type.h (module 'core'): ns3::IntToType<2>::IntToType(ns3::IntToType<2> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntToType< 2 > const &', 'arg0')])
+    return
+
+def register_Ns3IntToType__3_methods(root_module, cls):
+    ## int-to-type.h (module 'core'): ns3::IntToType<3>::IntToType() [constructor]
+    cls.add_constructor([])
+    ## int-to-type.h (module 'core'): ns3::IntToType<3>::IntToType(ns3::IntToType<3> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntToType< 3 > const &', 'arg0')])
+    return
+
+def register_Ns3IntToType__4_methods(root_module, cls):
+    ## int-to-type.h (module 'core'): ns3::IntToType<4>::IntToType() [constructor]
+    cls.add_constructor([])
+    ## int-to-type.h (module 'core'): ns3::IntToType<4>::IntToType(ns3::IntToType<4> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntToType< 4 > const &', 'arg0')])
+    return
+
+def register_Ns3IntToType__5_methods(root_module, cls):
+    ## int-to-type.h (module 'core'): ns3::IntToType<5>::IntToType() [constructor]
+    cls.add_constructor([])
+    ## int-to-type.h (module 'core'): ns3::IntToType<5>::IntToType(ns3::IntToType<5> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntToType< 5 > const &', 'arg0')])
+    return
+
+def register_Ns3IntToType__6_methods(root_module, cls):
+    ## int-to-type.h (module 'core'): ns3::IntToType<6>::IntToType() [constructor]
+    cls.add_constructor([])
+    ## int-to-type.h (module 'core'): ns3::IntToType<6>::IntToType(ns3::IntToType<6> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntToType< 6 > const &', 'arg0')])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -2249,6 +2379,90 @@
     cls.add_constructor([param('ns3::Time const', 'time'), param('ns3::Time::Unit const', 'unit')])
     return
 
+def register_Ns3Timer_methods(root_module, cls):
+    ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Timer const &', 'arg0')])
+    ## timer.h (module 'core'): ns3::Timer::Timer() [constructor]
+    cls.add_constructor([])
+    ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer::DestroyPolicy destroyPolicy) [constructor]
+    cls.add_constructor([param('ns3::Timer::DestroyPolicy', 'destroyPolicy')])
+    ## timer.h (module 'core'): void ns3::Timer::Cancel() [member function]
+    cls.add_method('Cancel', 
+                   'void', 
+                   [])
+    ## timer.h (module 'core'): ns3::Time ns3::Timer::GetDelay() const [member function]
+    cls.add_method('GetDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## timer.h (module 'core'): ns3::Time ns3::Timer::GetDelayLeft() const [member function]
+    cls.add_method('GetDelayLeft', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## timer.h (module 'core'): ns3::Timer::State ns3::Timer::GetState() const [member function]
+    cls.add_method('GetState', 
+                   'ns3::Timer::State', 
+                   [], 
+                   is_const=True)
+    ## timer.h (module 'core'): bool ns3::Timer::IsExpired() const [member function]
+    cls.add_method('IsExpired', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## timer.h (module 'core'): bool ns3::Timer::IsRunning() const [member function]
+    cls.add_method('IsRunning', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## timer.h (module 'core'): bool ns3::Timer::IsSuspended() const [member function]
+    cls.add_method('IsSuspended', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## timer.h (module 'core'): void ns3::Timer::Remove() [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [])
+    ## timer.h (module 'core'): void ns3::Timer::Resume() [member function]
+    cls.add_method('Resume', 
+                   'void', 
+                   [])
+    ## timer.h (module 'core'): void ns3::Timer::Schedule() [member function]
+    cls.add_method('Schedule', 
+                   'void', 
+                   [])
+    ## timer.h (module 'core'): void ns3::Timer::Schedule(ns3::Time delay) [member function]
+    cls.add_method('Schedule', 
+                   'void', 
+                   [param('ns3::Time', 'delay')])
+    ## timer.h (module 'core'): void ns3::Timer::SetDelay(ns3::Time const & delay) [member function]
+    cls.add_method('SetDelay', 
+                   'void', 
+                   [param('ns3::Time const &', 'delay')])
+    ## timer.h (module 'core'): void ns3::Timer::Suspend() [member function]
+    cls.add_method('Suspend', 
+                   'void', 
+                   [])
+    return
+
+def register_Ns3TimerImpl_methods(root_module, cls):
+    ## timer-impl.h (module 'core'): ns3::TimerImpl::TimerImpl() [constructor]
+    cls.add_constructor([])
+    ## timer-impl.h (module 'core'): ns3::TimerImpl::TimerImpl(ns3::TimerImpl const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TimerImpl const &', 'arg0')])
+    ## timer-impl.h (module 'core'): void ns3::TimerImpl::Invoke() [member function]
+    cls.add_method('Invoke', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## timer-impl.h (module 'core'): ns3::EventId ns3::TimerImpl::Schedule(ns3::Time const & delay) [member function]
+    cls.add_method('Schedule', 
+                   'ns3::EventId', 
+                   [param('ns3::Time const &', 'delay')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
 def register_Ns3TracedValue__Bool_methods(root_module, cls):
     ## traced-value.h (module 'core'): ns3::TracedValue<bool>::TracedValue() [constructor]
     cls.add_constructor([])
@@ -2355,6 +2569,10 @@
     cls.add_method('Install', 
                    'ns3::QueueDiscContainer', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'd')])
+    ## traffic-control-helper.h (module 'traffic-control'): void ns3::TrafficControlHelper::SetQueueLimits(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('SetQueueLimits', 
+                   'void', 
+                   [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'): 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', 
@@ -2380,23 +2598,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2511,6 +2729,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2532,10 +2755,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2557,6 +2780,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2572,6 +2799,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -2733,6 +2964,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -2875,10 +3111,19 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
@@ -2891,10 +3136,10 @@
     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]
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
@@ -2911,6 +3156,11 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3QueueDisc_methods(root_module, cls):
@@ -3044,6 +3294,11 @@
     cls.add_method('SetNetDevice', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetParentDropCallback(ns3::Callback<void, 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('SetParentDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetQuota(uint32_t const quota) [member function]
     cls.add_method('SetQuota', 
                    'void', 
@@ -3059,10 +3314,10 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::CheckConfig() [member function]
     cls.add_method('CheckConfig', 
@@ -3703,11 +3958,11 @@
                    '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]
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::TrafficControlLayer::GetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('GetRootQueueDiscOnDevice', 
                    'ns3::Ptr< ns3::QueueDisc >', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## traffic-control-layer.h (module 'traffic-control'): static ns3::TypeId ns3::TrafficControlLayer::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -4408,6 +4663,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -4608,6 +4927,86 @@
                    is_virtual=True)
     return
 
+def register_Ns3FqCoDelFlow_methods(root_module, cls):
+    ## fq-codel-queue-disc.h (module 'traffic-control'): ns3::FqCoDelFlow::FqCoDelFlow(ns3::FqCoDelFlow const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::FqCoDelFlow const &', 'arg0')])
+    ## fq-codel-queue-disc.h (module 'traffic-control'): ns3::FqCoDelFlow::FqCoDelFlow() [constructor]
+    cls.add_constructor([])
+    ## fq-codel-queue-disc.h (module 'traffic-control'): int32_t ns3::FqCoDelFlow::GetDeficit() const [member function]
+    cls.add_method('GetDeficit', 
+                   'int32_t', 
+                   [], 
+                   is_const=True)
+    ## fq-codel-queue-disc.h (module 'traffic-control'): ns3::FqCoDelFlow::FlowStatus ns3::FqCoDelFlow::GetStatus() const [member function]
+    cls.add_method('GetStatus', 
+                   'ns3::FqCoDelFlow::FlowStatus', 
+                   [], 
+                   is_const=True)
+    ## fq-codel-queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::FqCoDelFlow::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## fq-codel-queue-disc.h (module 'traffic-control'): void ns3::FqCoDelFlow::IncreaseDeficit(int32_t deficit) [member function]
+    cls.add_method('IncreaseDeficit', 
+                   'void', 
+                   [param('int32_t', 'deficit')])
+    ## fq-codel-queue-disc.h (module 'traffic-control'): void ns3::FqCoDelFlow::SetDeficit(uint32_t deficit) [member function]
+    cls.add_method('SetDeficit', 
+                   'void', 
+                   [param('uint32_t', 'deficit')])
+    ## fq-codel-queue-disc.h (module 'traffic-control'): void ns3::FqCoDelFlow::SetStatus(ns3::FqCoDelFlow::FlowStatus status) [member function]
+    cls.add_method('SetStatus', 
+                   'void', 
+                   [param('ns3::FqCoDelFlow::FlowStatus', 'status')])
+    return
+
+def register_Ns3FqCoDelQueueDisc_methods(root_module, cls):
+    ## fq-codel-queue-disc.h (module 'traffic-control'): ns3::FqCoDelQueueDisc::FqCoDelQueueDisc(ns3::FqCoDelQueueDisc const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::FqCoDelQueueDisc const &', 'arg0')])
+    ## fq-codel-queue-disc.h (module 'traffic-control'): ns3::FqCoDelQueueDisc::FqCoDelQueueDisc() [constructor]
+    cls.add_constructor([])
+    ## fq-codel-queue-disc.h (module 'traffic-control'): uint32_t ns3::FqCoDelQueueDisc::GetQuantum() const [member function]
+    cls.add_method('GetQuantum', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## fq-codel-queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::FqCoDelQueueDisc::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## fq-codel-queue-disc.h (module 'traffic-control'): void ns3::FqCoDelQueueDisc::SetQuantum(uint32_t quantum) [member function]
+    cls.add_method('SetQuantum', 
+                   'void', 
+                   [param('uint32_t', 'quantum')])
+    ## fq-codel-queue-disc.h (module 'traffic-control'): bool ns3::FqCoDelQueueDisc::CheckConfig() [member function]
+    cls.add_method('CheckConfig', 
+                   'bool', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## fq-codel-queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::FqCoDelQueueDisc::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## fq-codel-queue-disc.h (module 'traffic-control'): bool ns3::FqCoDelQueueDisc::DoEnqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   visibility='private', is_virtual=True)
+    ## fq-codel-queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::FqCoDelQueueDisc::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## fq-codel-queue-disc.h (module 'traffic-control'): void ns3::FqCoDelQueueDisc::InitializeParams() [member function]
+    cls.add_method('InitializeParams', 
+                   'void', 
+                   [], 
+                   visibility='private', 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', 
@@ -5054,16 +5453,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -5091,35 +5505,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -5617,6 +6026,87 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3PieQueueDisc_methods(root_module, cls):
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::PieQueueDisc::PieQueueDisc(ns3::PieQueueDisc const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PieQueueDisc const &', 'arg0')])
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::PieQueueDisc::PieQueueDisc() [constructor]
+    cls.add_constructor([])
+    ## pie-queue-disc.h (module 'traffic-control'): int64_t ns3::PieQueueDisc::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::Queue::QueueMode ns3::PieQueueDisc::GetMode() [member function]
+    cls.add_method('GetMode', 
+                   'ns3::Queue::QueueMode', 
+                   [])
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::Time ns3::PieQueueDisc::GetQueueDelay() [member function]
+    cls.add_method('GetQueueDelay', 
+                   'ns3::Time', 
+                   [])
+    ## pie-queue-disc.h (module 'traffic-control'): uint32_t ns3::PieQueueDisc::GetQueueSize() [member function]
+    cls.add_method('GetQueueSize', 
+                   'uint32_t', 
+                   [])
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::PieQueueDisc::Stats ns3::PieQueueDisc::GetStats() [member function]
+    cls.add_method('GetStats', 
+                   'ns3::PieQueueDisc::Stats', 
+                   [])
+    ## pie-queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::PieQueueDisc::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## pie-queue-disc.h (module 'traffic-control'): void ns3::PieQueueDisc::SetMode(ns3::Queue::QueueMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::Queue::QueueMode', 'mode')])
+    ## pie-queue-disc.h (module 'traffic-control'): void ns3::PieQueueDisc::SetQueueLimit(uint32_t lim) [member function]
+    cls.add_method('SetQueueLimit', 
+                   'void', 
+                   [param('uint32_t', 'lim')])
+    ## pie-queue-disc.h (module 'traffic-control'): void ns3::PieQueueDisc::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## pie-queue-disc.h (module 'traffic-control'): bool ns3::PieQueueDisc::CheckConfig() [member function]
+    cls.add_method('CheckConfig', 
+                   'bool', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::PieQueueDisc::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## pie-queue-disc.h (module 'traffic-control'): bool ns3::PieQueueDisc::DoEnqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   visibility='private', is_virtual=True)
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::PieQueueDisc::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## pie-queue-disc.h (module 'traffic-control'): void ns3::PieQueueDisc::InitializeParams() [member function]
+    cls.add_method('InitializeParams', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3PieQueueDiscStats_methods(root_module, cls):
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::PieQueueDisc::Stats::Stats() [constructor]
+    cls.add_constructor([])
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::PieQueueDisc::Stats::Stats(ns3::PieQueueDisc::Stats const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PieQueueDisc::Stats const &', 'arg0')])
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::PieQueueDisc::Stats::forcedDrop [variable]
+    cls.add_instance_attribute('forcedDrop', 'uint32_t', is_const=False)
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::PieQueueDisc::Stats::unforcedDrop [variable]
+    cls.add_instance_attribute('unforcedDrop', 'uint32_t', is_const=False)
+    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]
@@ -5631,6 +6121,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/traffic-control/bindings/modulegen__gcc_LP64.py ns-3.26/src/traffic-control/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/traffic-control/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.318247082 -0700
+++ ns-3.26/src/traffic-control/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.599388011 -0700
@@ -50,6 +50,34 @@
     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')
+    ## int-to-type.h (module 'core'): ns3::IntToType<0> [struct]
+    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['0'])
+    ## int-to-type.h (module 'core'): ns3::IntToType<0>::v_e [enumeration]
+    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 0 >'], import_from_module='ns.core')
+    ## int-to-type.h (module 'core'): ns3::IntToType<1> [struct]
+    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['1'])
+    ## int-to-type.h (module 'core'): ns3::IntToType<1>::v_e [enumeration]
+    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 1 >'], import_from_module='ns.core')
+    ## int-to-type.h (module 'core'): ns3::IntToType<2> [struct]
+    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['2'])
+    ## int-to-type.h (module 'core'): ns3::IntToType<2>::v_e [enumeration]
+    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 2 >'], import_from_module='ns.core')
+    ## int-to-type.h (module 'core'): ns3::IntToType<3> [struct]
+    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['3'])
+    ## int-to-type.h (module 'core'): ns3::IntToType<3>::v_e [enumeration]
+    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 3 >'], import_from_module='ns.core')
+    ## int-to-type.h (module 'core'): ns3::IntToType<4> [struct]
+    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['4'])
+    ## int-to-type.h (module 'core'): ns3::IntToType<4>::v_e [enumeration]
+    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 4 >'], import_from_module='ns.core')
+    ## int-to-type.h (module 'core'): ns3::IntToType<5> [struct]
+    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['5'])
+    ## int-to-type.h (module 'core'): ns3::IntToType<5>::v_e [enumeration]
+    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 5 >'], import_from_module='ns.core')
+    ## int-to-type.h (module 'core'): ns3::IntToType<6> [struct]
+    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['6'])
+    ## int-to-type.h (module 'core'): ns3::IntToType<6>::v_e [enumeration]
+    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 6 >'], import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -100,12 +128,22 @@
     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')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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')
+    ## timer.h (module 'core'): ns3::Timer [class]
+    module.add_class('Timer', import_from_module='ns.core')
+    ## timer.h (module 'core'): ns3::Timer::DestroyPolicy [enumeration]
+    module.add_enum('DestroyPolicy', ['CANCEL_ON_DESTROY', 'REMOVE_ON_DESTROY', 'CHECK_ON_DESTROY'], outer_class=root_module['ns3::Timer'], import_from_module='ns.core')
+    ## timer.h (module 'core'): ns3::Timer::State [enumeration]
+    module.add_enum('State', ['RUNNING', 'EXPIRED', 'SUSPENDED'], outer_class=root_module['ns3::Timer'], import_from_module='ns.core')
+    ## timer-impl.h (module 'core'): ns3::TimerImpl [class]
+    module.add_class('TimerImpl', allow_subclassing=True, import_from_module='ns.core')
     ## 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]
@@ -116,6 +154,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -234,6 +274,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -246,6 +290,12 @@
     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'])
+    ## fq-codel-queue-disc.h (module 'traffic-control'): ns3::FqCoDelFlow [class]
+    module.add_class('FqCoDelFlow', parent=root_module['ns3::QueueDiscClass'])
+    ## fq-codel-queue-disc.h (module 'traffic-control'): ns3::FqCoDelFlow::FlowStatus [enumeration]
+    module.add_enum('FlowStatus', ['INACTIVE', 'NEW_FLOW', 'OLD_FLOW'], outer_class=root_module['ns3::FqCoDelFlow'])
+    ## fq-codel-queue-disc.h (module 'traffic-control'): ns3::FqCoDelQueueDisc [class]
+    module.add_class('FqCoDelQueueDisc', parent=root_module['ns3::QueueDisc'])
     ## 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]
@@ -296,8 +346,16 @@
     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'])
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::PieQueueDisc [class]
+    module.add_class('PieQueueDisc', parent=root_module['ns3::QueueDisc'])
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::PieQueueDisc::BurstStateT [enumeration]
+    module.add_enum('BurstStateT', ['NO_BURST', 'IN_BURST', 'IN_BURST_PROTECTING'], outer_class=root_module['ns3::PieQueueDisc'])
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::PieQueueDisc::Stats [struct]
+    module.add_class('Stats', outer_class=root_module['ns3::PieQueueDisc'])
     ## 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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -404,6 +462,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
     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&')
@@ -427,6 +488,13 @@
     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_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
+    register_Ns3IntToType__1_methods(root_module, root_module['ns3::IntToType< 1 >'])
+    register_Ns3IntToType__2_methods(root_module, root_module['ns3::IntToType< 2 >'])
+    register_Ns3IntToType__3_methods(root_module, root_module['ns3::IntToType< 3 >'])
+    register_Ns3IntToType__4_methods(root_module, root_module['ns3::IntToType< 4 >'])
+    register_Ns3IntToType__5_methods(root_module, root_module['ns3::IntToType< 5 >'])
+    register_Ns3IntToType__6_methods(root_module, root_module['ns3::IntToType< 6 >'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -450,6 +518,8 @@
     register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
     register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
+    register_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__Unsigned_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
     register_Ns3TrafficControlHelper_methods(root_module, root_module['ns3::TrafficControlHelper'])
@@ -506,12 +576,16 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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_Ns3FqCoDelFlow_methods(root_module, root_module['ns3::FqCoDelFlow'])
+    register_Ns3FqCoDelQueueDisc_methods(root_module, root_module['ns3::FqCoDelQueueDisc'])
     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'])
@@ -536,6 +610,8 @@
     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_Ns3PieQueueDisc_methods(root_module, root_module['ns3::PieQueueDisc'])
+    register_Ns3PieQueueDiscStats_methods(root_module, root_module['ns3::PieQueueDisc::Stats'])
     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'])
@@ -760,6 +836,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1135,6 +1216,55 @@
                    [])
     return
 
+def register_Ns3IntToType__0_methods(root_module, cls):
+    ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType() [constructor]
+    cls.add_constructor([])
+    ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType(ns3::IntToType<0> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntToType< 0 > const &', 'arg0')])
+    return
+
+def register_Ns3IntToType__1_methods(root_module, cls):
+    ## int-to-type.h (module 'core'): ns3::IntToType<1>::IntToType() [constructor]
+    cls.add_constructor([])
+    ## int-to-type.h (module 'core'): ns3::IntToType<1>::IntToType(ns3::IntToType<1> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntToType< 1 > const &', 'arg0')])
+    return
+
+def register_Ns3IntToType__2_methods(root_module, cls):
+    ## int-to-type.h (module 'core'): ns3::IntToType<2>::IntToType() [constructor]
+    cls.add_constructor([])
+    ## int-to-type.h (module 'core'): ns3::IntToType<2>::IntToType(ns3::IntToType<2> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntToType< 2 > const &', 'arg0')])
+    return
+
+def register_Ns3IntToType__3_methods(root_module, cls):
+    ## int-to-type.h (module 'core'): ns3::IntToType<3>::IntToType() [constructor]
+    cls.add_constructor([])
+    ## int-to-type.h (module 'core'): ns3::IntToType<3>::IntToType(ns3::IntToType<3> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntToType< 3 > const &', 'arg0')])
+    return
+
+def register_Ns3IntToType__4_methods(root_module, cls):
+    ## int-to-type.h (module 'core'): ns3::IntToType<4>::IntToType() [constructor]
+    cls.add_constructor([])
+    ## int-to-type.h (module 'core'): ns3::IntToType<4>::IntToType(ns3::IntToType<4> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntToType< 4 > const &', 'arg0')])
+    return
+
+def register_Ns3IntToType__5_methods(root_module, cls):
+    ## int-to-type.h (module 'core'): ns3::IntToType<5>::IntToType() [constructor]
+    cls.add_constructor([])
+    ## int-to-type.h (module 'core'): ns3::IntToType<5>::IntToType(ns3::IntToType<5> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntToType< 5 > const &', 'arg0')])
+    return
+
+def register_Ns3IntToType__6_methods(root_module, cls):
+    ## int-to-type.h (module 'core'): ns3::IntToType<6>::IntToType() [constructor]
+    cls.add_constructor([])
+    ## int-to-type.h (module 'core'): ns3::IntToType<6>::IntToType(ns3::IntToType<6> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntToType< 6 > const &', 'arg0')])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -2249,6 +2379,90 @@
     cls.add_constructor([param('ns3::Time const', 'time'), param('ns3::Time::Unit const', 'unit')])
     return
 
+def register_Ns3Timer_methods(root_module, cls):
+    ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Timer const &', 'arg0')])
+    ## timer.h (module 'core'): ns3::Timer::Timer() [constructor]
+    cls.add_constructor([])
+    ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer::DestroyPolicy destroyPolicy) [constructor]
+    cls.add_constructor([param('ns3::Timer::DestroyPolicy', 'destroyPolicy')])
+    ## timer.h (module 'core'): void ns3::Timer::Cancel() [member function]
+    cls.add_method('Cancel', 
+                   'void', 
+                   [])
+    ## timer.h (module 'core'): ns3::Time ns3::Timer::GetDelay() const [member function]
+    cls.add_method('GetDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## timer.h (module 'core'): ns3::Time ns3::Timer::GetDelayLeft() const [member function]
+    cls.add_method('GetDelayLeft', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## timer.h (module 'core'): ns3::Timer::State ns3::Timer::GetState() const [member function]
+    cls.add_method('GetState', 
+                   'ns3::Timer::State', 
+                   [], 
+                   is_const=True)
+    ## timer.h (module 'core'): bool ns3::Timer::IsExpired() const [member function]
+    cls.add_method('IsExpired', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## timer.h (module 'core'): bool ns3::Timer::IsRunning() const [member function]
+    cls.add_method('IsRunning', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## timer.h (module 'core'): bool ns3::Timer::IsSuspended() const [member function]
+    cls.add_method('IsSuspended', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## timer.h (module 'core'): void ns3::Timer::Remove() [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [])
+    ## timer.h (module 'core'): void ns3::Timer::Resume() [member function]
+    cls.add_method('Resume', 
+                   'void', 
+                   [])
+    ## timer.h (module 'core'): void ns3::Timer::Schedule() [member function]
+    cls.add_method('Schedule', 
+                   'void', 
+                   [])
+    ## timer.h (module 'core'): void ns3::Timer::Schedule(ns3::Time delay) [member function]
+    cls.add_method('Schedule', 
+                   'void', 
+                   [param('ns3::Time', 'delay')])
+    ## timer.h (module 'core'): void ns3::Timer::SetDelay(ns3::Time const & delay) [member function]
+    cls.add_method('SetDelay', 
+                   'void', 
+                   [param('ns3::Time const &', 'delay')])
+    ## timer.h (module 'core'): void ns3::Timer::Suspend() [member function]
+    cls.add_method('Suspend', 
+                   'void', 
+                   [])
+    return
+
+def register_Ns3TimerImpl_methods(root_module, cls):
+    ## timer-impl.h (module 'core'): ns3::TimerImpl::TimerImpl() [constructor]
+    cls.add_constructor([])
+    ## timer-impl.h (module 'core'): ns3::TimerImpl::TimerImpl(ns3::TimerImpl const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TimerImpl const &', 'arg0')])
+    ## timer-impl.h (module 'core'): void ns3::TimerImpl::Invoke() [member function]
+    cls.add_method('Invoke', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## timer-impl.h (module 'core'): ns3::EventId ns3::TimerImpl::Schedule(ns3::Time const & delay) [member function]
+    cls.add_method('Schedule', 
+                   'ns3::EventId', 
+                   [param('ns3::Time const &', 'delay')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
 def register_Ns3TracedValue__Bool_methods(root_module, cls):
     ## traced-value.h (module 'core'): ns3::TracedValue<bool>::TracedValue() [constructor]
     cls.add_constructor([])
@@ -2355,6 +2569,10 @@
     cls.add_method('Install', 
                    'ns3::QueueDiscContainer', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'd')])
+    ## traffic-control-helper.h (module 'traffic-control'): void ns3::TrafficControlHelper::SetQueueLimits(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('SetQueueLimits', 
+                   'void', 
+                   [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'): 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', 
@@ -2380,23 +2598,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2511,6 +2729,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2532,10 +2755,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2557,6 +2780,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2572,6 +2799,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -2733,6 +2964,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -2875,10 +3111,19 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Remove() [member function]
+    cls.add_method('Remove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
+    ## queue.h (module 'network'): void ns3::Queue::SetDropCallback(ns3::Callback<void, 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('SetDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
     cls.add_method('SetMaxBytes', 
                    'void', 
@@ -2891,10 +3136,10 @@
     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]
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
@@ -2911,6 +3156,11 @@
                    'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoRemove() [member function]
+    cls.add_method('DoRemove', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3QueueDisc_methods(root_module, cls):
@@ -3044,6 +3294,11 @@
     cls.add_method('SetNetDevice', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetParentDropCallback(ns3::Callback<void, 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('SetParentDropCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
     ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetQuota(uint32_t const quota) [member function]
     cls.add_method('SetQuota', 
                    'void', 
@@ -3059,10 +3314,10 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='protected')
     ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::CheckConfig() [member function]
     cls.add_method('CheckConfig', 
@@ -3703,11 +3958,11 @@
                    '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]
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::TrafficControlLayer::GetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('GetRootQueueDiscOnDevice', 
                    'ns3::Ptr< ns3::QueueDisc >', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## traffic-control-layer.h (module 'traffic-control'): static ns3::TypeId ns3::TrafficControlLayer::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -4408,6 +4663,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -4608,6 +4927,86 @@
                    is_virtual=True)
     return
 
+def register_Ns3FqCoDelFlow_methods(root_module, cls):
+    ## fq-codel-queue-disc.h (module 'traffic-control'): ns3::FqCoDelFlow::FqCoDelFlow(ns3::FqCoDelFlow const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::FqCoDelFlow const &', 'arg0')])
+    ## fq-codel-queue-disc.h (module 'traffic-control'): ns3::FqCoDelFlow::FqCoDelFlow() [constructor]
+    cls.add_constructor([])
+    ## fq-codel-queue-disc.h (module 'traffic-control'): int32_t ns3::FqCoDelFlow::GetDeficit() const [member function]
+    cls.add_method('GetDeficit', 
+                   'int32_t', 
+                   [], 
+                   is_const=True)
+    ## fq-codel-queue-disc.h (module 'traffic-control'): ns3::FqCoDelFlow::FlowStatus ns3::FqCoDelFlow::GetStatus() const [member function]
+    cls.add_method('GetStatus', 
+                   'ns3::FqCoDelFlow::FlowStatus', 
+                   [], 
+                   is_const=True)
+    ## fq-codel-queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::FqCoDelFlow::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## fq-codel-queue-disc.h (module 'traffic-control'): void ns3::FqCoDelFlow::IncreaseDeficit(int32_t deficit) [member function]
+    cls.add_method('IncreaseDeficit', 
+                   'void', 
+                   [param('int32_t', 'deficit')])
+    ## fq-codel-queue-disc.h (module 'traffic-control'): void ns3::FqCoDelFlow::SetDeficit(uint32_t deficit) [member function]
+    cls.add_method('SetDeficit', 
+                   'void', 
+                   [param('uint32_t', 'deficit')])
+    ## fq-codel-queue-disc.h (module 'traffic-control'): void ns3::FqCoDelFlow::SetStatus(ns3::FqCoDelFlow::FlowStatus status) [member function]
+    cls.add_method('SetStatus', 
+                   'void', 
+                   [param('ns3::FqCoDelFlow::FlowStatus', 'status')])
+    return
+
+def register_Ns3FqCoDelQueueDisc_methods(root_module, cls):
+    ## fq-codel-queue-disc.h (module 'traffic-control'): ns3::FqCoDelQueueDisc::FqCoDelQueueDisc(ns3::FqCoDelQueueDisc const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::FqCoDelQueueDisc const &', 'arg0')])
+    ## fq-codel-queue-disc.h (module 'traffic-control'): ns3::FqCoDelQueueDisc::FqCoDelQueueDisc() [constructor]
+    cls.add_constructor([])
+    ## fq-codel-queue-disc.h (module 'traffic-control'): uint32_t ns3::FqCoDelQueueDisc::GetQuantum() const [member function]
+    cls.add_method('GetQuantum', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## fq-codel-queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::FqCoDelQueueDisc::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## fq-codel-queue-disc.h (module 'traffic-control'): void ns3::FqCoDelQueueDisc::SetQuantum(uint32_t quantum) [member function]
+    cls.add_method('SetQuantum', 
+                   'void', 
+                   [param('uint32_t', 'quantum')])
+    ## fq-codel-queue-disc.h (module 'traffic-control'): bool ns3::FqCoDelQueueDisc::CheckConfig() [member function]
+    cls.add_method('CheckConfig', 
+                   'bool', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## fq-codel-queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::FqCoDelQueueDisc::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## fq-codel-queue-disc.h (module 'traffic-control'): bool ns3::FqCoDelQueueDisc::DoEnqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   visibility='private', is_virtual=True)
+    ## fq-codel-queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::FqCoDelQueueDisc::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## fq-codel-queue-disc.h (module 'traffic-control'): void ns3::FqCoDelQueueDisc::InitializeParams() [member function]
+    cls.add_method('InitializeParams', 
+                   'void', 
+                   [], 
+                   visibility='private', 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', 
@@ -5054,16 +5453,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -5091,35 +5505,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -5617,6 +6026,87 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3PieQueueDisc_methods(root_module, cls):
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::PieQueueDisc::PieQueueDisc(ns3::PieQueueDisc const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PieQueueDisc const &', 'arg0')])
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::PieQueueDisc::PieQueueDisc() [constructor]
+    cls.add_constructor([])
+    ## pie-queue-disc.h (module 'traffic-control'): int64_t ns3::PieQueueDisc::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::Queue::QueueMode ns3::PieQueueDisc::GetMode() [member function]
+    cls.add_method('GetMode', 
+                   'ns3::Queue::QueueMode', 
+                   [])
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::Time ns3::PieQueueDisc::GetQueueDelay() [member function]
+    cls.add_method('GetQueueDelay', 
+                   'ns3::Time', 
+                   [])
+    ## pie-queue-disc.h (module 'traffic-control'): uint32_t ns3::PieQueueDisc::GetQueueSize() [member function]
+    cls.add_method('GetQueueSize', 
+                   'uint32_t', 
+                   [])
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::PieQueueDisc::Stats ns3::PieQueueDisc::GetStats() [member function]
+    cls.add_method('GetStats', 
+                   'ns3::PieQueueDisc::Stats', 
+                   [])
+    ## pie-queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::PieQueueDisc::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## pie-queue-disc.h (module 'traffic-control'): void ns3::PieQueueDisc::SetMode(ns3::Queue::QueueMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::Queue::QueueMode', 'mode')])
+    ## pie-queue-disc.h (module 'traffic-control'): void ns3::PieQueueDisc::SetQueueLimit(uint32_t lim) [member function]
+    cls.add_method('SetQueueLimit', 
+                   'void', 
+                   [param('uint32_t', 'lim')])
+    ## pie-queue-disc.h (module 'traffic-control'): void ns3::PieQueueDisc::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## pie-queue-disc.h (module 'traffic-control'): bool ns3::PieQueueDisc::CheckConfig() [member function]
+    cls.add_method('CheckConfig', 
+                   'bool', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::PieQueueDisc::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## pie-queue-disc.h (module 'traffic-control'): bool ns3::PieQueueDisc::DoEnqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   visibility='private', is_virtual=True)
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::PieQueueDisc::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## pie-queue-disc.h (module 'traffic-control'): void ns3::PieQueueDisc::InitializeParams() [member function]
+    cls.add_method('InitializeParams', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3PieQueueDiscStats_methods(root_module, cls):
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::PieQueueDisc::Stats::Stats() [constructor]
+    cls.add_constructor([])
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::PieQueueDisc::Stats::Stats(ns3::PieQueueDisc::Stats const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PieQueueDisc::Stats const &', 'arg0')])
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::PieQueueDisc::Stats::forcedDrop [variable]
+    cls.add_instance_attribute('forcedDrop', 'uint32_t', is_const=False)
+    ## pie-queue-disc.h (module 'traffic-control'): ns3::PieQueueDisc::Stats::unforcedDrop [variable]
+    cls.add_instance_attribute('unforcedDrop', 'uint32_t', is_const=False)
+    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]
@@ -5631,6 +6121,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/traffic-control/doc/fq-codel.rst ns-3.26/src/traffic-control/doc/fq-codel.rst
--- ns-3.25/src/traffic-control/doc/fq-codel.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/traffic-control/doc/fq-codel.rst	2016-10-03 19:49:01.600388003 -0700
@@ -0,0 +1,112 @@
+.. include:: replace.txt
+.. highlight:: cpp
+.. highlight:: bash
+
+FqCoDel queue disc
+------------------
+
+This chapter describes the FqCoDel ([Hoe16]_) queue disc implementation in |ns3|.
+
+The FlowQueue-CoDel (FQ-CoDel) algorithm is a combined packet scheduler and
+Active Queue Management (AQM) algorithm developed as part of the
+bufferbloat-fighting community effort ([Buf16]_).
+FqCoDel classifies incoming packets into different queues (by default, 1024
+queues are created), which are served according to a modified Deficit Round
+Robin (DRR) queue scheduler. Each queue is managed by the CoDel AQM algorithm.
+FqCoDel distinguishes between "new" queues (which don't build up a standing
+queue) and "old" queues, that have queued enough data to be around for more
+than one iteration of the round-robin scheduler.
+
+
+Model Description
+*****************
+
+The source code for the FqCoDel queue disc is located in the directory
+``src/traffic-control/model`` and consists of 2 files `fq-codel-queue-disc.h`
+and `fq-codel-queue-disc.cc` defining a FqCoDelQueueDisc class and a helper
+FqCoDelFlow class. The code was ported to |ns3| based on Linux kernel code
+implemented by Eric Dumazet.
+
+* class :cpp:class:`FqCoDelQueueDisc`: This class implements the main FqCoDel algorithm:
+
+  * ``FqCoDelQueueDisc::DoEnqueue ()``: This routine uses the configured packet filters to classify the given packet into an appropriate queue. If the filters are unable to classify the packet, the packet is dropped. Otherwise, it is handed over to the CoDel algorithm for timestamping. Then, if the queue is not currently active (i.e., if it is not in either the list of new or the list of old queues), it is added to the end of the list of new queues, and its deficit is initiated to the configured quantum. Otherwise,  the queue is left in its current queue list. Finally, the total number of enqueued packets is compared with the configured limit, and if it is above this value (which can happen since a packet was just enqueued), packets are dropped from the head of the queue with the largest current byte count until the number of dropped packets reaches the configured drop batch size or the backlog of the queue has been halved. Note that this in most cases means that the packet that was just enqueued is not among the packets that get dropped, which may even be from a different queue.
+
+  * ``FqCoDelQueueDisc::DoDequeue ()``: The first task performed by this routine is selecting a queue from which to dequeue a packet. To this end, the scheduler first looks at the list of new queues; for the queue at the head of that list, if that queue has a negative deficit (i.e., it has already dequeued at least a quantum of bytes), it is given an additional amount of deficit, the queue is put onto the end of the list of old queues, and the routine selects the next queue and starts again. Otherwise, that queue is selected for dequeue. If the list of new queues is empty, the scheduler proceeds down the list of old queues in the same fashion (checking the deficit, and either selecting the queue for dequeuing, or increasing deficit and putting the queue back at the end of the list). After having selected a queue from which to dequeue a packet, the CoDel algorithm is invoked on that queue. As a result of this, one or more packets may be discarded from the head of the selected queue, before the packet that should be dequeued is returned (or nothing is returned if the queue is or becomes empty while being handled by the CoDel algorithm). Finally, if the CoDel algorithm does not return a packet, then the queue must be empty, and the scheduler does one of two things: if the queue selected for dequeue came from the list of new queues, it is moved to the end of the list of old queues.  If instead it came from the list of old queues, that queue is removed from the list, to be added back (as a new queue) the next time a packet for that queue arrives. Then (since no packet was available for dequeue), the whole dequeue process is restarted from the beginning. If, instead, the scheduler did get a packet back from the CoDel algorithm, it subtracts the size of the packet from the byte deficit for the selected queue and returns the packet as the result of the dequeue operation.
+
+  * ``FqCoDelQueueDisc::FqCoDelDrop ()``: This routine is invoked by ``FqCoDelQueueDisc::DoEnqueue()`` to drop packets from the head of the queue with the largest current byte count. This routine keeps dropping packets until the number of dropped packets reaches the configured drop batch size or the backlog of the queue has been halved.
+
+* class :cpp:class:`FqCoDelFlow`: This class implements a flow queue, by keeping its current status (whether it is in the list of new queues, in the list of old queues or inactive) and its current deficit.
+
+In Linux, by default, packet classification is done by hashing (using a Jenkins
+hash function) on the 5-tuple of IP protocol, and source and destination IP
+addresses and port numbers (if they exist), and taking the hash value modulo
+the number of queues. The hash is salted by modulo addition of a random value
+selected at initialisation time, to prevent possible DoS attacks if the hash
+is predictable ahead of time. Alternatively, any other packet filter can be
+configured.
+In |ns3|, at least one packet filter must be added to an FqCoDel queue disc.
+The Linux default classifier is provided via the FqCoDelIpv{4,6}PacketFilter classes.
+Finally, neither internal queues nor classes can be configured for an FqCoDel
+queue disc.
+
+
+References
+==========
+
+.. [Hoe16] T. Hoeiland-Joergensen, P. McKenney, D. Taht, J. Gettys and E. Dumazet, The FlowQueue-CoDel Packet Scheduler and Active Queue Management Algorithm, IETF draft.  Available online at `<https://tools.ietf.org/html/draft-ietf-aqm-fq-codel>`_
+
+.. [Buf16] Bufferbloat.net.  Available online at `<http://www.bufferbloat.net/>`_.
+
+
+Attributes
+==========
+
+The key attributes that the FqCoDelQueue class holds include the following:
+
+* ``Interval:`` The interval parameter to be used on the CoDel queues. The default value is 100 ms.
+* ``Target:`` The target parameter to be used on the CoDel queues. The default value is 5 ms.
+* ``Packet limit:`` The limit on the maximum number of packets stored by FqCoDel.
+* ``Flows:`` The number of flow queues managed by FqCoDel.
+* ``DropBatchSize:`` The maximum number of packets dropped from the fat flow.
+
+Note that the quantum, i.e., the number of bytes each queue gets to dequeue on
+each round of the scheduling algorithm, is set by default to the MTU size of the
+device (at initialisation time). The ``FqCoDelQueueDisc::SetQuantum ()`` method
+can be used (at any time) to configure a different value.
+
+Examples
+========
+
+A typical usage pattern is to create a traffic control helper and to configure type
+and attributes of queue disc and filters from the helper. For example, FqCodel
+can be configured as follows:
+
+.. sourcecode:: cpp
+
+  TrafficControlHelper tch;
+  uint16_t handle = tch.SetRootQueueDisc ("ns3::FqCoDelQueueDisc", "DropBatchSize", UintegerValue (1));
+  tch.AddPacketFilter (handle, "ns3::FqCoDelIpv4PacketFilter", "Perturbation", UintegerValue (256));
+  tch.AddPacketFilter (handle, "ns3::FqCoDelIpv6PacketFilter");
+  QueueDiscContainer qdiscs = tch.Install (devices);
+
+Validation
+**********
+
+The FqCoDel model is tested using :cpp:class:`FqCoDelQueueDiscTestSuite` class defined in `src/test/ns3tc/codel-queue-test-suite.cc`.  The suite includes 5 test cases:
+
+* Test 1: The first test checks that packets that cannot be classified by any available filter are dropped.
+* Test 2: The second test checks that IPv4 packets having distinct destination addresses are enqueued into different flow queues. Also, it checks that packets are dropped from the fat flow in case the queue disc capacity is exceeded.
+* Test 3: The third test checks the dequeue operation and the deficit round robin-based scheduler.
+* Test 4: The fourth test checks that TCP packets with distinct port numbers are enqueued into different flow queues.
+* Test 5: The fifth test checks that UDP packets with distinct port numbers are enqueued into different flow queues.
+
+The test suite can be run using the following commands::
+
+  $ ./waf configure --enable-examples --enable-tests
+  $ ./waf build
+  $ ./test.py -s fq-codel-queue-disc
+
+or::
+
+  $ NS_LOG="FqCoDelQueueDisc" ./waf --run "test-runner --suite=fq-codel-queue-disc"
+
diff -Naur ns-3.25/src/traffic-control/doc/pfifo-fast.rst ns-3.26/src/traffic-control/doc/pfifo-fast.rst
--- ns-3.25/src/traffic-control/doc/pfifo-fast.rst	2016-10-03 20:57:08.319247074 -0700
+++ ns-3.26/src/traffic-control/doc/pfifo-fast.rst	2016-10-03 19:49:01.600388003 -0700
@@ -7,10 +7,34 @@
 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.
+PfifoFastQueueDisc behaves like pfifo_fast, which is the default queue disc
+enabled on Linux systems (init systems such as systemd may override such default
+setting). Packets are enqueued in three priority bands (implemented
+as FIFO droptail queues) based on their priority (users can read
+:ref:`Socket-options` for details on how to set packet priority).
+The four least significant bits of the priority are used to determine
+the selected band according to the following table:
+
+==============  ======
+Priority & 0xf  Band
+==============  ======
+    0            1
+    1            2
+    2            2
+    3            2
+    4            1
+    5            2
+    6            0
+    7            0
+    8            1
+    9            1
+   10            1
+   11            1
+   12            1
+   13            1
+   14            1
+   15            1
+==============  ======
 
 The system behaves similar to three ns3::DropTail queues operating
 together, in which packets from higher priority bands are always
@@ -22,15 +46,7 @@
 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).
-
+than limit. No packet filter can be added to a PfifoFastQueueDisc.
 
 
 Attributes
@@ -43,14 +59,14 @@
 Examples
 ========
 
-The traffic-control example located in ``examples/traffic-control`` shows how to configure
-and install a pfifo_fast queue on Ipv4 nodes.
+Various examples located in ``src/traffic-control/examples`` (e.g., codel-vs-pfifo-asymmetric.cc)
+shows how to configure and install a PfifoFastQueueDisc on internet 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:
+in ``src/test/ns3tc/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
diff -Naur ns-3.25/src/traffic-control/doc/pie.rst ns-3.26/src/traffic-control/doc/pie.rst
--- ns-3.25/src/traffic-control/doc/pie.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/traffic-control/doc/pie.rst	2016-10-03 19:49:01.601387996 -0700
@@ -0,0 +1,95 @@
+.. include:: replace.txt
+.. highlight:: cpp
+
+PIE queue disc
+----------------
+
+This chapter describes the PIE ([Pan13]_, [Pan16]_) queue disc implementation 
+in |ns3|. 
+
+Proportional Integral controller Enhanced (PIE) is a queuing discipline that aims to
+solve the bufferbloat [Buf14]_ problem. The model in ns-3 is a port of Preethi
+Natarajan's ns-2 PIE model.
+
+
+Model Description
+*****************
+
+The source code for the PIE model is located in the directory ``src/traffic-control/model``
+and consists of 2 files `pie-queue-disc.h` and `pie-queue-disc.cc` defining a PieQueueDisc
+class. The code was ported to |ns3| by Mohit P. Tahiliani, Shravya K. S. and Smriti Murali
+based on ns-2 code implemented by Preethi Natarajan, Rong Pan, Chiara Piglione, Greg White
+and Takashi Hayakawa.  
+
+* class :cpp:class:`PieQueueDisc`: This class implements the main PIE algorithm:
+
+  * ``PieQueueDisc::DoEnqueue ()``: This routine checks whether the queue is full, and if so, drops the packets and records the number of drops due to queue overflow. If queue is not full, this routine calls ``PieQueueDisc::DropEarly()``, and depending on the value returned, the incoming packet is either enqueued or dropped.
+
+  * ``PieQueueDisc::DropEarly ()``: The decision to enqueue or drop the packet is taken by invoking this routine, which returns a boolean value; false indicates enqueue and true indicates drop.
+
+  * ``PieQueueDisc::CalculateP ()``: This routine is called at a regular interval of `m_tUpdate` and updates the drop probability, which is required by ``PieQueueDisc::DropEarly()``
+
+  * ``PieQueueDisc::DoDequeue ()``: This routine calculates the average departure rate which is required for updating the drop probability in ``PieQueueDisc::CalculateP ()``  
+
+References
+==========
+
+.. [Pan13] Pan, R., Natarajan, P., Piglione, C., Prabhu, M. S., Subramanian, V., Baker, F., & VerSteeg, B. (2013, July). PIE: A lightweight control scheme to address the bufferbloat problem. In High Performance Switching and Routing (HPSR), 2013 IEEE 14th International Conference on (pp. 148-155). IEEE.  Available online at `<https://www.ietf.org/mail-archive/web/iccrg/current/pdfB57AZSheOH.pdf>`_.
+
+.. [Pan16] R. Pan, P. Natarajan, F. Baker, G. White, B. VerSteeg, M.S. Prabhu, C. Piglione, V. Subramanian, Internet-Draft: PIE: A lightweight control scheme to address the bufferbloat problem, April 2016.  Available online at `<https://tools.ietf.org/html/draft-ietf-aqm-pie-07>`_.
+
+.. comment
+   This ref defined in codel.rst:
+   [Buf14] Bufferbloat.net.  Available online at `<http://www.bufferbloat.net/>`_.
+
+Attributes
+==========
+
+The key attributes that the PieQueue class holds include the following: 
+
+* ``Mode:`` PIE operating mode (BYTES or PACKETS). The default mode is PACKETS. 
+* ``QueueLimit:`` The maximum number of bytes or packets the queue can hold. The default value is 25 bytes / packets.
+* ``MeanPktSize:`` Mean packet size in bytes. The default value is 1000 bytes.
+* ``Tupdate:`` Time period to calculate drop probability. The default value is 30 ms. 
+* ``Supdate:`` Start time of the update timer. The default value is 0 ms. 
+* ``DequeueThreshold:`` Minimum queue size in bytes before dequeue rate is measured. The default value is 10000 bytes. 
+* ``QueueDelayReference:`` Desired queue delay. The default value is 20 ms. 
+* ``MaxBurstAllowance:`` Current max burst allowance in seconds before random drop. The default value is 0.1 seconds.
+* ``A:`` Value of alpha. The default value is 0.125.
+* ``B:`` Value of beta. The default value is 1.25.
+
+Examples
+========
+
+The example for PIE is `pie-example.cc` located in ``src/traffic-control/examples``.  To run the file (the first invocation below shows the available
+command-line options):
+
+:: 
+
+   $ ./waf --run "pie-example --PrintHelp"
+   $ ./waf --run "pie-example --writePcap=1" 
+
+The expected output from the previous commands are 10 .pcap files.
+
+Validation
+**********
+
+The PIE model is tested using :cpp:class:`PieQueueDiscTestSuite` class defined in `src/traffic-control/test/pie-queue-test-suite.cc`. The suite includes 2 test cases:
+
+* Test 1: The first test checks the enqueue/dequeue with no drops and makes sure that PIE attributes can be set correctly.
+* Test 2: The second test checks the enqueue/dequeue with drops according to PIE algorithm
+
+The test suite can be run using the following commands: 
+
+::
+
+  $ ./waf configure --enable-examples --enable-tests
+  $ ./waf build
+  $ ./test.py -s pie-queue-disc
+
+or  
+
+::
+
+  $ NS_LOG="PieQueueDisc" ./waf --run "test-runner --suite=pie-queue-disc"
+
diff -Naur ns-3.25/src/traffic-control/doc/queue-discs.rst ns-3.26/src/traffic-control/doc/queue-discs.rst
--- ns-3.25/src/traffic-control/doc/queue-discs.rst	2016-10-03 20:57:08.319247074 -0700
+++ ns-3.26/src/traffic-control/doc/queue-discs.rst	2016-10-03 19:49:01.601387996 -0700
@@ -141,7 +141,6 @@
   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.
@@ -180,10 +179,11 @@
 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
+object holds a struct NetDeviceInfo which stores, for each NetDevice, a pointer to the
+root queue disc installed on the device, a pointer to the netdevice queue interface
+(see below) aggregated to the device, and a vector of pointers (one for each device
+transmission queue) to the queue discs to activate when the above
+problems occur. The traffic control layer takes care of configuring such a vector
 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
@@ -210,12 +210,6 @@
 
     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
@@ -228,7 +222,8 @@
   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 \
+* when notified that a netdevice queue interface has been aggregated, traffic control \
+  aware devices 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
@@ -237,5 +232,49 @@
   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.
+  calls the Initialize method of the root queue discs.
+
+Requeue
+========
+In Linux, a packet dequeued from a queue disc can be requeued (i.e., stored somewhere
+and sent to the device at a later time) in some circumstances. Firstly, the function
+used to dequeue a packet (dequeue_skb) actually dequeues a packet only if the device
+is multi-queue or the (unique) device queue is not stopped. If a packet has been
+dequeued from the queue disc, it is passed to the sch_direct_xmit function for
+transmission to the device. This function checks whether the device queue the packet is destined
+to is stopped, in which case the packet is requeued. Otherwise, the packet is sent to the device.
+If the device returns NETDEV_TX_BUSY, the packet is requeued. However, it is advised that
+the function called to send a packet to the device (ndo_start_xmit) should always
+return NETDEV_TX_OK, which means that the packet is consumed by the device driver
+and thus needs not to be requeued. However, the ndo_start_xmit function of the device
+driver is allowed to return NETDEV_TX_BUSY (and hence the packet is requeued) when
+there is no room for the received packet in the device queue, despite the queue is
+not stopped. This case is considered as a corner case or an hard error, and should be avoided.
+
+ns-3 implements the requeue mechanism in a similar manner, the only difference being
+that packets are not requeued when such corner cases occur. Basically, the method used
+to dequeue a packet (QueueDisc::DequeuePacket) actually dequeues a packet only if the
+device is multi-queue or the (unique) device queue is not stopped. If a packet has been
+dequeued from the queue disc, it is passed to the QueueDisc::Transmit method for
+transmission to the device. This method checks whether the device queue the packet is destined
+to is stopped, in which case the packet is requeued. Otherwise, the packet is sent to the device.
+We request netdevices to stop a device queue when it is not able to store another packet,
+so as to avoid the situation in which a packet is received that cannot be enqueued while
+the device queue is not stopped. Should such a corner case occur, the netdevice drops
+the packet but, unlike Linux, the value returned by NetDevice::Send is ignored and the
+packet is not requeued.
+
+
+The way the requeue mechanism is implemented in ns-3 has the following implications:
+
+* if the underlying device has a single queue, no packet will ever be requeued. Indeed, \
+  if the device queue is not stopped when QueueDisc::DequeuePacket is called, it will \
+  not be stopped also when QueueDisc::Transmit is called, hence the packet is not requeued \
+  (recall that a packet is not requeued after being sent to the device, as the value \
+  returned by NetDevice::Send is ignored).
+* if the underlying device does not implement flow control, i.e., it does not stop its queue(s), \
+  no packet will ever be requeued (recall that a packet is only requeued by QueueDisc::Transmit \
+  when the device queue the packet is destined to is stopped)
+
+It turns out that packets may only be requeued when the underlying device is multi-queue
+and supports flow control.
diff -Naur ns-3.25/src/traffic-control/examples/adaptive-red-tests.cc ns-3.26/src/traffic-control/examples/adaptive-red-tests.cc
--- ns-3.25/src/traffic-control/examples/adaptive-red-tests.cc	2016-10-03 20:57:08.321247059 -0700
+++ ns-3.26/src/traffic-control/examples/adaptive-red-tests.cc	2016-10-03 19:49:01.603387981 -0700
@@ -311,7 +311,6 @@
   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),
@@ -482,201 +481,45 @@
 
   RedQueueDisc::Stats st = StaticCast<RedQueueDisc> (queueDiscs.Get (0))->GetStats ();
 
-  if (aredTest == 1)
+  if (aredTest == 1 || aredTest == 2 || aredTest == 13)
     {
-      if (st.unforcedDrop > 2)
+      if (st.unforcedDrop > st.forcedDrop)
         {
-          std::cout << "Drops due to prob mark should be around 1" << std::endl;
+          std::cout << "Drops due to prob mark should be less than the drops due to hard mark" << 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)
+
+      if (st.qLimDrop == 0)
         {
-          std::cout << "There should be no drops due to queue full" << std::endl;
+          std::cout << "There should be some drops due to queue full" << std::endl;
           exit (-1);
         }
     }
-  else if (aredTest == 10)
+  else if (aredTest == 6 || aredTest == 7 || aredTest == 8 || aredTest == 9 || aredTest == 10 || aredTest == 14 || aredTest ==15)
     {
-      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)
+      if (st.unforcedDrop > st.forcedDrop)
         {
-          std::cout << "Number of drops due to hard mark is not in expected range, should be around 129" << std::endl;
+          std::cout << "Drops due to prob mark should be less than the drops due to hard mark" << std::endl;
           exit (-1);
         }
-      else if (st.qLimDrop != 0)
+
+      if (st.qLimDrop != 0)
         {
-          std::cout << "There should be no drops due to queue full" << std::endl;
+          std::cout << "There should be zero 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)
+      if (st.unforcedDrop < st.forcedDrop)
         {
-          std::cout << "Number of drops due to hard mark is not in expected range, should be around 129" << std::endl;
+          std::cout << "Drops due to prob mark should be more than the drops due to hard mark" << 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)
+
+      if (st.qLimDrop != 0)
         {
-          std::cout << "There should be no drops due to queue full" << std::endl;
+          std::cout << "There should be zero drops due to queue full" << std::endl;
           exit (-1);
         }
     }
diff -Naur ns-3.25/src/traffic-control/examples/codel-vs-pfifo-asymmetric.cc ns-3.26/src/traffic-control/examples/codel-vs-pfifo-asymmetric.cc
--- ns-3.25/src/traffic-control/examples/codel-vs-pfifo-asymmetric.cc	2016-10-03 20:57:08.321247059 -0700
+++ ns-3.26/src/traffic-control/examples/codel-vs-pfifo-asymmetric.cc	2016-10-03 19:49:01.603387981 -0700
@@ -343,8 +343,7 @@
   stack.InstallAll ();
 
   TrafficControlHelper tchPfifo;
-  uint32_t handle = tchPfifo.SetRootQueueDisc ("ns3::PfifoFastQueueDisc");
-  tchPfifo.AddPacketFilter (handle, "ns3::PfifoFastIpv4PacketFilter");
+  tchPfifo.SetRootQueueDisc ("ns3::PfifoFastQueueDisc");
 
   TrafficControlHelper tchCoDel;
   tchCoDel.SetRootQueueDisc ("ns3::CoDelQueueDisc");
diff -Naur ns-3.25/src/traffic-control/examples/codel-vs-pfifo-basic-test.cc ns-3.26/src/traffic-control/examples/codel-vs-pfifo-basic-test.cc
--- ns-3.25/src/traffic-control/examples/codel-vs-pfifo-basic-test.cc	2016-10-03 20:57:08.322247051 -0700
+++ ns-3.26/src/traffic-control/examples/codel-vs-pfifo-basic-test.cc	2016-10-03 19:49:01.603387981 -0700
@@ -150,8 +150,7 @@
   stack.InstallAll ();
 
   TrafficControlHelper tchPfifo;
-  uint32_t handle = tchPfifo.SetRootQueueDisc ("ns3::PfifoFastQueueDisc");
-  tchPfifo.AddPacketFilter (handle, "ns3::PfifoFastIpv4PacketFilter");
+  tchPfifo.SetRootQueueDisc ("ns3::PfifoFastQueueDisc");
 
   TrafficControlHelper tchCoDel;
   tchCoDel.SetRootQueueDisc ("ns3::CoDelQueueDisc");
diff -Naur ns-3.25/src/traffic-control/examples/pfifo-vs-red.cc ns-3.26/src/traffic-control/examples/pfifo-vs-red.cc
--- ns-3.25/src/traffic-control/examples/pfifo-vs-red.cc	2016-10-03 20:57:08.322247051 -0700
+++ ns-3.26/src/traffic-control/examples/pfifo-vs-red.cc	2016-10-03 19:49:01.604387973 -0700
@@ -138,8 +138,8 @@
 
   // 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.]"));
+  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; 
diff -Naur ns-3.25/src/traffic-control/examples/pie-example.cc ns-3.26/src/traffic-control/examples/pie-example.cc
--- ns-3.25/src/traffic-control/examples/pie-example.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/traffic-control/examples/pie-example.cc	2016-10-03 19:49:01.604387973 -0700
@@ -0,0 +1,333 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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
+ *
+ * Authors: Shravya Ks <shravya.ks0@gmail.com>
+ *          Smriti Murali <m.smriti.95@gmail.com>
+ *          Mohit P. Tahiliani <tahiliani@nitk.edu.in>
+ *
+ */
+
+/** Network topology
+ *
+ *    10Mb/s, 2ms                            10Mb/s, 4ms
+ * n0--------------|                    |---------------n4
+ *                 |    1.5Mbps, 20ms   |
+ *                 n2------------------n3
+ *    10Mb/s, 3ms  |  QueueLimit = 100  |    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 ("PieExample");
+
+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<PieQueueDisc> (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 ()
+{
+  // 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));
+  clientHelper1.SetAttribute ("DataRate", DataRateValue (DataRate ("10Mb/s")));
+
+  // 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));
+  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 ("PieQueueDisc", LOG_LEVEL_INFO);
+
+  std::string pieLinkDataRate = "1.5Mbps";
+  std::string pieLinkDelay = "20ms";
+
+  std::string pathOut;
+  bool writeForPlot = false;
+  bool writePcap = false;
+  bool flowMonitor = false;
+
+  bool printPieStats = 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
+  // Will only save in the directory if enable opts below
+  pathOut = "."; // Current directory
+  CommandLine cmd;
+  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);
+
+  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;
+
+  // PIE params
+  NS_LOG_INFO ("Set PIE params");
+  Config::SetDefault ("ns3::PieQueueDisc::Mode", StringValue ("QUEUE_MODE_PACKETS"));
+  Config::SetDefault ("ns3::PieQueueDisc::MeanPktSize", UintegerValue (meanPktSize));
+  Config::SetDefault ("ns3::PieQueueDisc::DequeueThreshold", UintegerValue (10000));
+  Config::SetDefault ("ns3::PieQueueDisc::QueueDelayReference", TimeValue (Seconds (0.02)));
+  Config::SetDefault ("ns3::PieQueueDisc::MaxBurstAllowance", TimeValue (Seconds (0.1)));
+  Config::SetDefault ("ns3::PieQueueDisc::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));
+
+  TrafficControlHelper tchPie;
+  tchPie.SetRootQueueDisc ("ns3::PieQueueDisc");
+
+  NS_LOG_INFO ("Create channels");
+  PointToPointHelper p2p;
+
+  NetDeviceContainer devn0n2;
+  NetDeviceContainer devn1n2;
+  NetDeviceContainer devn2n3;
+  NetDeviceContainer devn3n4;
+  NetDeviceContainer devn3n5;
+
+  QueueDiscContainer queueDiscs;
+
+  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 (pieLinkDataRate));
+  p2p.SetChannelAttribute ("Delay", StringValue (pieLinkDelay));
+  devn2n3 = p2p.Install (n2n3);
+  // only backbone link has PIE queue disc
+  queueDiscs = tchPie.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);
+
+  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 ();
+
+  if (writePcap)
+    {
+      PointToPointHelper ptp;
+      std::stringstream stmp;
+      stmp << pathOut << "/pie";
+      ptp.EnablePcapAll (stmp.str ().c_str ());
+    }
+
+  Ptr<FlowMonitor> flowmon;
+  if (flowMonitor)
+    {
+      FlowMonitorHelper flowmonHelper;
+      flowmon = flowmonHelper.InstallAll ();
+    }
+
+  if (writeForPlot)
+    {
+      filePlotQueueDisc << pathOut << "/" << "pie-queue-disc.plotme";
+      filePlotQueueDiscAvg << pathOut << "/" << "pie-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 ();
+
+  PieQueueDisc::Stats st = StaticCast<PieQueueDisc> (queueDiscs.Get (0))->GetStats ();
+
+  if (st.forcedDrop != 0)
+    {
+      std::cout << "There should be no drops due to queue full." << std::endl;
+      exit (-1);
+    }
+
+  if (flowMonitor)
+    {
+      std::stringstream stmp;
+      stmp << pathOut << "/pie.flowmon";
+
+      flowmon->SerializeToXmlFile (stmp.str ().c_str (), false, false);
+    }
+
+  if (printPieStats)
+    {
+      std::cout << "*** PIE 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 queue limits" << std::endl;
+    }
+
+  Simulator::Destroy ();
+
+  return 0;
+}
diff -Naur ns-3.25/src/traffic-control/examples/red-tests.cc ns-3.26/src/traffic-control/examples/red-tests.cc
--- ns-3.25/src/traffic-control/examples/red-tests.cc	2016-10-03 20:57:08.322247051 -0700
+++ ns-3.26/src/traffic-control/examples/red-tests.cc	2016-10-03 19:49:01.605387966 -0700
@@ -347,7 +347,6 @@
   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),
diff -Naur ns-3.25/src/traffic-control/examples/red-vs-ared.cc ns-3.26/src/traffic-control/examples/red-vs-ared.cc
--- ns-3.25/src/traffic-control/examples/red-vs-ared.cc	2016-10-03 20:57:08.323247043 -0700
+++ ns-3.26/src/traffic-control/examples/red-vs-ared.cc	2016-10-03 19:49:01.605387966 -0700
@@ -126,9 +126,10 @@
   stack.Install (d.GetLeft ());
   stack.Install (d.GetRight ());
   TrafficControlHelper tchBottleneck;
+  QueueDiscContainer queueDiscs;
   tchBottleneck.SetRootQueueDisc ("ns3::RedQueueDisc");
   tchBottleneck.Install (d.GetLeft ()->GetDevice (0));
-  tchBottleneck.Install (d.GetRight ()->GetDevice (0));
+  queueDiscs = tchBottleneck.Install (d.GetRight ()->GetDevice (0));
 
   // Assign IP Addresses
   d.AssignIpv4Addresses (Ipv4AddressHelper ("10.1.1.0", "255.255.255.0"),
@@ -137,8 +138,8 @@
 
   // 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.]"));
+  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;
@@ -165,78 +166,41 @@
   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 ();
-    }
+  RedQueueDisc::Stats st = StaticCast<RedQueueDisc> (queueDiscs.Get (0))->GetStats ();
 
   if (queueDiscType == "RED")
     {
-      if (modeBytes)
+      if (st.unforcedDrop > st.forcedDrop)
         {
-          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);
-            }
+          std::cout << "Drops due to prob mark should be less than the drops due to hard mark" << std::endl;
+          exit (-1);
         }
-      else
+
+      if (st.qLimDrop != 0)
         {
-          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);
-            }
+          std::cout << "There should be zero drops due to queue full" << std::endl;
+          exit (-1);
         }
     }
   else if (queueDiscType == "ARED")
     {
-      if (modeBytes)
+      if (st.unforcedDrop < st.forcedDrop)
         {
-          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);
-            }
+          std::cout << "Drops due to prob mark should be more than the drops due to hard mark" << std::endl;
+          exit (-1);
         }
-      else
+
+      if (st.qLimDrop != 0)
         {
-          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 << "There should be zero drops due to queue full" << 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 << "*** Stats from the bottleneck queue disc ***" << 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;
   std::cout << "Destroying the simulation" << std::endl;
 
   Simulator::Destroy ();
diff -Naur ns-3.25/src/traffic-control/examples/wscript ns-3.26/src/traffic-control/examples/wscript
--- ns-3.25/src/traffic-control/examples/wscript	2016-10-03 20:57:08.323247043 -0700
+++ ns-3.26/src/traffic-control/examples/wscript	2016-10-03 19:49:01.605387966 -0700
@@ -21,3 +21,5 @@
     obj = bld.create_ns3_program('codel-vs-pfifo-asymmetric', ['point-to-point','network', 'internet', 'applications', 'traffic-control'])
     obj.source = 'codel-vs-pfifo-asymmetric.cc'
 
+    obj = bld.create_ns3_program('pie-example', ['point-to-point', 'internet', 'applications', 'flow-monitor', 'traffic-control'])
+    obj.source = 'pie-example.cc'
diff -Naur ns-3.25/src/traffic-control/helper/traffic-control-helper.cc ns-3.26/src/traffic-control/helper/traffic-control-helper.cc
--- ns-3.25/src/traffic-control/helper/traffic-control-helper.cc	2016-10-03 20:57:08.324247036 -0700
+++ ns-3.26/src/traffic-control/helper/traffic-control-helper.cc	2016-10-03 19:49:01.606387959 -0700
@@ -21,6 +21,7 @@
 #include "ns3/log.h"
 #include "ns3/abort.h"
 #include "ns3/queue-disc.h"
+#include "ns3/queue-limits.h"
 #include "ns3/uinteger.h"
 #include "ns3/pointer.h"
 #include "ns3/traffic-control-layer.h"
@@ -111,8 +112,6 @@
   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;
 }
 
@@ -329,6 +328,28 @@
   return list;
 }
 
+void
+TrafficControlHelper::SetQueueLimits (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)
+{
+  m_queueLimitsFactory.SetTypeId (type);
+  m_queueLimitsFactory.Set (n01, v01);
+  m_queueLimitsFactory.Set (n02, v02);
+  m_queueLimitsFactory.Set (n03, v03);
+  m_queueLimitsFactory.Set (n04, v04);
+  m_queueLimitsFactory.Set (n05, v05);
+  m_queueLimitsFactory.Set (n06, v06);
+  m_queueLimitsFactory.Set (n07, v07);
+  m_queueLimitsFactory.Set (n08, v08);
+}
+
 QueueDiscContainer
 TrafficControlHelper::Install (Ptr<NetDevice> d)
 {
@@ -352,8 +373,26 @@
       container.Add (q);
     }
 
-  // Set the root queue disc on the device
-  tc->SetRootQueueDiscOnDevice (d, m_queueDiscs[0]);
+  // Set the root queue disc (if any has been created) on the device
+  if (!m_queueDiscs.empty () && m_queueDiscs[0])
+    {
+      tc->SetRootQueueDiscOnDevice (d, m_queueDiscs[0]);
+    }
+
+  // SetRootQueueDiscOnDevice calls SetupDevice (if it has not been called yet),
+  // which aggregates a netdevice queue interface to the device and creates the
+  // device transmission queues. Hence, we can install a queue limits object (if
+  // required) on all the device transmission queues
+  if (m_queueLimitsFactory.GetTypeId ().GetUid ())
+    {
+      Ptr<NetDeviceQueueInterface> ndqi = d->GetObject<NetDeviceQueueInterface> ();
+      NS_ASSERT (ndqi);
+      for (uint8_t i = 0; i < ndqi->GetNTxQueues (); i++)
+        {
+          Ptr<QueueLimits> ql = m_queueLimitsFactory.Create<QueueLimits> ();
+          ndqi->GetTxQueue (i)->SetQueueLimits (ql);
+        }
+    }
 
   return container;
 }
@@ -378,6 +417,15 @@
   NS_ASSERT (tc != 0);
 
   tc->DeleteRootQueueDiscOnDevice (d);
+  // remove the queue limits objects installed on the device transmission queues
+  Ptr<NetDeviceQueueInterface> ndqi = d->GetObject<NetDeviceQueueInterface> ();
+  // if a queue disc has been installed on the device, a netdevice queue interface
+  // must have been aggregated to the device
+  NS_ASSERT (ndqi);
+  for (uint8_t i = 0; i < ndqi->GetNTxQueues (); i++)
+    {
+      ndqi->GetTxQueue (i)->SetQueueLimits (0);
+    }
 }
 
 void
diff -Naur ns-3.25/src/traffic-control/helper/traffic-control-helper.h ns-3.26/src/traffic-control/helper/traffic-control-helper.h
--- ns-3.25/src/traffic-control/helper/traffic-control-helper.h	2016-10-03 20:57:08.325247028 -0700
+++ ns-3.26/src/traffic-control/helper/traffic-control-helper.h	2016-10-03 19:49:01.607387951 -0700
@@ -131,7 +131,7 @@
    * \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.
+   * of type DropTailQueue and size 1000 packets.
    */
   static TrafficControlHelper Default (void);
 
@@ -257,6 +257,9 @@
                         std::string n07 = "", const AttributeValue &v07 = EmptyAttributeValue (),
                         std::string n08 = "", const AttributeValue &v08 = EmptyAttributeValue ());
 
+  /**
+   * Container type for Class IDs
+   */
   typedef std::vector<uint16_t> ClassIdList;
 
   /**
@@ -351,6 +354,9 @@
                               std::string n14 = "", const AttributeValue &v14 = EmptyAttributeValue (),
                               std::string n15 = "", const AttributeValue &v15 = EmptyAttributeValue ());
 
+  /**
+   * Container type for Handlers
+   */
   typedef std::vector<uint16_t> HandleList;
 
   /**
@@ -411,6 +417,38 @@
                                  std::string n15 = "", const AttributeValue &v15 = EmptyAttributeValue ());
 
   /**
+   * Helper function used to add a queue limits object to the transmission
+   * queues of the devices
+   *
+   * \param type the type of queue
+   * \param n01 the name of the attribute to set on the queue limits object
+   * \param v01 the value of the attribute to set on the queue limits object
+   * \param n02 the name of the attribute to set on the queue limits object
+   * \param v02 the value of the attribute to set on the queue limits object
+   * \param n03 the name of the attribute to set on the queue limits object
+   * \param v03 the value of the attribute to set on the queue limits object
+   * \param n04 the name of the attribute to set on the queue limits object
+   * \param v04 the value of the attribute to set on the queue limits object
+   * \param n05 the name of the attribute to set on the queue limits object
+   * \param v05 the value of the attribute to set on the queue limits object
+   * \param n06 the name of the attribute to set on the queue limits object
+   * \param v06 the value of the attribute to set on the queue limits object
+   * \param n07 the name of the attribute to set on the queue limits object
+   * \param v07 the value of the attribute to set on the queue limits object
+   * \param n08 the name of the attribute to set on the queue limits object
+   * \param v08 the value of the attribute to set on the queue limits object
+   */
+  void SetQueueLimits (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 ());
+
+  /**
    * \param c set of devices
    * \returns a QueueDisc container with the queue discs installed on the devices
    *
@@ -419,18 +457,22 @@
    * 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.
+   * This method creates the queue discs (along with their packet filters,
+   * internal queues, classes) configured with the methods provided by this
+   * class and installs them on each device in the given container. Additionally,
+   * if configured, a queue limits object is installed on each transmission queue
+   * of the devices.
    */
   QueueDiscContainer Install (NetDeviceContainer c);
 
   /**
    * \param d device
-   * \returns a QueueDisc container with the queue disc installed on the device
+   * \returns a QueueDisc container with the queue discs 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.
+   * This method creates the queue discs (along with their packet filters,
+   * internal queues, classes) configured with the methods provided by this
+   * class and installs them on the given device. Additionally, if configured,
+   * a queue limits object is installed on each transmission queue of the device.
    */
   QueueDiscContainer Install (Ptr<NetDevice> d);
 
@@ -455,6 +497,8 @@
   std::vector<QueueDiscFactory> m_queueDiscFactory;
   /// Vector of all the created queue discs
   std::vector<Ptr<QueueDisc> > m_queueDiscs;
+  /// Factory to create a queue limits object
+  ObjectFactory m_queueLimitsFactory;
 };
 
 } // namespace ns3
diff -Naur ns-3.25/src/traffic-control/model/codel-queue-disc.cc ns-3.26/src/traffic-control/model/codel-queue-disc.cc
--- ns-3.25/src/traffic-control/model/codel-queue-disc.cc	2016-10-03 20:57:08.325247028 -0700
+++ ns-3.26/src/traffic-control/model/codel-queue-disc.cc	2016-10-03 19:49:01.608387944 -0700
@@ -296,13 +296,16 @@
   // Tag packet with current time for DoDequeue() to compute sojourn time
   CoDelTimestampTag tag;
   p->AddPacketTag (tag);
-  
-  GetInternalQueue (0)->Enqueue (item);
+
+  bool retval = GetInternalQueue (0)->Enqueue (item);
+
+  // If Queue::Enqueue fails, QueueDisc::Drop is called by the internal queue
+  // because QueueDisc::AddInternalQueue sets the drop callback
 
   NS_LOG_LOGIC ("Number packets " << GetInternalQueue (0)->GetNPackets ());
   NS_LOG_LOGIC ("Number bytes " << GetInternalQueue (0)->GetNBytes ());
 
-  return true;
+  return retval;
 }
 
 bool
diff -Naur ns-3.25/src/traffic-control/model/fq-codel-queue-disc.cc ns-3.26/src/traffic-control/model/fq-codel-queue-disc.cc
--- ns-3.25/src/traffic-control/model/fq-codel-queue-disc.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/traffic-control/model/fq-codel-queue-disc.cc	2016-10-03 19:49:01.608387944 -0700
@@ -0,0 +1,396 @@
+/* -*- 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
+ *
+ * Authors: Pasquale Imputato <p.imputato@gmail.com>
+ *          Stefano Avallone <stefano.avallone@unina.it>
+*/
+
+#include "ns3/log.h"
+#include "ns3/string.h"
+#include "fq-codel-queue-disc.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("FqCoDelQueueDisc");
+
+NS_OBJECT_ENSURE_REGISTERED (FqCoDelFlow);
+
+TypeId FqCoDelFlow::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::FqCoDelFlow")
+    .SetParent<QueueDiscClass> ()
+    .SetGroupName ("TrafficControl")
+    .AddConstructor<FqCoDelFlow> ()
+  ;
+  return tid;
+}
+
+FqCoDelFlow::FqCoDelFlow ()
+  : m_deficit (0),
+    m_status (INACTIVE)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+FqCoDelFlow::~FqCoDelFlow ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+FqCoDelFlow::SetDeficit (uint32_t deficit)
+{
+  NS_LOG_FUNCTION (this << deficit);
+  m_deficit = deficit;
+}
+
+int32_t
+FqCoDelFlow::GetDeficit (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_deficit;
+}
+
+void
+FqCoDelFlow::IncreaseDeficit (int32_t deficit)
+{
+  NS_LOG_FUNCTION (this << deficit);
+  m_deficit += deficit;
+}
+
+void
+FqCoDelFlow::SetStatus (FlowStatus status)
+{
+  NS_LOG_FUNCTION (this);
+  m_status = status;
+}
+
+FqCoDelFlow::FlowStatus
+FqCoDelFlow::GetStatus (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_status;
+}
+
+
+NS_OBJECT_ENSURE_REGISTERED (FqCoDelQueueDisc);
+
+TypeId FqCoDelQueueDisc::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::FqCoDelQueueDisc")
+    .SetParent<QueueDisc> ()
+    .SetGroupName ("TrafficControl")
+    .AddConstructor<FqCoDelQueueDisc> ()
+    .AddAttribute ("Interval",
+                   "The CoDel algorithm interval for each FQCoDel queue",
+                   StringValue ("100ms"),
+                   MakeStringAccessor (&FqCoDelQueueDisc::m_interval),
+                   MakeStringChecker ())
+    .AddAttribute ("Target",
+                   "The CoDel algorithm target queue delay for each FQCoDel queue",
+                   StringValue ("5ms"),
+                   MakeStringAccessor (&FqCoDelQueueDisc::m_target),
+                   MakeStringChecker ())
+    .AddAttribute ("PacketLimit",
+                   "The hard limit on the real queue size, measured in packets",
+                   UintegerValue (10 * 1024),
+                   MakeUintegerAccessor (&FqCoDelQueueDisc::m_limit),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("Flows",
+                   "The number of queues into which the incoming packets are classified",
+                   UintegerValue (1024),
+                   MakeUintegerAccessor (&FqCoDelQueueDisc::m_flows),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("DropBatchSize",
+                   "The maximum number of packets dropped from the fat flow",
+                   UintegerValue (64),
+                   MakeUintegerAccessor (&FqCoDelQueueDisc::m_dropBatchSize),
+                   MakeUintegerChecker<uint32_t> ())
+  ;
+  return tid;
+}
+
+FqCoDelQueueDisc::FqCoDelQueueDisc ()
+  : m_quantum (0),
+    m_overlimitDroppedPackets (0)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+FqCoDelQueueDisc::~FqCoDelQueueDisc ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+FqCoDelQueueDisc::SetQuantum (uint32_t quantum)
+{
+  NS_LOG_FUNCTION (this << quantum);
+  m_quantum = quantum;
+}
+
+uint32_t
+FqCoDelQueueDisc::GetQuantum (void) const
+{
+  return m_quantum;
+}
+
+bool
+FqCoDelQueueDisc::DoEnqueue (Ptr<QueueDiscItem> item)
+{
+  NS_LOG_FUNCTION (this << item);
+
+  int32_t ret = Classify (item);
+
+  if (ret == PacketFilter::PF_NO_MATCH)
+    {
+      NS_LOG_ERROR ("No filter has been able to classify this packet, drop it.");
+      Drop (item);
+      return false;
+    }
+
+  uint32_t h = ret % m_flows;
+
+  Ptr<FqCoDelFlow> flow;
+  if (m_flowsIndices.find (h) == m_flowsIndices.end ())
+    {
+      NS_LOG_DEBUG ("Creating a new flow queue with index " << h);
+      flow = m_flowFactory.Create<FqCoDelFlow> ();
+      Ptr<QueueDisc> qd = m_queueDiscFactory.Create<QueueDisc> ();
+      qd->Initialize ();
+      flow->SetQueueDisc (qd);
+      AddQueueDiscClass (flow);
+
+      m_flowsIndices[h] = GetNQueueDiscClasses () - 1;
+    }
+  else
+    {
+      flow = StaticCast<FqCoDelFlow> (GetQueueDiscClass (m_flowsIndices[h]));
+    }
+
+  if (flow->GetStatus () == FqCoDelFlow::INACTIVE)
+    {
+      flow->SetStatus (FqCoDelFlow::NEW_FLOW);
+      flow->SetDeficit (m_quantum);
+      m_newFlows.push_back (flow);
+    }
+
+  flow->GetQueueDisc ()->Enqueue (item);
+
+  NS_LOG_DEBUG ("Packet enqueued into flow " << h << "; flow index " << m_flowsIndices[h]);
+
+  if (GetNPackets () > m_limit)
+    {
+      FqCoDelDrop ();
+    }
+
+  return true;
+}
+
+Ptr<QueueDiscItem>
+FqCoDelQueueDisc::DoDequeue (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  Ptr<FqCoDelFlow> flow;
+  Ptr<QueueDiscItem> item;
+
+  do
+    {
+      bool found = false;
+
+      while (!found && !m_newFlows.empty ())
+        {
+          flow = m_newFlows.front ();
+
+          if (flow->GetDeficit () <= 0)
+            {
+              flow->IncreaseDeficit (m_quantum);
+              flow->SetStatus (FqCoDelFlow::OLD_FLOW);
+              m_oldFlows.push_back (flow);
+              m_newFlows.pop_front ();
+            }
+          else
+            {
+              NS_LOG_DEBUG ("Found a new flow with positive deficit");
+              found = true;
+            }
+        }
+
+      while (!found && !m_oldFlows.empty ())
+        {
+          flow = m_oldFlows.front ();
+
+          if (flow->GetDeficit () <= 0)
+            {
+              flow->IncreaseDeficit (m_quantum);
+              m_oldFlows.push_back (flow);
+              m_oldFlows.pop_front ();
+            }
+          else
+            {
+              NS_LOG_DEBUG ("Found an old flow with positive deficit");
+              found = true;
+            }
+        }
+
+      if (!found)
+        {
+          NS_LOG_DEBUG ("No flow found to dequeue a packet");
+          return 0;
+        }
+
+      item = flow->GetQueueDisc ()->Dequeue ();
+
+      if (!item)
+        {
+          NS_LOG_DEBUG ("Could not get a packet from the selected flow queue");
+          if (!m_newFlows.empty ())
+            {
+              flow->SetStatus (FqCoDelFlow::OLD_FLOW);
+              m_oldFlows.push_back (flow);
+              m_newFlows.pop_front ();
+            }
+          else
+            {
+              flow->SetStatus (FqCoDelFlow::INACTIVE);
+              m_oldFlows.pop_front ();
+            }
+        }
+      else
+        {
+          NS_LOG_DEBUG ("Dequeued packet " << item->GetPacket ());
+        }
+    } while (item == 0);
+
+  flow->IncreaseDeficit (-item->GetPacketSize ());
+
+  return item;
+}
+
+Ptr<const QueueDiscItem>
+FqCoDelQueueDisc::DoPeek (void) const
+{
+  NS_LOG_FUNCTION (this);
+
+  Ptr<FqCoDelFlow> flow;
+
+  if (!m_newFlows.empty ())
+    {
+      flow = m_newFlows.front ();
+    }
+  else
+    {
+      if (!m_oldFlows.empty ())
+        {
+          flow = m_oldFlows.front ();
+        }
+      else
+        {
+          return 0;
+        }
+    }
+
+  return flow->GetQueueDisc ()->Peek ();
+}
+
+bool
+FqCoDelQueueDisc::CheckConfig (void)
+{
+  NS_LOG_FUNCTION (this);
+  if (GetNQueueDiscClasses () > 0)
+    {
+      NS_LOG_ERROR ("FqCoDelQueueDisc cannot have classes");
+      return false;
+    }
+
+  if (GetNPacketFilters () == 0)
+    {
+      NS_LOG_ERROR ("FqCoDelQueueDisc needs at least a packet filter");
+      return false;
+    }
+
+  if (GetNInternalQueues () > 0)
+    {
+      NS_LOG_ERROR ("FqCoDelQueueDisc cannot have internal queues");
+      return false;
+    }
+
+  return true;
+}
+
+void
+FqCoDelQueueDisc::InitializeParams (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  // we are at initialization time. If the user has not set a quantum value,
+  // set the quantum to the MTU of the device
+  if (!m_quantum)
+    {
+      Ptr<NetDevice> device = GetNetDevice ();
+      NS_ASSERT_MSG (device, "Device not set for the queue disc");
+      m_quantum = device->GetMtu ();
+      NS_LOG_DEBUG ("Setting the quantum to the MTU of the device: " << m_quantum);
+    }
+
+  m_flowFactory.SetTypeId ("ns3::FqCoDelFlow");
+
+  m_queueDiscFactory.SetTypeId ("ns3::CoDelQueueDisc");
+  m_queueDiscFactory.Set ("Mode", EnumValue (Queue::QUEUE_MODE_PACKETS));
+  m_queueDiscFactory.Set ("MaxPackets", UintegerValue (m_limit + 1));
+  m_queueDiscFactory.Set ("Interval", StringValue (m_interval));
+  m_queueDiscFactory.Set ("Target", StringValue (m_target));
+}
+
+uint32_t
+FqCoDelQueueDisc::FqCoDelDrop (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  uint32_t maxBacklog = 0, index = 0;
+  Ptr<QueueDisc> qd;
+
+  /* Queue is full! Find the fat flow and drop packet(s) from it */
+  for (uint32_t i = 0; i < GetNQueueDiscClasses (); i++)
+    {
+      qd = GetQueueDiscClass (i)->GetQueueDisc ();
+      uint32_t bytes = qd->GetNBytes ();
+      if (bytes > maxBacklog)
+        {
+          maxBacklog = bytes;
+          index = i;
+        }
+    }
+
+  /* Our goal is to drop half of this fat flow backlog */
+  uint32_t len = 0, count = 0, threshold = maxBacklog >> 1;
+  qd = GetQueueDiscClass (index)->GetQueueDisc ();
+  Ptr<QueueItem> item;
+
+  do
+    {
+      item = qd->GetInternalQueue (0)->Remove ();
+      len += item->GetPacketSize ();
+    } while (++count < m_dropBatchSize && len < threshold);
+
+  m_overlimitDroppedPackets += count;
+
+  return index;
+}
+
+} // namespace ns3
diff -Naur ns-3.25/src/traffic-control/model/fq-codel-queue-disc.h ns-3.26/src/traffic-control/model/fq-codel-queue-disc.h
--- ns-3.25/src/traffic-control/model/fq-codel-queue-disc.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/traffic-control/model/fq-codel-queue-disc.h	2016-10-03 19:49:01.609387936 -0700
@@ -0,0 +1,162 @@
+/* -*- 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
+ *
+ * Authors: Pasquale Imputato <p.imputato@gmail.com>
+ *          Stefano Avallone <stefano.avallone@unina.it>
+ */
+
+#ifndef FQ_CODEL_QUEUE_DISC
+#define FQ_CODEL_QUEUE_DISC
+
+#include "ns3/queue-disc.h"
+#include "ns3/object-factory.h"
+#include <list>
+#include <map>
+
+namespace ns3 {
+
+/**
+ * \ingroup traffic-control
+ *
+ * \brief A flow queue used by the FqCoDel queue disc
+ */
+
+class FqCoDelFlow : public QueueDiscClass {
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+  /**
+   * \brief FqCoDelFlow constructor
+   */
+  FqCoDelFlow ();
+
+  virtual ~FqCoDelFlow ();
+
+  /**
+   * \enum FlowStatus
+   * \brief Used to determine the status of this flow queue
+   */
+  enum FlowStatus
+    {
+      INACTIVE,
+      NEW_FLOW,
+      OLD_FLOW
+    };
+
+  /**
+   * \brief Set the deficit for this flow
+   * \param deficit the deficit for this flow
+   */
+  void SetDeficit (uint32_t deficit);
+  /**
+   * \brief Get the deficit for this flow
+   * \return the deficit for this flow
+   */
+  int32_t GetDeficit (void) const;
+  /**
+   * \brief Increase the deficit for this flow
+   * \param deficit the amount by which the deficit is to be increased
+   */
+  void IncreaseDeficit (int32_t deficit);
+  /**
+   * \brief Set the status for this flow
+   * \param status the status for this flow
+   */
+  void SetStatus (FlowStatus status);
+  /**
+   * \brief Get the status of this flow
+   * \return the status of this flow
+   */
+  FlowStatus GetStatus (void) const;
+
+private:
+  int32_t m_deficit;    //!< the deficit for this flow
+  FlowStatus m_status;  //!< the status of this flow
+};
+
+
+/**
+ * \ingroup traffic-control
+ *
+ * \brief A FqCoDel packet queue disc
+ */
+
+class FqCoDelQueueDisc : public QueueDisc {
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+  /**
+   * \brief FqCoDelQueueDisc constructor
+   */
+  FqCoDelQueueDisc ();
+
+  virtual ~FqCoDelQueueDisc ();
+
+   /**
+    * \brief Set the quantum value.
+    *
+    * \param quantum The number of bytes each queue gets to dequeue on each round of the scheduling algorithm
+    */
+   void SetQuantum (uint32_t quantum);
+
+   /**
+    * \brief Get the quantum value.
+    *
+    * \returns The number of bytes each queue gets to dequeue on each round of the scheduling algorithm
+    */
+   uint32_t GetQuantum (void) const;
+
+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);
+
+  /**
+   * \brief Drop a packet from the head of the queue with the largest current byte count
+   * \return the index of the queue with the largest current byte count
+   */
+  uint32_t FqCoDelDrop (void);
+
+  std::string m_interval;    //!< CoDel interval attribute
+  std::string m_target;      //!< CoDel target attribute
+  uint32_t m_limit;          //!< Maximum number of packets in the queue disc
+  uint32_t m_quantum;        //!< Deficit assigned to flows at each round
+  uint32_t m_flows;          //!< Number of flow queues
+  uint32_t m_dropBatchSize;  //!< Max number of packets dropped from the fat flow
+
+  uint32_t m_overlimitDroppedPackets; //!< Number of overlimit dropped packets
+
+  std::list<Ptr<FqCoDelFlow> > m_newFlows;    //!< The list of new flows
+  std::list<Ptr<FqCoDelFlow> > m_oldFlows;    //!< The list of old flows
+
+  std::map<uint32_t, uint32_t> m_flowsIndices;    //!< Map with the index of class for each flow
+
+  ObjectFactory m_flowFactory;         //!< Factory to create a new flow
+  ObjectFactory m_queueDiscFactory;    //!< Factory to create a new queue
+};
+
+} // namespace ns3
+
+#endif /* FQ_CODEL_QUEUE_DISC */
diff -Naur ns-3.25/src/traffic-control/model/packet-filter.cc ns-3.26/src/traffic-control/model/packet-filter.cc
--- ns-3.25/src/traffic-control/model/packet-filter.cc	2016-10-03 20:57:08.326247020 -0700
+++ ns-3.26/src/traffic-control/model/packet-filter.cc	2016-10-03 19:49:01.609387936 -0700
@@ -32,6 +32,7 @@
 {
   static TypeId tid = TypeId ("ns3::PacketFilter")
     .SetParent<Object> ()
+    .SetGroupName ("TrafficControl")
   ;
   return tid;
 }
diff -Naur ns-3.25/src/traffic-control/model/packet-filter.h ns-3.26/src/traffic-control/model/packet-filter.h
--- ns-3.25/src/traffic-control/model/packet-filter.h	2016-10-03 20:57:08.326247020 -0700
+++ ns-3.26/src/traffic-control/model/packet-filter.h	2016-10-03 19:49:01.609387936 -0700
@@ -42,9 +42,16 @@
   PacketFilter ();
   virtual ~PacketFilter ();
 
+  /**
+   * Standard value used by packet filters to indicate that no match was possible.
+   */
   static const int PF_NO_MATCH = -1;
 
   /**
+   * \brief Classify a packet.
+   *
+   * \param item the packet to classify.
+   *
    * \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.
@@ -53,12 +60,19 @@
 
 private:
   /**
-   * \return true if this filter is able to classify packets of the same protocol as item.
+   * \brief Checks if the filter is able to classify a kind of items.
+   *
+   * \param item an example item to check.
+   * \return true if this filter is able to classify packets.
    */
   virtual bool CheckProtocol (Ptr<QueueDiscItem> item) const = 0;
 
   /**
-   * \return -1 if the item does not match the filter conditions, the configured
+   * \brief Classify a packet.
+   *
+   * \param item the packet to classify.
+   *
+   * \return -1 if the item does not match the filter conditions, or the configured
    * return value otherwise.
    */
   virtual int32_t DoClassify (Ptr<QueueDiscItem> item) const = 0;
diff -Naur ns-3.25/src/traffic-control/model/pfifo-fast-queue-disc.cc ns-3.26/src/traffic-control/model/pfifo-fast-queue-disc.cc
--- ns-3.25/src/traffic-control/model/pfifo-fast-queue-disc.cc	2016-10-03 20:57:08.327247012 -0700
+++ ns-3.26/src/traffic-control/model/pfifo-fast-queue-disc.cc	2016-10-03 19:49:01.610387929 -0700
@@ -24,6 +24,7 @@
 #include "ns3/pointer.h"
 #include "ns3/object-factory.h"
 #include "ns3/drop-tail-queue.h"
+#include "ns3/socket.h"
 #include "pfifo-fast-queue-disc.h"
 
 namespace ns3 {
@@ -57,6 +58,8 @@
   NS_LOG_FUNCTION (this);
 }
 
+const uint32_t PfifoFastQueueDisc::prio2band[16] = {1, 2, 2, 2, 1, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1};
+
 bool
 PfifoFastQueueDisc::DoEnqueue (Ptr<QueueDiscItem> item)
 {
@@ -69,33 +72,23 @@
       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)
+  uint8_t priority = 0;
+  SocketPriorityTag priorityTag;
+  if (item->GetPacket ()->PeekPacketTag (priorityTag))
     {
-      band = 1;
-      NS_LOG_DEBUG ("The filter returned an invalid value; using default band of " << band);
-    }
-  else
-    {
-      band = ret;
+      priority = priorityTag.GetPriority ();
     }
 
-  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 ());
+  uint32_t band = prio2band[priority & 0x0f];
+
+  bool retval = GetInternalQueue (band)->Enqueue (item);
+
+  // If Queue::Enqueue fails, QueueDisc::Drop is called by the internal queue
+  // because QueueDisc::AddInternalQueue sets the drop callback
+
+  NS_LOG_LOGIC ("Number packets band " << band << ": " << GetInternalQueue (band)->GetNPackets ());
 
-  return true;
+  return retval;
 }
 
 Ptr<QueueDiscItem>
@@ -148,9 +141,9 @@
       return false;
     }
 
-  if (GetNPacketFilters () == 0)
+  if (GetNPacketFilters () != 0)
     {
-      NS_LOG_ERROR ("PfifoFastQueueDisc needs at least a packet filter");
+      NS_LOG_ERROR ("PfifoFastQueueDisc needs no packet filter");
       return false;
     }
 
diff -Naur ns-3.25/src/traffic-control/model/pfifo-fast-queue-disc.h ns-3.26/src/traffic-control/model/pfifo-fast-queue-disc.h
--- ns-3.25/src/traffic-control/model/pfifo-fast-queue-disc.h	2016-10-03 20:57:08.327247012 -0700
+++ ns-3.26/src/traffic-control/model/pfifo-fast-queue-disc.h	2016-10-03 19:49:01.610387929 -0700
@@ -32,8 +32,7 @@
  *
  * 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.
+ * to three priority bands based on the packet priority.
  *
  * The system behaves similar to three ns3::DropTail queues operating
  * together, in which packets from higher priority bands are always
@@ -45,14 +44,7 @@
  * 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).
+ * than limit. No packet filter can be provided.
  */
 class PfifoFastQueueDisc : public QueueDisc {
 public:
@@ -71,6 +63,12 @@
   virtual ~PfifoFastQueueDisc();
 
 private:
+  /**
+   * Priority to band map. Values are taken from the prio2band array used by
+   * the Linux pfifo_fast queue disc.
+   */
+  static const uint32_t prio2band[16];
+
   virtual bool DoEnqueue (Ptr<QueueDiscItem> item);
   virtual Ptr<QueueDiscItem> DoDequeue (void);
   virtual Ptr<const QueueDiscItem> DoPeek (void) const;
diff -Naur ns-3.25/src/traffic-control/model/pie-queue-disc.cc ns-3.26/src/traffic-control/model/pie-queue-disc.cc
--- ns-3.25/src/traffic-control/model/pie-queue-disc.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/traffic-control/model/pie-queue-disc.cc	2016-10-03 19:49:01.610387929 -0700
@@ -0,0 +1,535 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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
+ *
+ * Authors: Shravya Ks <shravya.ks0@gmail.com>
+ *          Smriti Murali <m.smriti.95@gmail.com>
+ *          Mohit P. Tahiliani <tahiliani@nitk.edu.in>
+ */
+
+/*
+ * PORT NOTE: This code was ported from ns-2.36rc1 (queue/pie.cc).
+ * Most of the comments are also ported from the same.
+ */
+
+#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 "pie-queue-disc.h"
+#include "ns3/drop-tail-queue.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("PieQueueDisc");
+
+NS_OBJECT_ENSURE_REGISTERED (PieQueueDisc);
+
+TypeId PieQueueDisc::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::PieQueueDisc")
+    .SetParent<QueueDisc> ()
+    .SetGroupName ("TrafficControl")
+    .AddConstructor<PieQueueDisc> ()
+    .AddAttribute ("Mode",
+                   "Determines unit for QueueLimit",
+                   EnumValue (Queue::QUEUE_MODE_PACKETS),
+                   MakeEnumAccessor (&PieQueueDisc::SetMode),
+                   MakeEnumChecker (Queue::QUEUE_MODE_BYTES, "QUEUE_MODE_BYTES",
+                                    Queue::QUEUE_MODE_PACKETS, "QUEUE_MODE_PACKETS"))
+    .AddAttribute ("MeanPktSize",
+                   "Average of packet size",
+                   UintegerValue (1000),
+                   MakeUintegerAccessor (&PieQueueDisc::m_meanPktSize),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("A",
+                   "Value of alpha",
+                   DoubleValue (0.125),
+                   MakeDoubleAccessor (&PieQueueDisc::m_a),
+                   MakeDoubleChecker<double> ())
+    .AddAttribute ("B",
+                   "Value of beta",
+                   DoubleValue (1.25),
+                   MakeDoubleAccessor (&PieQueueDisc::m_b),
+                   MakeDoubleChecker<double> ())
+    .AddAttribute ("Tupdate",
+                   "Time period to calculate drop probability",
+                   TimeValue (Seconds (0.03)),
+                   MakeTimeAccessor (&PieQueueDisc::m_tUpdate),
+                   MakeTimeChecker ())
+    .AddAttribute ("Supdate",
+                   "Start time of the update timer",
+                   TimeValue (Seconds (0)),
+                   MakeTimeAccessor (&PieQueueDisc::m_sUpdate),
+                   MakeTimeChecker ())
+    .AddAttribute ("QueueLimit",
+                   "Queue limit in bytes/packets",
+                   UintegerValue (25),
+                   MakeUintegerAccessor (&PieQueueDisc::SetQueueLimit),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("DequeueThreshold",
+                   "Minimum queue size in bytes before dequeue rate is measured",
+                   UintegerValue (10000),
+                   MakeUintegerAccessor (&PieQueueDisc::m_dqThreshold),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("QueueDelayReference",
+                   "Desired queue delay",
+                   TimeValue (Seconds (0.02)),
+                   MakeTimeAccessor (&PieQueueDisc::m_qDelayRef),
+                   MakeTimeChecker ())
+    .AddAttribute ("MaxBurstAllowance",
+                   "Current max burst allowance in seconds before random drop",
+                   TimeValue (Seconds (0.1)),
+                   MakeTimeAccessor (&PieQueueDisc::m_maxBurst),
+                   MakeTimeChecker ())
+  ;
+
+  return tid;
+}
+
+PieQueueDisc::PieQueueDisc ()
+  : QueueDisc ()
+{
+  NS_LOG_FUNCTION (this);
+  m_uv = CreateObject<UniformRandomVariable> ();
+  m_rtrsEvent = Simulator::Schedule (m_sUpdate, &PieQueueDisc::CalculateP, this);
+}
+
+PieQueueDisc::~PieQueueDisc ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+PieQueueDisc::DoDispose (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_uv = 0;
+  Simulator::Remove (m_rtrsEvent);
+  QueueDisc::DoDispose ();
+}
+
+void
+PieQueueDisc::SetMode (Queue::QueueMode mode)
+{
+  NS_LOG_FUNCTION (this << mode);
+  m_mode = mode;
+}
+
+Queue::QueueMode
+PieQueueDisc::GetMode (void)
+{
+  NS_LOG_FUNCTION (this);
+  return m_mode;
+}
+
+void
+PieQueueDisc::SetQueueLimit (uint32_t lim)
+{
+  NS_LOG_FUNCTION (this << lim);
+  m_queueLimit = lim;
+}
+
+uint32_t
+PieQueueDisc::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 PIE mode.");
+    }
+}
+
+PieQueueDisc::Stats
+PieQueueDisc::GetStats ()
+{
+  NS_LOG_FUNCTION (this);
+  return m_stats;
+}
+
+Time
+PieQueueDisc::GetQueueDelay (void)
+{
+  NS_LOG_FUNCTION (this);
+  return m_qDelay;
+}
+
+int64_t
+PieQueueDisc::AssignStreams (int64_t stream)
+{
+  NS_LOG_FUNCTION (this << stream);
+  m_uv->SetStream (stream);
+  return 1;
+}
+
+bool
+PieQueueDisc::DoEnqueue (Ptr<QueueDiscItem> item)
+{
+  NS_LOG_FUNCTION (this << item);
+
+  uint32_t nQueued = GetQueueSize ();
+
+  if ((GetMode () == Queue::QUEUE_MODE_PACKETS && nQueued >= m_queueLimit)
+      || (GetMode () == Queue::QUEUE_MODE_BYTES && nQueued + item->GetPacketSize () > m_queueLimit))
+    {
+      // Drops due to queue limit: reactive
+      Drop (item);
+      m_stats.forcedDrop++;
+      return false;
+    }
+  else if (DropEarly (item, nQueued))
+    {
+      // Early probability drop: proactive
+      Drop (item);
+      m_stats.unforcedDrop++;
+      return false;
+    }
+
+  // No drop
+  bool retval = GetInternalQueue (0)->Enqueue (item);
+
+  // If Queue::Enqueue fails, QueueDisc::Drop is called by the internal queue
+  // because QueueDisc::AddInternalQueue sets the drop callback
+
+  NS_LOG_LOGIC ("\t bytesInQueue  " << GetInternalQueue (0)->GetNBytes ());
+  NS_LOG_LOGIC ("\t packetsInQueue  " << GetInternalQueue (0)->GetNPackets ());
+
+  return retval;
+}
+
+void
+PieQueueDisc::InitializeParams (void)
+{
+  // Initially queue is empty so variables are initialize to zero except m_dqCount
+  m_inMeasurement = false;
+  m_dqCount = -1;
+  m_dropProb = 0;
+  m_avgDqRate = 0.0;
+  m_dqStart = 0;
+  m_burstState = NO_BURST;
+  m_qDelayOld = Time (Seconds (0));
+  m_stats.forcedDrop = 0;
+  m_stats.unforcedDrop = 0;
+}
+
+bool PieQueueDisc::DropEarly (Ptr<QueueDiscItem> item, uint32_t qSize)
+{
+  NS_LOG_FUNCTION (this << item << qSize);
+  if (m_burstAllowance.GetSeconds () > 0)
+    {
+      // If there is still burst_allowance left, skip random early drop.
+      return false;
+    }
+
+  if (m_burstState == NO_BURST)
+    {
+      m_burstState = IN_BURST_PROTECTING;
+      m_burstAllowance = m_maxBurst;
+    }
+
+  double p = m_dropProb;
+
+  uint32_t packetSize = item->GetPacketSize ();
+
+  if (GetMode () == Queue::QUEUE_MODE_BYTES)
+    {
+      p = p * packetSize / m_meanPktSize;
+    }
+  bool earlyDrop = true;
+  double u =  m_uv->GetValue ();
+
+  if ((m_qDelayOld.GetSeconds () < (0.5 * m_qDelayRef.GetSeconds ())) && (m_dropProb < 0.2))
+    {
+      return false;
+    }
+  else if (GetMode () == Queue::QUEUE_MODE_BYTES && qSize <= 2 * m_meanPktSize)
+    {
+      return false;
+    }
+  else if (GetMode () == Queue::QUEUE_MODE_PACKETS && qSize <= 2)
+    {
+      return false;
+    }
+
+  if (u > p)
+    {
+      earlyDrop = false;
+    }
+  if (!earlyDrop)
+    {
+      return false;
+    }
+
+  return true;
+}
+
+void PieQueueDisc::CalculateP ()
+{
+  NS_LOG_FUNCTION (this);
+  Time qDelay;
+  double p = 0.0;
+  bool missingInitFlag = false;
+  if (m_avgDqRate > 0)
+    {
+      qDelay = Time (Seconds (GetInternalQueue (0)->GetNBytes () / m_avgDqRate));
+    }
+  else
+    {
+      qDelay = Time (Seconds (0));
+      missingInitFlag = true;
+    }
+
+  m_qDelay = qDelay;
+
+  if (m_burstAllowance.GetSeconds () > 0)
+    {
+      m_dropProb = 0;
+    }
+  else
+    {
+      p = m_a * (qDelay.GetSeconds () - m_qDelayRef.GetSeconds ()) + m_b * (qDelay.GetSeconds () - m_qDelayOld.GetSeconds ());
+      if (m_dropProb < 0.001)
+        {
+          p /= 32;
+        }
+      else if (m_dropProb < 0.01)
+        {
+          p /= 8;
+        }
+      else if (m_dropProb < 0.1)
+        {
+          p /= 2;
+        }
+      else if (m_dropProb < 1)
+        {
+          p /= 0.5;
+        }
+      else if (m_dropProb < 10)
+        {
+          p /= 0.125;
+        }
+      else
+        {
+          p /= 0.03125;
+        }
+      if ((m_dropProb >= 0.1) && (p > 0.02))
+        {
+          p = 0.02;
+        }
+    }
+
+  p += m_dropProb;
+
+  // For non-linear drop in prob
+
+  if (qDelay.GetSeconds () == 0 && m_qDelayOld.GetSeconds () == 0)
+    {
+      p *= 0.98;
+    }
+  else if (qDelay.GetSeconds () > 0.2)
+    {
+      p += 0.02;
+    }
+
+  m_dropProb = (p > 0) ? p : 0;
+  if (m_burstAllowance < m_tUpdate)
+    {
+      m_burstAllowance =  Time (Seconds (0));
+    }
+  else
+    {
+      m_burstAllowance -= m_tUpdate;
+    }
+
+  uint32_t burstResetLimit = BURST_RESET_TIMEOUT / m_tUpdate.GetSeconds ();
+  if ( (qDelay.GetSeconds () < 0.5 * m_qDelayRef.GetSeconds ()) && (m_qDelayOld.GetSeconds () < (0.5 * m_qDelayRef.GetSeconds ())) && (m_dropProb == 0) && !missingInitFlag )
+    {
+      m_dqCount = -1;
+      m_avgDqRate = 0.0;
+    }
+  if ( (qDelay.GetSeconds () < 0.5 * m_qDelayRef.GetSeconds ()) && (m_qDelayOld.GetSeconds () < (0.5 * m_qDelayRef.GetSeconds ())) && (m_dropProb == 0) && (m_burstAllowance.GetSeconds () == 0))
+    {
+      if (m_burstState == IN_BURST_PROTECTING)
+        {
+          m_burstState = IN_BURST;
+          m_burstReset = 0;
+        }
+      else if (m_burstState == IN_BURST)
+        {
+          m_burstReset++;
+          if (m_burstReset > burstResetLimit)
+            {
+              m_burstReset = 0;
+              m_burstState = NO_BURST;
+            }
+        }
+    }
+  else if (m_burstState == IN_BURST)
+    {
+      m_burstReset = 0;
+    }
+
+  m_qDelayOld = qDelay;
+  m_rtrsEvent = Simulator::Schedule (m_tUpdate, &PieQueueDisc::CalculateP, this);
+}
+
+Ptr<QueueDiscItem>
+PieQueueDisc::DoDequeue ()
+{
+  NS_LOG_FUNCTION (this);
+
+  if (GetInternalQueue (0)->IsEmpty ())
+    {
+      NS_LOG_LOGIC ("Queue empty");
+      return 0;
+    }
+
+  Ptr<QueueDiscItem> item = StaticCast<QueueDiscItem> (GetInternalQueue (0)->Dequeue ());
+  double now = Simulator::Now ().GetSeconds ();
+  uint32_t pktSize = item->GetPacketSize ();
+
+  // if not in a measurement cycle and the queue has built up to dq_threshold,
+  // start the measurement cycle
+
+  if ( (GetInternalQueue (0)->GetNBytes () >= m_dqThreshold) && (!m_inMeasurement) )
+    {
+      m_dqStart = now;
+      m_dqCount = 0;
+      m_inMeasurement = true;
+    }
+
+  if (m_inMeasurement)
+    {
+      m_dqCount += pktSize;
+
+      // done with a measurement cycle
+      if (m_dqCount >= m_dqThreshold)
+        {
+
+          double tmp = now - m_dqStart;
+
+          if (tmp > 0)
+            {
+              if (m_avgDqRate == 0)
+                {
+                  m_avgDqRate = m_dqCount / tmp;
+                }
+              else
+                {
+                  m_avgDqRate = (0.5 * m_avgDqRate) + (0.5 * (m_dqCount / tmp));
+                }
+            }
+
+          // restart a measurement cycle if there is enough data
+          if (GetInternalQueue (0)->GetNBytes () > m_dqThreshold)
+            {
+              m_dqStart = now;
+              m_dqCount = 0;
+              m_inMeasurement = true;
+            }
+          else
+            {
+              m_dqCount = 0;
+              m_inMeasurement = false;
+            }
+        }
+    }
+
+  return item;
+}
+
+Ptr<const QueueDiscItem>
+PieQueueDisc::DoPeek () 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
+PieQueueDisc::CheckConfig (void)
+{
+  NS_LOG_FUNCTION (this);
+  if (GetNQueueDiscClasses () > 0)
+    {
+      NS_LOG_ERROR ("PieQueueDisc cannot have classes");
+      return false;
+    }
+
+  if (GetNPacketFilters () > 0)
+    {
+      NS_LOG_ERROR ("PieQueueDisc 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 ("PieQueueDisc 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 PieQueueDisc");
+      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.25/src/traffic-control/model/pie-queue-disc.h ns-3.26/src/traffic-control/model/pie-queue-disc.h
--- ns-3.25/src/traffic-control/model/pie-queue-disc.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/traffic-control/model/pie-queue-disc.h	2016-10-03 19:49:01.611387921 -0700
@@ -0,0 +1,205 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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
+ *
+ * Authors: Shravya Ks <shravya.ks0@gmail.com>
+ *          Smriti Murali <m.smriti.95@gmail.com>
+ *          Mohit P. Tahiliani <tahiliani@nitk.edu.in>
+ */
+
+/*
+ * PORT NOTE: This code was ported from ns-2.36rc1 (queue/pie.h).
+ * Most of the comments are also ported from the same.
+ */
+
+#ifndef PIE_QUEUE_DISC_H
+#define PIE_QUEUE_DISC_H
+
+#include <queue>
+#include "ns3/packet.h"
+#include "ns3/queue-disc.h"
+#include "ns3/nstime.h"
+#include "ns3/boolean.h"
+#include "ns3/data-rate.h"
+#include "ns3/timer.h"
+#include "ns3/event-id.h"
+#include "ns3/random-variable-stream.h"
+
+#define BURST_RESET_TIMEOUT 1.5
+
+namespace ns3 {
+
+class TraceContainer;
+class UniformRandomVariable;
+
+/**
+ * \ingroup traffic-control
+ *
+ * \brief Implements PIE Active Queue Management discipline
+ */
+class PieQueueDisc : public QueueDisc
+{
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * \brief PieQueueDisc Constructor
+   */
+  PieQueueDisc ();
+
+  /**
+   * \brief PieQueueDisc Destructor
+   */
+  virtual ~PieQueueDisc ();
+
+  /**
+   * \brief Stats
+   */
+  typedef struct
+  {
+    uint32_t unforcedDrop;      //!< Early probability drops: proactive
+    uint32_t forcedDrop;        //!< Drops due to queue limit: reactive
+  } Stats;
+
+  /**
+   * \brief Burst types
+   */
+  enum BurstStateT
+  {
+    NO_BURST,
+    IN_BURST,
+    IN_BURST_PROTECTING,
+  };
+
+  /**
+   * \brief Set the operating mode of this queue.
+   *
+   * \param mode The operating mode of this queue.
+   */
+  void SetMode (Queue::QueueMode mode);
+
+  /**
+   * \brief 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 limit of the queue in bytes or packets.
+   *
+   * \param lim The limit in bytes or packets.
+   */
+  void SetQueueLimit (uint32_t lim);
+
+  /**
+   * \brief Get queue delay
+   */
+  Time GetQueueDelay (void);
+
+  /**
+   * \brief Get PIE 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.
+   */
+  virtual void InitializeParams (void);
+
+  /**
+   * \brief Check if a packet needs to be dropped due to probability drop
+   * \param item queue item
+   * \param qSize queue size
+   * \returns 0 for no drop, 1 for drop
+   */
+  bool DropEarly (Ptr<QueueDiscItem> item, uint32_t qSize);
+
+  /**
+   * Periodically update the drop probability based on the delay samples:
+   * not only the current delay sample but also the trend where the delay
+   * is going, up or down
+   */
+  void CalculateP ();
+
+  Stats m_stats;                                //!< PIE statistics
+
+  // ** Variables supplied by user
+  Queue::QueueMode m_mode;                      //!< Mode (bytes or packets)
+  uint32_t m_queueLimit;                        //!< Queue limit in bytes / packets
+  Time m_sUpdate;                               //!< Start time of the update timer
+  Time m_tUpdate;                               //!< Time period after which CalculateP () is called
+  Time m_qDelayRef;                             //!< Desired queue delay
+  uint32_t m_meanPktSize;                       //!< Average packet size in bytes
+  Time m_maxBurst;                              //!< Maximum burst allowed before random early dropping kicks in
+  double m_a;                                   //!< Parameter to pie controller
+  double m_b;                                   //!< Parameter to pie controller
+  uint32_t m_dqThreshold;                       //!< Minimum queue size in bytes before dequeue rate is measured
+
+  // ** Variables maintained by PIE
+  double m_dropProb;                            //!< Variable used in calculation of drop probability
+  Time m_qDelayOld;                             //!< Old value of queue delay
+  Time m_qDelay;                                //!< Current value of queue delay
+  Time m_burstAllowance;                        //!< Current max burst value in seconds that is allowed before random drops kick in
+  uint32_t m_burstReset;                        //!< Used to reset value of burst allowance
+  BurstStateT m_burstState;                     //!< Used to determine the current state of burst
+  bool m_inMeasurement;                         //!< Indicates whether we are in a measurement cycle
+  double m_avgDqRate;                           //!< Time averaged dequeue rate
+  double m_dqStart;                             //!< Start timestamp of current measurement cycle
+  uint32_t m_dqCount;                           //!< Number of bytes departed since current measurement cycle starts
+  EventId m_rtrsEvent;                          //!< Event used to decide the decision of interval of drop probability calculation
+  Ptr<UniformRandomVariable> m_uv;              //!< Rng stream
+};
+
+};   // namespace ns3
+
+#endif
+
diff -Naur ns-3.25/src/traffic-control/model/queue-disc.cc ns-3.26/src/traffic-control/model/queue-disc.cc
--- ns-3.25/src/traffic-control/model/queue-disc.cc	2016-10-03 20:57:08.327247012 -0700
+++ ns-3.26/src/traffic-control/model/queue-disc.cc	2016-10-03 19:49:01.611387921 -0700
@@ -23,6 +23,7 @@
 #include "ns3/pointer.h"
 #include "ns3/object-vector.h"
 #include "ns3/packet.h"
+#include "ns3/socket.h"
 #include "ns3/unused.h"
 #include "queue-disc.h"
 
@@ -118,6 +119,7 @@
 QueueDiscClass::SetQueueDisc (Ptr<QueueDisc> qd)
 {
   NS_LOG_FUNCTION (this);
+  NS_ABORT_MSG_IF (m_queueDisc, "Cannot set the queue disc on a class already having an attached queue disc");
   m_queueDisc = qd;
 }
 
@@ -312,6 +314,9 @@
 QueueDisc::AddInternalQueue (Ptr<Queue> queue)
 {
   NS_LOG_FUNCTION (this);
+  // set the drop callback on the internal queue, so that the queue disc is
+  // notified of packets dropped by the internal queue
+  queue->SetDropCallback (MakeCallback (&QueueDisc::Drop, this));
   m_queues.push_back (queue);
 }
 
@@ -353,6 +358,13 @@
 {
   NS_LOG_FUNCTION (this);
   NS_ABORT_MSG_IF (qdClass->GetQueueDisc () == 0, "Cannot add a class with no attached queue disc");
+  // the child queue disc cannot be one with wake mode equal to WAKE_CHILD because
+  // such queue discs do not implement the enqueue/dequeue methods
+  NS_ABORT_MSG_IF (qdClass->GetQueueDisc ()->GetWakeMode () == WAKE_CHILD,
+                   "A queue disc with WAKE_CHILD as wake mode can only be a root queue disc");
+  // set the parent drop callback on the child queue disc, so that it can notify
+  // packet drops to the parent queue disc
+  qdClass->GetQueueDisc ()->SetParentDropCallback (MakeCallback (&QueueDisc::Drop, this));
   m_classes.push_back (qdClass);
 }
 
@@ -390,9 +402,24 @@
 }
 
 void
-QueueDisc::Drop (Ptr<QueueDiscItem> item)
+QueueDisc::SetParentDropCallback (ParentDropCallback cb)
+{
+  m_parentDropCallback = cb;
+}
+
+void
+QueueDisc::Drop (Ptr<QueueItem> item)
 {
   NS_LOG_FUNCTION (this << item);
+
+  // if the wake mode of this queue disc is WAKE_CHILD, packets are directly
+  // enqueued/dequeued from the child queue discs, thus this queue disc does not
+  // keep valid packets/bytes counters and no actions need to be performed.
+  if (this->GetWakeMode () == WAKE_CHILD)
+    {
+      return;
+    }
+
   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"
@@ -405,6 +432,19 @@
 
   NS_LOG_LOGIC ("m_traceDrop (p)");
   m_traceDrop (item);
+
+  NotifyParentDrop (item);
+}
+
+void
+QueueDisc::NotifyParentDrop (Ptr<QueueItem> item)
+{
+  NS_LOG_FUNCTION (this << item);
+  // the parent drop callback is clearly null on root queue discs
+  if (!m_parentDropCallback.IsNull ())
+    {
+      m_parentDropCallback (item);
+    }
 }
 
 bool
@@ -537,7 +577,7 @@
       // 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 ())
+      if (m_devQueueIface->GetNTxQueues ()>1 || !m_devQueueIface->GetTxQueue (0)->IsStopped ())
         {
           item = Dequeue ();
           // If the item is not null, add the header to the packet.
@@ -572,29 +612,46 @@
 {
   NS_LOG_FUNCTION (this << item);
   NS_ASSERT (m_devQueueIface);
-  bool ret = false;
 
-  if (!m_devQueueIface->GetTxQueue (item->GetTxQueueIndex ())->IsStopped ())
+  // if the device queue is stopped, requeue the packet and return false.
+  // Note that if the underlying device is tc-unaware, packets are never
+  // requeued because the queues of tc-unaware devices are never stopped
+  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 ());
+      Requeue (item);
+      return false;
     }
 
-  // If the transmission did not happen or failed, requeue the item
-  if (!ret)
+  // a single queue device makes no use of the priority tag
+  if (m_devQueueIface->GetNTxQueues () == 1)
     {
-      Requeue (item);
+      SocketPriorityTag priorityTag;
+      item->GetPacket ()->RemovePacketTag (priorityTag);
     }
+  m_device->Send (item->GetPacket (), item->GetAddress (), item->GetProtocol ());
 
-  // If the transmission succeeded but now the queue is stopped, return false
-  if (ret && m_devQueueIface->GetTxQueue (item->GetTxQueueIndex ())->IsStopped ())
+  // the behavior here slightly diverges from Linux. In Linux, it is advised that
+  // the function called when a packet needs to be transmitted (ndo_start_xmit)
+  // should always return NETDEV_TX_OK, which means that the packet is consumed by
+  // the device driver and thus is not requeued. However, the ndo_start_xmit function
+  // of the device driver is allowed to return NETDEV_TX_BUSY (and hence the packet
+  // is requeued) when there is no room for the received packet in the device queue,
+  // despite the queue is not stopped. This case is considered as a corner case or
+  // an hard error, and should be avoided.
+  // Here, we do not handle such corner case and always assume that the packet is
+  // consumed by the netdevice. Thus, we ignore the value returned by Send and a
+  // packet sent to a netdevice is never requeued. The reason is that the semantics
+  // of the value returned by NetDevice::Send does not match that of the value
+  // returned by ndo_start_xmit.
+
+  // if the queue disc is empty or the device queue is now stopped, return false so
+  // that the Run method does not attempt to dequeue other packets and exits
+  if (GetNPackets () == 0 || m_devQueueIface->GetTxQueue (item->GetTxQueueIndex ())->IsStopped ())
     {
-      ret = false;
+      return false;
     }
 
-  return ret;
+  return true;
 }
 
 } // namespace ns3
diff -Naur ns-3.25/src/traffic-control/model/queue-disc.h ns-3.26/src/traffic-control/model/queue-disc.h
--- ns-3.25/src/traffic-control/model/queue-disc.h	2016-10-03 20:57:08.328247004 -0700
+++ ns-3.26/src/traffic-control/model/queue-disc.h	2016-10-03 19:49:01.612387914 -0700
@@ -421,6 +421,18 @@
    */
   WakeMode GetWakeMode (void);
 
+  /// Callback invoked by a child queue disc to notify the parent of a packet drop
+  typedef Callback<void, Ptr<QueueItem> > ParentDropCallback;
+
+  /**
+   * \brief Set the parent drop callback
+   * \param cb the callback to set
+   *
+   * Called when a queue disc class is added to a queue disc in order to set a
+   * callback to the Drop method of the parent queue disc.
+   */
+  virtual void SetParentDropCallback (ParentDropCallback cb);
+
 protected:
   /**
    * \brief Dispose of the object
@@ -437,9 +449,14 @@
    *  \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);
+  void Drop (Ptr<QueueItem> item);
 
 private:
+  /**
+   *  \brief Notify the parent queue disc of a packet drop
+   *  \param item item that was dropped
+   */
+  void NotifyParentDrop (Ptr<QueueItem> item);
 
   /**
    * This function actually enqueues a packet into the queue disc.
@@ -501,17 +518,18 @@
   /**
    * 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
+   * \param item the packet to requeue
    */
-  void Requeue (Ptr<QueueDiscItem> p);
+  void Requeue (Ptr<QueueDiscItem> item);
 
   /**
    * 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
+   * Sends a packet to the device if the device queue is not stopped, and requeues
+   * it otherwise.
+   * \param item the packet to transmit
+   * \return true if the device queue is not stopped and the queue disc is not empty
    */
-  bool Transmit (Ptr<QueueDiscItem> p);
+  bool Transmit (Ptr<QueueDiscItem> item);
 
   static const uint32_t DEFAULT_QUOTA = 64; //!< Default quota (as in /proc/sys/net/core/dev_weight)
 
@@ -533,6 +551,7 @@
   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
+  ParentDropCallback m_parentDropCallback;   //!< Parent drop callback
 
   /// Traced callback: fired when a packet is enqueued
   TracedCallback<Ptr<const QueueItem> > m_traceEnqueue;
diff -Naur ns-3.25/src/traffic-control/model/red-queue-disc.cc ns-3.26/src/traffic-control/model/red-queue-disc.cc
--- ns-3.25/src/traffic-control/model/red-queue-disc.cc	2016-10-03 20:57:08.328247004 -0700
+++ ns-3.26/src/traffic-control/model/red-queue-disc.cc	2016-10-03 19:49:01.612387914 -0700
@@ -410,12 +410,15 @@
       return false;
     }
 
-  GetInternalQueue (0)->Enqueue (item);
+  bool retval = GetInternalQueue (0)->Enqueue (item);
+
+  // If Queue::Enqueue fails, QueueDisc::Drop is called by the internal queue
+  // because QueueDisc::AddInternalQueue sets the drop callback
 
   NS_LOG_LOGIC ("Number packets " << GetInternalQueue (0)->GetNPackets ());
   NS_LOG_LOGIC ("Number bytes " << GetInternalQueue (0)->GetNBytes ());
 
-  return true;
+  return retval;
 }
 
 /*
diff -Naur ns-3.25/src/traffic-control/model/traffic-control-layer.cc ns-3.26/src/traffic-control/model/traffic-control-layer.cc
--- ns-3.25/src/traffic-control/model/traffic-control-layer.cc	2016-10-03 20:57:08.329246997 -0700
+++ ns-3.26/src/traffic-control/model/traffic-control-layer.cc	2016-10-03 19:49:01.613387906 -0700
@@ -19,8 +19,9 @@
 
 #include "traffic-control-layer.h"
 #include "ns3/log.h"
-#include "ns3/object-vector.h"
+#include "ns3/object-map.h"
 #include "ns3/packet.h"
+#include "ns3/socket.h"
 #include "ns3/queue-disc.h"
 
 namespace ns3 {
@@ -37,9 +38,10 @@
     .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> ())
+                   ObjectMapValue (),
+                   MakeObjectMapAccessor (&TrafficControlLayer::GetNDevices,
+                                          &TrafficControlLayer::GetRootQueueDiscOnDeviceByIndex),
+                   MakeObjectMapChecker<QueueDisc> ())
   ;
   return tid;
 }
@@ -61,9 +63,8 @@
 {
   NS_LOG_FUNCTION (this);
   m_node = 0;
-  m_rootQueueDiscs.clear ();
   m_handlers.clear ();
-  m_netDeviceQueueToQueueDiscMap.clear ();
+  m_netDevices.clear ();
   Object::DoDispose ();
 }
 
@@ -71,46 +72,37 @@
 TrafficControlLayer::DoInitialize (void)
 {
   NS_LOG_FUNCTION (this);
-  for (uint32_t j = 0; j < m_rootQueueDiscs.size (); j++)
+  std::map<Ptr<NetDevice>, NetDeviceInfo>::iterator ndi;
+  for (ndi = m_netDevices.begin (); ndi != m_netDevices.end (); ndi++)
     {
-      if (m_rootQueueDiscs[j])
+      if (ndi->second.rootQueueDisc)
         {
-          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;
+          Ptr<NetDeviceQueueInterface> devQueueIface = ndi->second.ndqi;
           NS_ASSERT (devQueueIface);
 
-          devQueueIface->SetQueueDiscInstalled (true);
-
           // set the wake callbacks on netdevice queues
-           if (m_rootQueueDiscs[j]->GetWakeMode () == QueueDisc::WAKE_ROOT)
+           if (ndi->second.rootQueueDisc->GetWakeMode () == QueueDisc::WAKE_ROOT)
             {
-              for (uint32_t i = 0; i < devQueueIface->GetTxQueuesN (); i++)
+              for (uint32_t i = 0; i < devQueueIface->GetNTxQueues (); i++)
                 {
-                  devQueueIface->GetTxQueue (i)->SetWakeCallback (MakeCallback (&QueueDisc::Run, m_rootQueueDiscs[j]));
-                  qdMap->second.second.push_back (m_rootQueueDiscs[j]);
+                  devQueueIface->GetTxQueue (i)->SetWakeCallback (MakeCallback (&QueueDisc::Run, ndi->second.rootQueueDisc));
+                  ndi->second.queueDiscsToWake.push_back (ndi->second.rootQueueDisc);
                 }
             }
-          else if (m_rootQueueDiscs[j]->GetWakeMode () == QueueDisc::WAKE_CHILD)
+          else if (ndi->second.rootQueueDisc->GetWakeMode () == QueueDisc::WAKE_CHILD)
             {
-              NS_ASSERT_MSG (m_rootQueueDiscs[j]->GetNQueueDiscClasses () == devQueueIface->GetTxQueuesN (),
+              NS_ASSERT_MSG (ndi->second.rootQueueDisc->GetNQueueDiscClasses () == devQueueIface->GetNTxQueues (),
                              "The number of child queue discs does not match the number of netdevice queues");
-              for (uint32_t i = 0; i < devQueueIface->GetTxQueuesN (); i++)
+              for (uint32_t i = 0; i < devQueueIface->GetNTxQueues (); 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 ());
+                                                                  ndi->second.rootQueueDisc->GetQueueDiscClass (i)->GetQueueDisc ()));
+                  ndi->second.queueDiscsToWake.push_back (ndi->second.rootQueueDisc->GetQueueDiscClass (i)->GetQueueDisc ());
                 }
             }
 
           // initialize the queue disc
-          m_rootQueueDiscs[j]->Initialize ();
+          ndi->second.rootQueueDisc->Initialize ();
         }
     }
   Object::DoInitialize ();
@@ -121,7 +113,11 @@
 {
   NS_LOG_FUNCTION (this << device);
 
-  // ensure this setup is done just once (in case of dual stack nodes)
+  // ensure this setup is done just once. SetupDevice is called by Ipv4L3Protocol
+  // and Ipv6L3Protocol when they add an interface, thus it might be called twice
+  // in case of dual stack nodes. Also, SetupDevice might be called twice if the
+  // tc helper is invoked (to install a queue disc) before the creation of the
+  // Ipv{4,6}Interface, since SetRootQueueDiscOnDevice calls SetupDevice
   if (device->GetObject<NetDeviceQueueInterface> ())
     {
       NS_LOG_DEBUG ("The setup for this device has been already done.");
@@ -132,11 +128,20 @@
   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");
+  // multi-queue devices must set the number of transmission queues in their
+  // NotifyNewAggregate method. Since we have just aggregated the netdevice
+  // queue interface to the device, we can create the transmission queues
+  devQueueIface->CreateTxQueues ();
+
+  // devices can set a select queue callback in their NotifyNewAggregate method
+  SelectQueueCallback cb = devQueueIface->GetSelectQueueCallback ();
+
+  // create an entry in the m_netDevices map for this device
+  NS_ASSERT_MSG (m_netDevices.find (device) == m_netDevices.end (), "This is a bug,"
+                 << "  SetupDevice only can insert an entry in the m_netDevices map");
 
-  m_netDeviceQueueToQueueDiscMap[device] = NetDeviceInfo (devQueueIface, QueueDiscVector ());
+  NetDeviceInfo entry = {0, devQueueIface, QueueDiscVector (), cb};
+  m_netDevices[device] = entry;
 }
 
 void
@@ -160,35 +165,45 @@
 void
 TrafficControlLayer::SetRootQueueDiscOnDevice (Ptr<NetDevice> device, Ptr<QueueDisc> qDisc)
 {
-  NS_LOG_FUNCTION (this << device);
+  NS_LOG_FUNCTION (this << device << qDisc);
+
+  std::map<Ptr<NetDevice>, NetDeviceInfo>::iterator ndi = m_netDevices.find (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 ())
+  if (ndi == m_netDevices.end ())
     {
-      m_rootQueueDiscs.resize (index+1);
+      // SetupDevice has not been called yet. This may happen when the tc helper is
+      // invoked (to install a queue disc) before the creation of the Ipv{4,6}Interface.
+      // Since queue discs require that a netdevice queue interface is aggregated
+      // to the device, call SetupDevice
+      SetupDevice (device);
+      ndi = m_netDevices.find (device);
+      NS_ASSERT (ndi != m_netDevices.end ());
     }
 
-  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;
+  NS_ASSERT_MSG (ndi->second.rootQueueDisc == 0, "Cannot install a root queue disc on a "
+                  << "device already having one. Delete the existing queue disc first.");
+  ndi->second.rootQueueDisc = qDisc;
 }
 
 Ptr<QueueDisc>
-TrafficControlLayer::GetRootQueueDiscOnDevice (Ptr<NetDevice> device)
+TrafficControlLayer::GetRootQueueDiscOnDevice (Ptr<NetDevice> device) const
 {
   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 ())
+  std::map<Ptr<NetDevice>, NetDeviceInfo>::const_iterator ndi = m_netDevices.find (device);
+
+  if (ndi == m_netDevices.end ())
     {
-      m_rootQueueDiscs.resize (index+1);
+      return 0;
     }
-  return m_rootQueueDiscs[index];
+  return ndi->second.rootQueueDisc;
+}
+
+Ptr<QueueDisc>
+TrafficControlLayer::GetRootQueueDiscOnDeviceByIndex (uint32_t index) const
+{
+  NS_LOG_FUNCTION (this << index);
+  return GetRootQueueDiscOnDevice (m_node->GetDevice (index));
 }
 
 void
@@ -196,15 +211,14 @@
 {
   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"  );
+  std::map<Ptr<NetDevice>, NetDeviceInfo>::iterator ndi = m_netDevices.find (device);
 
-  NS_ASSERT_MSG (index < m_rootQueueDiscs.size () && m_rootQueueDiscs[index] != 0, "No root queue disc"
+  NS_ASSERT_MSG (ndi != m_netDevices.end () && ndi->second.rootQueueDisc != 0, "No root queue disc"
                  << " installed on device " << device);
 
   // remove the root queue disc
-  m_rootQueueDiscs[index] = 0;
+  ndi->second.rootQueueDisc = 0;
+  ndi->second.queueDiscsToWake.clear ();
 }
 
 void
@@ -232,14 +246,12 @@
 }
 
 uint32_t
-TrafficControlLayer::GetDeviceIndex (Ptr<NetDevice> device)
+TrafficControlLayer::GetNDevices (void) const
 {
-  NS_LOG_FUNCTION (this << device);
-  uint32_t i;
-  for (i = 0; i < m_node->GetNDevices () && device != m_node->GetDevice (i); i++);
-  return i;
+  return m_node->GetNDevices ();
 }
 
+
 void
 TrafficControlLayer::Receive (Ptr<NetDevice> device, Ptr<const Packet> p,
                               uint16_t protocol, const Address &from, const Address &to,
@@ -282,22 +294,42 @@
   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;
+  std::map<Ptr<NetDevice>, NetDeviceInfo>::iterator ndi = m_netDevices.find (device);
+  NS_ASSERT (ndi != m_netDevices.end ());
+  Ptr<NetDeviceQueueInterface> devQueueIface = ndi->second.ndqi;
   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 ());
+  uint8_t txq = 0;
+  if (devQueueIface->GetNTxQueues () > 1)
+    {
+      if (!ndi->second.selectQueueCallback.IsNull ())
+        {
+          txq = ndi->second.selectQueueCallback (item);
+        }
+      // otherwise, Linux determines the queue index by using a hash function
+      // and associates such index to the socket which the packet belongs to,
+      // so that subsequent packets of the same socket will be mapped to the
+      // same tx queue (__netdev_pick_tx function in net/core/dev.c). It is
+      // pointless to implement this in ns-3 because currently the multi-queue
+      // devices provide a select queue callback
+    }
+
+  NS_ASSERT (txq < devQueueIface->GetNTxQueues ());
 
-  if (qdMap->second.second.empty ())
+  if (ndi->second.rootQueueDisc == 0)
     {
       // 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 ();
+          // a single queue device makes no use of the priority tag
+          if (devQueueIface->GetNTxQueues () == 1)
+            {
+              SocketPriorityTag priorityTag;
+              item->GetPacket ()->RemovePacketTag (priorityTag);
+            }
           device->Send (item->GetPacket (), item->GetAddress (), item->GetProtocol ());
         }
     }
@@ -307,7 +339,7 @@
       // selected for the packet and try to dequeue packets from such queue disc
       item->SetTxQueueIndex (txq);
 
-      Ptr<QueueDisc> qDisc = qdMap->second.second[txq];
+      Ptr<QueueDisc> qDisc = ndi->second.queueDiscsToWake[txq];
       NS_ASSERT (qDisc);
       qDisc->Enqueue (item);
       qDisc->Run ();
diff -Naur ns-3.25/src/traffic-control/model/traffic-control-layer.h ns-3.26/src/traffic-control/model/traffic-control-layer.h
--- ns-3.25/src/traffic-control/model/traffic-control-layer.h	2016-10-03 20:57:08.330246989 -0700
+++ ns-3.26/src/traffic-control/model/traffic-control-layer.h	2016-10-03 19:49:01.614387899 -0700
@@ -33,14 +33,19 @@
 class QueueDiscItem;
 
 /**
- * \ingroup traffic-control
+ * \defgroup traffic-control
+ *
+ * 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.
  *
- * \brief Traffic control layer definition
+ * \ingroup traffic-control
  *
- * 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.
+ * \brief Traffic control layer class
  *
+ * This object represents the main interface of the Traffic Control Module.
  * 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
@@ -147,7 +152,7 @@
    * \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);
+  virtual Ptr<QueueDisc> GetRootQueueDiscOnDevice (Ptr<NetDevice> device) const;
 
   /**
    * \brief This method can be used to remove the root queue disc (and associated
@@ -187,6 +192,9 @@
    */
   virtual void Send (Ptr<NetDevice> device, Ptr<QueueDiscItem> item);
 
+  /// Callback invoked to determine the tx queue selected for a given packet
+  typedef Callback< uint8_t, Ptr<QueueItem> > SelectQueueCallback;
+
 protected:
 
   virtual void DoDispose (void);
@@ -215,27 +223,35 @@
     bool promiscuous;              //!< true if it is a promiscuous handler
   };
 
+  /**
+   * \brief Information to store for each device
+   */
+  struct NetDeviceInfo {
+    Ptr<QueueDisc> rootQueueDisc;       //!< the root queue disc on the device
+    Ptr<NetDeviceQueueInterface> ndqi;  //!< the netdevice queue interface
+    QueueDiscVector queueDiscsToWake;   //!< the vector of queue discs to wake
+    SelectQueueCallback selectQueueCallback;  //!< the select queue callback
+  };
+
   /// 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
+   * \brief Required by the object map accessor
+   * \return the number of devices in the m_netDevices map
+   */
+  uint32_t GetNDevices (void) const;
+  /**
+   * \brief Required by the object map accessor
+   * \param index the index of the device in the node's device list
+   * \return the root queue disc installed on the specified device
    */
-  uint32_t GetDeviceIndex (Ptr<NetDevice> device);
+  Ptr<QueueDisc> GetRootQueueDiscOnDeviceByIndex (uint32_t index) const;
 
   /// 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;
+  /// Map storing the required information for each device with a queue disc installed
+  std::map<Ptr<NetDevice>, NetDeviceInfo> m_netDevices;
   ProtocolHandlerList m_handlers;  //!< List of upper-layer handlers
 };
 
diff -Naur ns-3.25/src/traffic-control/test/examples-to-run.py ns-3.26/src/traffic-control/test/examples-to-run.py
--- ns-3.25/src/traffic-control/test/examples-to-run.py	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/traffic-control/test/examples-to-run.py	2016-10-03 19:49:01.615387891 -0700
@@ -0,0 +1,46 @@
+#! /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 = [
+    ("adaptive-red-tests --testNumber=1", "True", "True"),
+    ("adaptive-red-tests --testNumber=2", "True", "True"),
+    ("adaptive-red-tests --testNumber=6", "True", "True"),
+    ("adaptive-red-tests --testNumber=7", "True", "True"),
+    ("adaptive-red-tests --testNumber=8", "True", "True"),
+    ("adaptive-red-tests --testNumber=9", "True", "True"),
+    ("adaptive-red-tests --testNumber=10", "True", "True"),
+    ("adaptive-red-tests --testNumber=12", "True", "True"),
+    ("adaptive-red-tests --testNumber=13", "True", "True"),
+    ("adaptive-red-tests --testNumber=14", "True", "True"),
+    ("adaptive-red-tests --testNumber=15", "True", "True"),
+    ("codel-vs-pfifo-asymmetric --routerWanQueueDiscType=PfifoFast --simDuration=10", "True", "True"),
+    ("codel-vs-pfifo-asymmetric --routerWanQueueDiscType=CoDel --simDuration=10", "True", "True"),
+    ("codel-vs-pfifo-basic-test --queueDiscType=PfifoFast --simDuration=10", "True", "True"),
+    ("codel-vs-pfifo-basic-test --queueDiscType=CoDel --simDuration=10", "True", "True"),
+    ("pfifo-vs-red --queueDiscType=PfifoFast", "True", "True"),
+    ("pfifo-vs-red --queueDiscType=PfifoFast --modeBytes=1", "True", "True"),
+    ("pfifo-vs-red --queueDiscType=RED", "True", "True"),
+    ("pfifo-vs-red --queueDiscType=RED --modeBytes=1", "True", "True"),
+    ("red-tests --testNumber=1", "True", "True"),
+    ("red-tests --testNumber=3", "True", "True"),
+    ("red-tests --testNumber=4", "True", "True"),
+    ("red-tests --testNumber=5", "True", "True"),
+    ("red-vs-ared --queueDiscType=RED", "True", "True"),
+    ("red-vs-ared --queueDiscType=RED --modeBytes=true", "True", "True"),
+    ("red-vs-ared --queueDiscType=ARED", "True", "True"),
+    ("red-vs-ared --queueDiscType=ARED --modeBytes=true", "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.25/src/traffic-control/wscript ns-3.26/src/traffic-control/wscript
--- ns-3.25/src/traffic-control/wscript	2016-10-03 20:57:08.331246981 -0700
+++ ns-3.26/src/traffic-control/wscript	2016-10-03 19:49:01.616387884 -0700
@@ -15,6 +15,8 @@
       'model/pfifo-fast-queue-disc.cc',
       'model/red-queue-disc.cc',
       'model/codel-queue-disc.cc',
+      'model/fq-codel-queue-disc.cc',
+      'model/pie-queue-disc.cc',
       'helper/traffic-control-helper.cc',
       'helper/queue-disc-container.cc'
         ]
@@ -34,6 +36,8 @@
       'model/pfifo-fast-queue-disc.h',
       'model/red-queue-disc.h',
       'model/codel-queue-disc.h',
+      'model/fq-codel-queue-disc.h',
+      'model/pie-queue-disc.h',
       'helper/traffic-control-helper.h',
       'helper/queue-disc-container.h'
         ]
diff -Naur ns-3.25/src/uan/bindings/modulegen__gcc_ILP32.py ns-3.26/src/uan/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/uan/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.336246942 -0700
+++ ns-3.26/src/uan/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.621387847 -0700
@@ -104,6 +104,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -118,6 +120,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -231,7 +235,7 @@
     ## uan-phy.h (module 'uan'): ns3::UanPhy [class]
     module.add_class('UanPhy', parent=root_module['ns3::Object'])
     ## uan-phy.h (module 'uan'): ns3::UanPhy::State [enumeration]
-    module.add_enum('State', ['IDLE', 'CCABUSY', 'RX', 'TX', 'SLEEP'], outer_class=root_module['ns3::UanPhy'])
+    module.add_enum('State', ['IDLE', 'CCABUSY', 'RX', 'TX', 'SLEEP', 'DISABLED'], outer_class=root_module['ns3::UanPhy'])
     ## uan-phy.h (module 'uan'): ns3::UanPhyCalcSinr [class]
     module.add_class('UanPhyCalcSinr', parent=root_module['ns3::Object'])
     ## uan-phy-gen.h (module 'uan'): ns3::UanPhyCalcSinrDefault [class]
@@ -298,6 +302,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## energy-harvester.h (module 'energy'): ns3::EnergyHarvester [class]
@@ -372,6 +380,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -485,12 +495,12 @@
 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 ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
     typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
     typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
     typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
@@ -509,6 +519,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
     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&')
@@ -642,6 +655,8 @@
     register_Ns3DeviceEnergyModel_methods(root_module, root_module['ns3::DeviceEnergyModel'])
     register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EnergyHarvester_methods(root_module, root_module['ns3::EnergyHarvester'])
     register_Ns3EnergySource_methods(root_module, root_module['ns3::EnergySource'])
@@ -907,6 +922,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2595,23 +2615,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2726,6 +2746,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2747,10 +2772,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2772,6 +2797,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2787,6 +2816,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3UanAddress_methods(root_module, cls):
@@ -3341,6 +3374,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -4713,6 +4751,11 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## uan-phy.h (module 'uan'): void ns3::UanPhy::EnergyRechargeHandler() [member function]
+    cls.add_method('EnergyRechargeHandler', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
     ## uan-phy.h (module 'uan'): double ns3::UanPhy::GetCcaThresholdDb() [member function]
     cls.add_method('GetCcaThresholdDb', 
                    'double', 
@@ -5017,6 +5060,11 @@
                    'void', 
                    [], 
                    is_virtual=True)
+    ## uan-phy-dual.h (module 'uan'): void ns3::UanPhyDual::EnergyRechargeHandler() [member function]
+    cls.add_method('EnergyRechargeHandler', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## uan-phy-dual.h (module 'uan'): double ns3::UanPhyDual::GetCcaThresholdDb() [member function]
     cls.add_method('GetCcaThresholdDb', 
                    'double', 
@@ -5356,6 +5404,11 @@
                    'void', 
                    [], 
                    is_virtual=True)
+    ## uan-phy-gen.h (module 'uan'): void ns3::UanPhyGen::EnergyRechargeHandler() [member function]
+    cls.add_method('EnergyRechargeHandler', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## uan-phy-gen.h (module 'uan'): double ns3::UanPhyGen::GetCcaThresholdDb() [member function]
     cls.add_method('GetCcaThresholdDb', 
                    'double', 
@@ -6368,6 +6421,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -7279,16 +7396,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -7316,35 +7448,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -7864,6 +7991,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
@@ -8393,6 +8525,10 @@
     cls.add_method('SetEnergyDepletionCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+    ## acoustic-modem-energy-model.h (module 'uan'): void ns3::AcousticModemEnergyModel::SetEnergyRechargeCallback(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('SetEnergyRechargeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
     ## acoustic-modem-energy-model.h (module 'uan'): void ns3::AcousticModemEnergyModel::SetEnergySource(ns3::Ptr<ns3::EnergySource> source) [member function]
     cls.add_method('SetEnergySource', 
                    'void', 
diff -Naur ns-3.25/src/uan/bindings/modulegen__gcc_LP64.py ns-3.26/src/uan/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/uan/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.341246903 -0700
+++ ns-3.26/src/uan/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.626387809 -0700
@@ -104,6 +104,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -118,6 +120,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -231,7 +235,7 @@
     ## uan-phy.h (module 'uan'): ns3::UanPhy [class]
     module.add_class('UanPhy', parent=root_module['ns3::Object'])
     ## uan-phy.h (module 'uan'): ns3::UanPhy::State [enumeration]
-    module.add_enum('State', ['IDLE', 'CCABUSY', 'RX', 'TX', 'SLEEP'], outer_class=root_module['ns3::UanPhy'])
+    module.add_enum('State', ['IDLE', 'CCABUSY', 'RX', 'TX', 'SLEEP', 'DISABLED'], outer_class=root_module['ns3::UanPhy'])
     ## uan-phy.h (module 'uan'): ns3::UanPhyCalcSinr [class]
     module.add_class('UanPhyCalcSinr', parent=root_module['ns3::Object'])
     ## uan-phy-gen.h (module 'uan'): ns3::UanPhyCalcSinrDefault [class]
@@ -298,6 +302,10 @@
     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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## energy-harvester.h (module 'energy'): ns3::EnergyHarvester [class]
@@ -372,6 +380,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -485,12 +495,12 @@
 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 ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
     typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
     typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
     typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
@@ -509,6 +519,9 @@
     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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
     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&')
@@ -642,6 +655,8 @@
     register_Ns3DeviceEnergyModel_methods(root_module, root_module['ns3::DeviceEnergyModel'])
     register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EnergyHarvester_methods(root_module, root_module['ns3::EnergyHarvester'])
     register_Ns3EnergySource_methods(root_module, root_module['ns3::EnergySource'])
@@ -907,6 +922,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2595,23 +2615,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2726,6 +2746,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2747,10 +2772,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2772,6 +2797,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2787,6 +2816,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3UanAddress_methods(root_module, cls):
@@ -3341,6 +3374,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -4713,6 +4751,11 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## uan-phy.h (module 'uan'): void ns3::UanPhy::EnergyRechargeHandler() [member function]
+    cls.add_method('EnergyRechargeHandler', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
     ## uan-phy.h (module 'uan'): double ns3::UanPhy::GetCcaThresholdDb() [member function]
     cls.add_method('GetCcaThresholdDb', 
                    'double', 
@@ -5017,6 +5060,11 @@
                    'void', 
                    [], 
                    is_virtual=True)
+    ## uan-phy-dual.h (module 'uan'): void ns3::UanPhyDual::EnergyRechargeHandler() [member function]
+    cls.add_method('EnergyRechargeHandler', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## uan-phy-dual.h (module 'uan'): double ns3::UanPhyDual::GetCcaThresholdDb() [member function]
     cls.add_method('GetCcaThresholdDb', 
                    'double', 
@@ -5356,6 +5404,11 @@
                    'void', 
                    [], 
                    is_virtual=True)
+    ## uan-phy-gen.h (module 'uan'): void ns3::UanPhyGen::EnergyRechargeHandler() [member function]
+    cls.add_method('EnergyRechargeHandler', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## uan-phy-gen.h (module 'uan'): double ns3::UanPhyGen::GetCcaThresholdDb() [member function]
     cls.add_method('GetCcaThresholdDb', 
                    'double', 
@@ -6368,6 +6421,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -7279,16 +7396,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -7316,35 +7448,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -7864,6 +7991,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
@@ -8393,6 +8525,10 @@
     cls.add_method('SetEnergyDepletionCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+    ## acoustic-modem-energy-model.h (module 'uan'): void ns3::AcousticModemEnergyModel::SetEnergyRechargeCallback(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('SetEnergyRechargeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
     ## acoustic-modem-energy-model.h (module 'uan'): void ns3::AcousticModemEnergyModel::SetEnergySource(ns3::Ptr<ns3::EnergySource> source) [member function]
     cls.add_method('SetEnergySource', 
                    'void', 
diff -Naur ns-3.25/src/uan/model/acoustic-modem-energy-model.cc ns-3.26/src/uan/model/acoustic-modem-energy-model.cc
--- ns-3.25/src/uan/model/acoustic-modem-energy-model.cc	2016-10-03 20:57:08.347246856 -0700
+++ ns-3.26/src/uan/model/acoustic-modem-energy-model.cc	2016-10-03 19:49:01.632387765 -0700
@@ -190,6 +190,18 @@
 }
 
 void
+AcousticModemEnergyModel::SetEnergyRechargeCallback (
+  AcousticModemEnergyRechargeCallback callback)
+{
+  NS_LOG_FUNCTION (this);
+  if (callback.IsNull ())
+    {
+      NS_LOG_DEBUG ("AcousticModemEnergyModel:Setting NULL energy recharge callback!");
+    }
+  m_energyRechargeCallback = callback;
+}
+
+void
 AcousticModemEnergyModel::ChangeState (int newState)
 {
   NS_LOG_FUNCTION (this << newState);
@@ -215,6 +227,9 @@
     case UanPhy::SLEEP:
       energyToDecrease = duration.GetSeconds () * m_sleepPowerW;
       break;
+    case UanPhy::DISABLED:
+      energyToDecrease = 0;
+      break;
     default:
       NS_FATAL_ERROR ("AcousticModemEnergyModel:Undefined radio state!");
     }
@@ -228,8 +243,11 @@
   // notify energy source
   m_source->UpdateEnergySource ();
 
-  // update current state & last update time stamp
-  SetMicroModemState (newState);
+  if (m_currentState != UanPhy::DISABLED)
+    {
+      // update current state & last update time stamp
+      SetMicroModemState (newState);
+    }
 
   // some debug message
   NS_LOG_DEBUG ("AcousticModemEnergyModel:Total energy consumption at node #" <<
@@ -250,6 +268,24 @@
   // invoke the phy energy depletion handler
   Ptr<UanNetDevice> dev = m_node->GetDevice (0)->GetObject<UanNetDevice> ();
   dev->GetPhy ()->EnergyDepletionHandler ();
+  SetMicroModemState(UanPhy::DISABLED);
+}
+
+void
+AcousticModemEnergyModel::HandleEnergyRecharged (void)
+{
+  NS_LOG_FUNCTION (this);
+  NS_LOG_DEBUG ("AcousticModemEnergyModel:Energy is recharged at node #" <<
+                m_node->GetId ());
+  // invoke energy recharge callback, if set.
+  if (!m_energyRechargeCallback.IsNull ())
+    {
+      m_energyRechargeCallback ();
+    }
+  // invoke the phy energy recharge handler
+  Ptr<UanNetDevice> dev = m_node->GetDevice (0)->GetObject<UanNetDevice> ();
+  dev->GetPhy ()->EnergyRechargeHandler ();
+  SetMicroModemState(UanPhy::IDLE);
 }
 
 /*
@@ -269,7 +305,7 @@
 AcousticModemEnergyModel::DoGetCurrentA (void) const
 {
   NS_LOG_FUNCTION (this);
-
+  
   double supplyVoltage = m_source->GetSupplyVoltage ();
   NS_ASSERT (supplyVoltage != 0.0);
   double stateCurrent = 0.0;
@@ -287,6 +323,9 @@
     case UanPhy::SLEEP:
       stateCurrent = m_sleepPowerW / supplyVoltage;
       break;
+    case UanPhy::DISABLED:
+      stateCurrent = 0.0;
+      break;
     default:
       NS_FATAL_ERROR ("AcousticModemEnergyModel:Undefined radio state!");
     }
@@ -323,6 +362,9 @@
         case UanPhy::SLEEP:
           stateName = "SLEEP";
           break;
+        case UanPhy::DISABLED:
+          stateName = "DISABLED";
+          break;
         }
       NS_LOG_DEBUG ("AcousticModemEnergyModel:Switching to state: " << stateName <<
                     " at time = " << Simulator::Now ());
diff -Naur ns-3.25/src/uan/model/acoustic-modem-energy-model.h ns-3.26/src/uan/model/acoustic-modem-energy-model.h
--- ns-3.25/src/uan/model/acoustic-modem-energy-model.h	2016-10-03 20:57:08.347246856 -0700
+++ ns-3.26/src/uan/model/acoustic-modem-energy-model.h	2016-10-03 19:49:01.632387765 -0700
@@ -57,6 +57,9 @@
 public:
   /** Callback type for energy depletion handling. */
   typedef Callback<void> AcousticModemEnergyDepletionCallback;
+  
+  /** Callback type for energy recharge handling. */
+  typedef Callback<void> AcousticModemEnergyRechargeCallback;
 
 public:  
   /**
@@ -156,6 +159,13 @@
    * Sets callback for energy depletion handling.
    */
   void SetEnergyDepletionCallback (AcousticModemEnergyDepletionCallback callback);
+  
+  /**
+   * \param callback Callback function.
+   *
+   * Sets callback for energy recharge handling.
+   */
+  void SetEnergyRechargeCallback (AcousticModemEnergyRechargeCallback callback);
 
   /**
    * Changes state of the AcousticModemEnergyModel.
@@ -174,9 +184,7 @@
    *
    * Not implemented
    */
-  virtual void HandleEnergyRecharged (void)
-  {
-  }
+  virtual void HandleEnergyRecharged (void);
 
 
 private:
@@ -222,6 +230,9 @@
 
   /** Energy depletion callback. */
   AcousticModemEnergyDepletionCallback m_energyDepletionCallback;
+  
+  /** Energy recharge callback. */
+  AcousticModemEnergyRechargeCallback m_energyRechargeCallback;
 
 };  // class AcousticModemEnergyModel
 
diff -Naur ns-3.25/src/uan/model/uan-phy-dual.cc ns-3.26/src/uan/model/uan-phy-dual.cc
--- ns-3.25/src/uan/model/uan-phy-dual.cc	2016-10-03 20:57:08.357246778 -0700
+++ ns-3.26/src/uan/model/uan-phy-dual.cc	2016-10-03 19:49:01.642387690 -0700
@@ -253,6 +253,12 @@
 }
 
 void
+UanPhyDual::EnergyRechargeHandler ()
+{
+  NS_LOG_DEBUG ("Not Implemented");
+}
+
+void
 UanPhyDual::SendPacket (Ptr<Packet> pkt, uint32_t modeNum)
 {
   if (modeNum <= m_phy1->GetNModes () - 1)
diff -Naur ns-3.25/src/uan/model/uan-phy-dual.h ns-3.26/src/uan/model/uan-phy-dual.h
--- ns-3.25/src/uan/model/uan-phy-dual.h	2016-10-03 20:57:08.357246778 -0700
+++ ns-3.26/src/uan/model/uan-phy-dual.h	2016-10-03 19:49:01.642387690 -0700
@@ -96,6 +96,7 @@
   // Inherited methods:
   virtual void SetEnergyModelCallback (DeviceEnergyModel::ChangeStateCallback callback);
   virtual void EnergyDepletionHandler (void);
+  virtual void EnergyRechargeHandler (void);
   virtual void SendPacket (Ptr<Packet> pkt, uint32_t modeNum);
 
   /**
@@ -113,7 +114,7 @@
   virtual void SetReceiveErrorCallback (RxErrCallback cb);
   virtual void SetRxGainDb (double gain);
   virtual void SetTxPowerDb (double txpwr);
-  virtual void SetRxThresholdDb (double thresh) NS_DEPRECATED;
+  NS_DEPRECATED virtual void SetRxThresholdDb (double thresh);
   virtual void SetCcaThresholdDb (double thresh);
   virtual double GetRxGainDb (void);
   virtual double GetTxPowerDb (void);
diff -Naur ns-3.25/src/uan/model/uan-phy-gen.cc ns-3.26/src/uan/model/uan-phy-gen.cc
--- ns-3.25/src/uan/model/uan-phy-gen.cc	2016-10-03 20:57:08.358246770 -0700
+++ ns-3.26/src/uan/model/uan-phy-gen.cc	2016-10-03 19:49:01.643387683 -0700
@@ -358,8 +358,8 @@
     m_rxThreshDb (0),
     m_ccaThreshDb (0),
     m_pktRx (0),
-    m_cleared (false),
-    m_disabled (false)
+    m_pktTx (0),
+    m_cleared (false)
 {
   m_pg = CreateObject<UniformRandomVariable> ();
 
@@ -513,15 +513,37 @@
   NS_LOG_FUNCTION (this);
   NS_LOG_DEBUG ("Energy depleted at node " << m_device->GetNode ()->GetId () <<
                 ", stopping rx/tx activities");
+  
+  m_state = DISABLED;
+  if(m_txEndEvent.IsRunning ())
+    {
+      Simulator::Cancel (m_txEndEvent);
+      NotifyTxDrop (m_pktTx);
+      m_pktTx = 0;
+    }
+  if(m_rxEndEvent.IsRunning ())
+    {
+      Simulator::Cancel (m_rxEndEvent);
+      NotifyRxDrop (m_pktRx);
+      m_pktRx = 0;
+    }
+}
+
+void
+UanPhyGen::EnergyRechargeHandler ()
+{
+  NS_LOG_FUNCTION (this);
+  NS_LOG_DEBUG ("Energy recharged at node " << m_device->GetNode ()->GetId () <<
+                ", restoring rx/tx activities");
 
-  m_disabled = true;
+  m_state = IDLE;
 }
 
 void
 UanPhyGen::SendPacket (Ptr<Packet> pkt, uint32_t modeNum)
 {
   NS_LOG_DEBUG ("PHY " << m_mac->GetAddress () << ": Transmitting packet");
-  if (m_disabled)
+  if (m_state == DISABLED)
     {
       NS_LOG_DEBUG ("Energy depleted, node cannot transmit any packet. Dropping.");
       return;
@@ -550,7 +572,8 @@
   m_state = TX;
   UpdatePowerConsumption (TX);
   double txdelay = pkt->GetSize () * 8.0 / txMode.GetDataRateBps ();
-  Simulator::Schedule (Seconds (txdelay), &UanPhyGen::TxEndEvent, this);
+  m_pktTx = pkt;
+  m_txEndEvent = Simulator::Schedule (Seconds (txdelay), &UanPhyGen::TxEndEvent, this);
   NS_LOG_DEBUG ("PHY " << m_mac->GetAddress () << " notifying listeners");
   NotifyListenersTxStart (Seconds (txdelay));
   m_txLogger (pkt, m_txPwrDb, txMode);
@@ -559,7 +582,7 @@
 void
 UanPhyGen::TxEndEvent ()
 {
-  if (m_state == SLEEP || m_disabled == true)
+  if (m_state == SLEEP || m_state == DISABLED)
     {
       NS_LOG_DEBUG ("Transmission ended but node sleeping or dead");
       return;
@@ -588,15 +611,12 @@
 void
 UanPhyGen::StartRxPacket (Ptr<Packet> pkt, double rxPowerDb, UanTxMode txMode, UanPdp pdp)
 {
-  if (m_disabled)
+  switch (m_state)
     {
+    case DISABLED:
       NS_LOG_DEBUG ("Energy depleted, node cannot receive any packet. Dropping.");
       NotifyRxDrop(pkt);    // traced source netanim
       return;
-    }
-
-  switch (m_state)
-    {
     case TX:
       NotifyRxDrop(pkt);    // traced source netanim
       NS_ASSERT (false);
@@ -644,7 +664,7 @@
             m_pktRxMode = txMode;
             m_pktRxPdp = pdp;
             double txdelay = pkt->GetSize () * 8.0 / txMode.GetDataRateBps ();
-            Simulator::Schedule (Seconds (txdelay), &UanPhyGen::RxEndEvent, this, pkt, rxPowerDb, txMode);
+            m_rxEndEvent = Simulator::Schedule (Seconds (txdelay), &UanPhyGen::RxEndEvent, this, pkt, rxPowerDb, txMode);
             NotifyListenersRxStart ();
           }
 
@@ -672,7 +692,7 @@
       return;
     }
 
-  if (m_disabled || m_state == SLEEP)
+  if (m_state == DISABLED || m_state == SLEEP)
     {
       NS_LOG_DEBUG ("Sleep mode or dead. Dropping packet");
       m_pktRx = 0;
diff -Naur ns-3.25/src/uan/model/uan-phy-gen.h ns-3.26/src/uan/model/uan-phy-gen.h
--- ns-3.25/src/uan/model/uan-phy-gen.h	2016-10-03 20:57:08.358246770 -0700
+++ ns-3.26/src/uan/model/uan-phy-gen.h	2016-10-03 19:49:01.643387683 -0700
@@ -28,6 +28,7 @@
 #include "ns3/nstime.h"
 #include "ns3/device-energy-model.h"
 #include "ns3/random-variable-stream.h"
+#include "ns3/event-id.h"
 #include <list>
 
 namespace ns3 {
@@ -240,6 +241,7 @@
   // Inherited methods
   virtual void SetEnergyModelCallback (DeviceEnergyModel::ChangeStateCallback cb);
   virtual void EnergyDepletionHandler (void);
+  virtual void EnergyRechargeHandler (void);
   virtual void SendPacket (Ptr<Packet> pkt, uint32_t modeNum);
   virtual void RegisterListener (UanPhyListener *listener);
   virtual void StartRxPacket (Ptr<Packet> pkt, double rxPowerDb, UanTxMode txMode, UanPdp pdp);
@@ -298,6 +300,7 @@
   double m_ccaThreshDb;             //!< CCA busy threshold.
 
   Ptr<Packet> m_pktRx;              //!< Received packet.
+  Ptr<Packet> m_pktTx;              //!< Sent packet.
   double m_minRxSinrDb;             //!< Minimum receive SINR during packet reception.
   double m_rxRecvPwrDb;             //!< Receiver power.
   Time m_pktRxArrTime;              //!< Packet arrival time.
@@ -305,7 +308,9 @@
   UanTxMode m_pktRxMode;            //!< Packet transmission mode at receiver.
 
   bool m_cleared;                   //!< Flag when we've been cleared.
-  bool m_disabled;                  //!< Energy depleted. 
+  
+  EventId m_txEndEvent;             //!< Tx event
+  EventId m_rxEndEvent;             //!< Rx event
 
   /** Provides uniform random variables. */
   Ptr<UniformRandomVariable> m_pg;
diff -Naur ns-3.25/src/uan/model/uan-phy.h ns-3.26/src/uan/model/uan-phy.h
--- ns-3.25/src/uan/model/uan-phy.h	2016-10-03 20:57:08.359246763 -0700
+++ ns-3.26/src/uan/model/uan-phy.h	2016-10-03 19:49:01.644387675 -0700
@@ -182,7 +182,8 @@
     CCABUSY,  //!< Channel busy.
     RX,       //!< Receiving.
     TX,       //!< Transmitting.
-    SLEEP     //!< Sleeping.
+    SLEEP,    //!< Sleeping.
+    DISABLED  //!< Disabled.
   };
 
   /**
@@ -224,6 +225,10 @@
    */
   virtual void EnergyDepletionHandler (void) = 0;
   /**
+   * Handle the energy recharge event.
+   */
+  virtual void EnergyRechargeHandler (void) = 0;
+  /**
    * Send a packet using a specific transmission mode.
    *
    * \param pkt  Packet to transmit.
diff -Naur ns-3.25/src/uan/model/uan-prop-model.cc ns-3.26/src/uan/model/uan-prop-model.cc
--- ns-3.25/src/uan/model/uan-prop-model.cc	2016-10-03 20:57:08.361246747 -0700
+++ ns-3.26/src/uan/model/uan-prop-model.cc	2016-10-03 19:49:01.646387660 -0700
@@ -204,7 +204,8 @@
       NS_ASSERT_MSG (GetNTaps () == 1, "Attempted to sum taps over time interval in "
                      "UanPdp with resolution 0 and multiple taps");
 
-      return m_taps[0].GetAmp ();
+      if (delay.IsZero ()) return m_taps[0].GetAmp ();
+      return std::complex<double> (0.0, 0.0);
     }
 
   uint32_t numTaps =  static_cast<uint32_t> (duration.GetSeconds () / m_resolution.GetSeconds () + 0.5);
@@ -236,7 +237,8 @@
       NS_ASSERT_MSG (GetNTaps () == 1, "Attempted to sum taps over time interval in "
                      "UanPdp with resolution 0 and multiple taps");
 
-      return std::abs (m_taps[0].GetAmp ());
+      if (delay.IsZero ()) return std::abs (m_taps[0].GetAmp ());
+      return 0;
     }
 
   uint32_t numTaps =  static_cast<uint32_t> (duration.GetSeconds () / m_resolution.GetSeconds () + 0.5);
diff -Naur ns-3.25/src/virtual-net-device/bindings/modulegen__gcc_ILP32.py ns-3.26/src/virtual-net-device/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/virtual-net-device/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.368246693 -0700
+++ ns-3.26/src/virtual-net-device/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.653387608 -0700
@@ -94,6 +94,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -144,6 +146,10 @@
     module.add_class('CallbackImplBase', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     ## callback.h (module 'core'): ns3::CallbackValue [class]
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -182,6 +188,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -295,6 +303,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -532,6 +542,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1716,23 +1731,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1847,6 +1862,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -1868,10 +1888,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -1893,6 +1913,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -1908,6 +1932,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -2002,6 +2030,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -2366,6 +2399,70 @@
                    [param('ns3::CallbackBase', 'base')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -2725,16 +2822,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -2762,35 +2874,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -3137,6 +3244,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/virtual-net-device/bindings/modulegen__gcc_LP64.py ns-3.26/src/virtual-net-device/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/virtual-net-device/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.370246677 -0700
+++ ns-3.26/src/virtual-net-device/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.655387593 -0700
@@ -94,6 +94,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -144,6 +146,10 @@
     module.add_class('CallbackImplBase', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     ## callback.h (module 'core'): ns3::CallbackValue [class]
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -182,6 +188,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -295,6 +303,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -532,6 +542,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1716,23 +1731,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1847,6 +1862,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -1868,10 +1888,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -1893,6 +1913,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -1908,6 +1932,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -2002,6 +2030,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -2366,6 +2399,70 @@
                    [param('ns3::CallbackBase', 'base')])
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -2725,16 +2822,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -2762,35 +2874,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -3137,6 +3244,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/virtual-net-device/examples/virtual-net-device.cc ns-3.26/src/virtual-net-device/examples/virtual-net-device.cc
--- ns-3.25/src/virtual-net-device/examples/virtual-net-device.cc	2016-10-03 20:57:08.370246677 -0700
+++ ns-3.26/src/virtual-net-device/examples/virtual-net-device.cc	2016-10-03 19:49:01.656387586 -0700
@@ -113,8 +113,6 @@
   {
     Ptr<Packet> packet = socket->Recv (65535, 0);
     NS_LOG_DEBUG ("N3SocketRecv: " << *packet);
-    SocketAddressTag socketAddressTag;
-    packet->RemovePacketTag (socketAddressTag);
     m_n3Tap->Receive (packet, 0x0800, m_n3Tap->GetAddress (), m_n3Tap->GetAddress (), NetDevice::PACKET_HOST);
   }
 
@@ -122,8 +120,6 @@
   {
     Ptr<Packet> packet = socket->Recv (65535, 0);
     NS_LOG_DEBUG ("N0SocketRecv: " << *packet);
-    SocketAddressTag socketAddressTag;
-    packet->RemovePacketTag (socketAddressTag);
     m_n0Tap->Receive (packet, 0x0800, m_n0Tap->GetAddress (), m_n0Tap->GetAddress (), NetDevice::PACKET_HOST);
   }
 
@@ -131,8 +127,6 @@
   {
     Ptr<Packet> packet = socket->Recv (65535, 0);
     NS_LOG_DEBUG ("N1SocketRecv: " << *packet);
-    SocketAddressTag socketAddressTag;
-    packet->RemovePacketTag (socketAddressTag);
     m_n1Tap->Receive (packet, 0x0800, m_n1Tap->GetAddress (), m_n1Tap->GetAddress (), NetDevice::PACKET_HOST);
   }
 
diff -Naur ns-3.25/src/visualizer/bindings/modulegen__gcc_ILP32.py ns-3.26/src/visualizer/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/visualizer/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.376246630 -0700
+++ ns-3.26/src/visualizer/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.662387541 -0700
@@ -126,6 +126,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -136,6 +138,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -194,10 +198,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -206,6 +210,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -232,6 +238,10 @@
     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'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
@@ -290,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> >'])
     ## 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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -444,11 +456,11 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -460,6 +472,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
@@ -706,6 +720,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1114,6 +1133,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1127,6 +1151,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
@@ -2385,23 +2413,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2516,6 +2544,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2537,10 +2570,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2562,6 +2595,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2577,6 +2614,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -2910,6 +2951,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3198,6 +3244,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -3223,6 +3274,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -3371,6 +3427,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -3398,11 +3458,6 @@
                    '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', 
@@ -3465,52 +3520,6 @@
                    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')])
@@ -3695,6 +3704,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -4178,6 +4233,70 @@
                    is_static=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -5142,16 +5261,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -5179,35 +5313,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -5607,6 +5736,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/visualizer/bindings/modulegen__gcc_LP64.py ns-3.26/src/visualizer/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/visualizer/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.380246600 -0700
+++ ns-3.26/src/visualizer/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.666387511 -0700
@@ -126,6 +126,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -136,6 +138,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -194,10 +198,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -206,6 +210,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -232,6 +238,10 @@
     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'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
@@ -290,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> >'])
     ## 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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -444,11 +456,11 @@
     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'])
     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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -460,6 +472,8 @@
     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_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
@@ -706,6 +720,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -1114,6 +1133,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -1127,6 +1151,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
@@ -2385,23 +2413,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2516,6 +2544,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -2537,10 +2570,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -2562,6 +2595,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -2577,6 +2614,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -2910,6 +2951,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -3198,6 +3244,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -3223,6 +3274,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -3371,6 +3427,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -3398,11 +3458,6 @@
                    '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', 
@@ -3465,52 +3520,6 @@
                    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')])
@@ -3695,6 +3704,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -4178,6 +4233,70 @@
                    is_static=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -5142,16 +5261,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -5179,35 +5313,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -5607,6 +5736,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/visualizer/model/pyviz.cc ns-3.26/src/visualizer/model/pyviz.cc
--- ns-3.25/src/visualizer/model/pyviz.cc	2016-10-03 20:57:08.382246584 -0700
+++ ns-3.26/src/visualizer/model/pyviz.cc	2016-10-03 19:49:01.668387497 -0700
@@ -323,7 +323,7 @@
   NS_LOG_LOGIC ("Schedule dummy callback to be called in " << (time - Simulator::Now ()));
   m_runUntil = time;
   m_stop = false;
-  Simulator::ScheduleWithContext (0xffffffff, time - Simulator::Now (), &PyViz::CallbackStopSimulation, this);
+  Simulator::ScheduleWithContext (Simulator::NO_CONTEXT, time - Simulator::Now (), &PyViz::CallbackStopSimulation, this);
 
   Ptr<SimulatorImpl> impl = Simulator::GetImplementation ();
   Ptr<VisualSimulatorImpl> visualImpl = DynamicCast<VisualSimulatorImpl> (impl);
diff -Naur ns-3.25/src/wave/bindings/modulegen__gcc_ILP32.py ns-3.26/src/wave/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/wave/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.402246429 -0700
+++ ns-3.26/src/wave/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.689387340 -0700
@@ -31,13 +31,13 @@
     ## 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')
+    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', 'WIFI_PHY_STANDARD_UNSPECIFIED'], 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]
     module.add_enum('ChannelAccess', ['ContinuousAccess', 'AlternatingAccess', 'ExtendedAccess', 'DefaultCchAccess', 'NoAccess'])
+    ## 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')
     ## edca-txop-n.h (module 'wifi'): ns3::TypeOfStation [enumeration]
     module.add_enum('TypeOfStation', ['STA', 'AP', 'ADHOC_STA', 'MESH', 'HT_STA', 'HT_AP', 'HT_ADHOC_STA', 'OCB'], import_from_module='ns.wifi')
     ## ctrl-headers.h (module 'wifi'): ns3::BlockAckType [enumeration]
@@ -186,8 +186,8 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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]
@@ -200,6 +200,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], import_from_module='ns.core')
     ## status-code.h (module 'wifi'): ns3::StatusCode [class]
     module.add_class('StatusCode', import_from_module='ns.wifi')
     ## tag.h (module 'network'): ns3::Tag [class]
@@ -208,6 +210,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'])
     ## wave-net-device.h (module 'wave'): ns3::TxInfo [struct]
     module.add_class('TxInfo')
     ## wave-net-device.h (module 'wave'): ns3::TxProfile [struct]
@@ -216,6 +220,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -241,7 +247,9 @@
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeFactory [class]
     module.add_class('WifiModeFactory', import_from_module='ns.wifi')
     ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper [class]
-    module.add_class('WifiPhyHelper', allow_subclassing=True, import_from_module='ns.wifi')
+    module.add_class('WifiPhyHelper', import_from_module='ns.wifi', parent=[root_module['ns3::PcapHelperForDevice'], root_module['ns3::AsciiTraceHelperForDevice']])
+    ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::SupportedPcapDataLinkTypes [enumeration]
+    module.add_enum('SupportedPcapDataLinkTypes', ['DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO'], outer_class=root_module['ns3::WifiPhyHelper'], import_from_module='ns.wifi')
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhyListener [class]
     module.add_class('WifiPhyListener', allow_subclassing=True, import_from_module='ns.wifi')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStation [struct]
@@ -257,9 +265,7 @@
     ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiChannelHelper [class]
     module.add_class('YansWifiChannelHelper', import_from_module='ns.wifi')
     ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiPhyHelper [class]
-    module.add_class('YansWifiPhyHelper', import_from_module='ns.wifi', parent=[root_module['ns3::WifiPhyHelper'], root_module['ns3::PcapHelperForDevice'], root_module['ns3::AsciiTraceHelperForDevice']])
-    ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiPhyHelper::SupportedPcapDataLinkTypes [enumeration]
-    module.add_enum('SupportedPcapDataLinkTypes', ['DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO'], outer_class=root_module['ns3::YansWifiPhyHelper'], import_from_module='ns.wifi')
+    module.add_class('YansWifiPhyHelper', import_from_module='ns.wifi', parent=root_module['ns3::WifiPhyHelper'])
     ## 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]
@@ -358,10 +364,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -370,6 +376,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -422,6 +430,8 @@
     module.add_enum('AddressType', ['ADDR1', 'ADDR2', 'ADDR3', 'ADDR4'], outer_class=root_module['ns3::WifiMacHeader'], import_from_module='ns.wifi')
     ## wifi-mac-queue.h (module 'wifi'): ns3::WifiMacQueue [class]
     module.add_class('WifiMacQueue', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
+    ## wifi-mac-queue.h (module 'wifi'): ns3::WifiMacQueue::DropPolicy [enumeration]
+    module.add_enum('DropPolicy', ['DROP_NEWEST', 'DROP_OLDEST'], outer_class=root_module['ns3::WifiMacQueue'], import_from_module='ns.wifi')
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhy [class]
     module.add_class('WifiPhy', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhy::State [enumeration]
@@ -450,6 +460,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'])
     ## bsm-application.h (module 'wave'): ns3::BsmApplication [class]
     module.add_class('BsmApplication', parent=root_module['ns3::Application'])
     ## callback.h (module 'core'): ns3::CallbackChecker [class]
@@ -480,12 +494,34 @@
     module.add_class('DefaultChannelScheduler', parent=root_module['ns3::ChannelScheduler'])
     ## 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'])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet [class]
+    module.add_class('DsssParameterSet', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetChecker [class]
+    module.add_class('DsssParameterSetChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue [class]
+    module.add_class('DsssParameterSetValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet [class]
+    module.add_class('EdcaParameterSet', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetChecker [class]
+    module.add_class('EdcaParameterSetChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue [class]
+    module.add_class('EdcaParameterSetValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
     ## edca-txop-n.h (module 'wifi'): ns3::EdcaTxopN [class]
     module.add_class('EdcaTxopN', import_from_module='ns.wifi', parent=root_module['ns3::Dcf'])
     ## 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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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'])
     ## erp-information.h (module 'wifi'): ns3::ErpInformation [class]
@@ -494,6 +530,8 @@
     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'])
+    ## error-rate-model.h (module 'wifi'): ns3::ErrorRateModel [class]
+    module.add_class('ErrorRateModel', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
     ## 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]
@@ -514,6 +552,8 @@
     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.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]
@@ -600,6 +640,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -652,7 +694,7 @@
     module.add_class('DcaTxop', import_from_module='ns.wifi', parent=root_module['ns3::Dcf'])
     ## ocb-wifi-mac.h (module 'wave'): ns3::OcbWifiMac [class]
     module.add_class('OcbWifiMac', parent=root_module['ns3::RegularWifiMac'])
-    module.add_container('ns3::EdcaParameterSet', ('ns3::AcIndex', 'ns3::EdcaParameter'), container_type=u'map')
+    module.add_container('ns3::EdcaParameters', ('ns3::AcIndex', 'ns3::EdcaParameter'), container_type=u'map')
     module.add_container('std::vector< double >', 'double', container_type=u'vector')
     module.add_container('std::vector< int >', 'int', container_type=u'vector')
     module.add_container('std::vector< unsigned int >', 'unsigned int', container_type=u'vector')
@@ -667,12 +709,15 @@
     typehandlers.add_type_alias(u'uint8_t', u'ns3::WifiInformationElementId')
     typehandlers.add_type_alias(u'uint8_t*', u'ns3::WifiInformationElementId*')
     typehandlers.add_type_alias(u'uint8_t&', u'ns3::WifiInformationElementId&')
-    typehandlers.add_type_alias(u'std::map< ns3::AcIndex, ns3::EdcaParameter, std::less< ns3::AcIndex >, std::allocator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > > >', u'ns3::EdcaParameterSet')
-    typehandlers.add_type_alias(u'std::map< ns3::AcIndex, ns3::EdcaParameter, std::less< ns3::AcIndex >, std::allocator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > > >*', u'ns3::EdcaParameterSet*')
-    typehandlers.add_type_alias(u'std::map< ns3::AcIndex, ns3::EdcaParameter, std::less< ns3::AcIndex >, std::allocator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > > >&', u'ns3::EdcaParameterSet&')
     typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::WifiMac >, ns3::OrganizationIdentifier const &, ns3::Ptr< ns3::Packet const >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::VscCallback')
     typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::WifiMac >, ns3::OrganizationIdentifier const &, ns3::Ptr< ns3::Packet const >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::VscCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::WifiMac >, ns3::OrganizationIdentifier const &, ns3::Ptr< ns3::Packet const >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::VscCallback&')
+    typehandlers.add_type_alias(u'std::_Rb_tree_const_iterator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > >', u'ns3::EdcaParametersI')
+    typehandlers.add_type_alias(u'std::_Rb_tree_const_iterator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > >*', u'ns3::EdcaParametersI*')
+    typehandlers.add_type_alias(u'std::_Rb_tree_const_iterator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > >&', u'ns3::EdcaParametersI&')
+    typehandlers.add_type_alias(u'std::map< ns3::AcIndex, ns3::EdcaParameter, std::less< ns3::AcIndex >, std::allocator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > > >', u'ns3::EdcaParameters')
+    typehandlers.add_type_alias(u'std::map< ns3::AcIndex, ns3::EdcaParameter, std::less< ns3::AcIndex >, std::allocator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > > >*', u'ns3::EdcaParameters*')
+    typehandlers.add_type_alias(u'std::map< ns3::AcIndex, ns3::EdcaParameter, std::less< ns3::AcIndex >, std::allocator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > > >&', u'ns3::EdcaParameters&')
     typehandlers.add_type_alias(u'ns3::Vector3D', u'ns3::Vector')
     typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
     typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
@@ -691,9 +736,6 @@
     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::_Rb_tree_const_iterator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > >', u'ns3::EdcaParameterSetI')
-    typehandlers.add_type_alias(u'std::_Rb_tree_const_iterator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > >*', u'ns3::EdcaParameterSetI*')
-    typehandlers.add_type_alias(u'std::_Rb_tree_const_iterator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > >&', u'ns3::EdcaParameterSetI&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -756,9 +798,36 @@
 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&')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_internal(module):
     root_module = module.get_root()
@@ -833,6 +902,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_Ns3TxInfo_methods(root_module, root_module['ns3::TxInfo'])
     register_Ns3TxProfile_methods(root_module, root_module['ns3::TxProfile'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
@@ -898,11 +968,11 @@
     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'])
-    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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -932,6 +1002,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_Ns3BsmApplication_methods(root_module, root_module['ns3::BsmApplication'])
     register_Ns3CallbackChecker_methods(root_module, root_module['ns3::CallbackChecker'])
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
@@ -947,13 +1019,25 @@
     register_Ns3Dcf_methods(root_module, root_module['ns3::Dcf'])
     register_Ns3DefaultChannelScheduler_methods(root_module, root_module['ns3::DefaultChannelScheduler'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
+    register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
+    register_Ns3DsssParameterSet_methods(root_module, root_module['ns3::DsssParameterSet'])
+    register_Ns3DsssParameterSetChecker_methods(root_module, root_module['ns3::DsssParameterSetChecker'])
+    register_Ns3DsssParameterSetValue_methods(root_module, root_module['ns3::DsssParameterSetValue'])
+    register_Ns3EdcaParameterSet_methods(root_module, root_module['ns3::EdcaParameterSet'])
+    register_Ns3EdcaParameterSetChecker_methods(root_module, root_module['ns3::EdcaParameterSetChecker'])
+    register_Ns3EdcaParameterSetValue_methods(root_module, root_module['ns3::EdcaParameterSetValue'])
     register_Ns3EdcaTxopN_methods(root_module, root_module['ns3::EdcaTxopN'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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_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'])
     register_Ns3ExtendedSupportedRatesIE_methods(root_module, root_module['ns3::ExtendedSupportedRatesIE'])
@@ -964,6 +1048,7 @@
     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_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'])
@@ -1662,9 +1747,13 @@
     cls.add_method('NotifyMpduTransmission', 
                    'void', 
                    [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('uint16_t', 'nextSeqNumber'), param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
-    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacket(ns3::WifiMacHeader & hdr, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacket(ns3::WifiMacHeader & hdr) [member function]
     cls.add_method('PeekNextPacket', 
                    'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'hdr')])
+    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacketByTidAndAddress(ns3::WifiMacHeader & hdr, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextPacketByTidAndAddress', 
+                   'ns3::Ptr< ns3::Packet const >', 
                    [param('ns3::WifiMacHeader &', 'hdr'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')])
     ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::RemovePacket(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
     cls.add_method('RemovePacket', 
@@ -1830,6 +1919,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2308,6 +2402,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -2321,6 +2420,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3InterferenceHelper_methods(root_module, cls):
@@ -2332,6 +2435,10 @@
     cls.add_method('Add', 
                    'ns3::Ptr< ns3::InterferenceHelper::Event >', 
                    [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::Time', 'duration'), param('double', 'rxPower')])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::AddForeignSignal(ns3::Time duration, double rxPower) [member function]
+    cls.add_method('AddForeignSignal', 
+                   'void', 
+                   [param('ns3::Time', 'duration'), param('double', 'rxPower')])
     ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer ns3::InterferenceHelper::CalculatePlcpHeaderSnrPer(ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
     cls.add_method('CalculatePlcpHeaderSnrPer', 
                    'ns3::InterferenceHelper::SnrPer', 
@@ -3316,6 +3423,11 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::StartNextFragment() [member function]
+    cls.add_method('StartNextFragment', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3MacLowTransmissionParameters_methods(root_module, cls):
@@ -4053,10 +4165,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -4182,12 +4294,12 @@
     cls.add_constructor([])
     ## channel-scheduler.h (module 'wave'): ns3::SchInfo::SchInfo(uint32_t channel, bool immediate, uint32_t channelAccess) [constructor]
     cls.add_constructor([param('uint32_t', 'channel'), param('bool', 'immediate'), param('uint32_t', 'channelAccess')])
-    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::SchInfo(uint32_t channel, bool immediate, uint32_t channelAccess, ns3::EdcaParameterSet edca) [constructor]
-    cls.add_constructor([param('uint32_t', 'channel'), param('bool', 'immediate'), param('uint32_t', 'channelAccess'), param('ns3::EdcaParameterSet', 'edca')])
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::SchInfo(uint32_t channel, bool immediate, uint32_t channelAccess, ns3::EdcaParameters edca) [constructor]
+    cls.add_constructor([param('uint32_t', 'channel'), param('bool', 'immediate'), param('uint32_t', 'channelAccess'), param('ns3::EdcaParameters', 'edca')])
     ## channel-scheduler.h (module 'wave'): ns3::SchInfo::channelNumber [variable]
     cls.add_instance_attribute('channelNumber', 'uint32_t', is_const=False)
-    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::edcaParameterSet [variable]
-    cls.add_instance_attribute('edcaParameterSet', 'ns3::EdcaParameterSet', is_const=False)
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::edcaParameters [variable]
+    cls.add_instance_attribute('edcaParameters', 'ns3::EdcaParameters', is_const=False)
     ## channel-scheduler.h (module 'wave'): ns3::SchInfo::extendedAccess [variable]
     cls.add_instance_attribute('extendedAccess', 'uint8_t', is_const=False)
     ## channel-scheduler.h (module 'wave'): ns3::SchInfo::immediateAccess [variable]
@@ -4424,6 +4536,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_Ns3TxInfo_methods(root_module, cls):
     ## wave-net-device.h (module 'wave'): ns3::TxInfo::TxInfo(ns3::TxInfo const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::TxInfo const &', 'arg0')])
@@ -4469,23 +4615,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -4600,6 +4746,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -4621,10 +4772,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -4646,6 +4797,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -4661,6 +4816,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Vector2D_methods(root_module, cls):
@@ -4986,15 +5145,52 @@
     return
 
 def register_Ns3WifiPhyHelper_methods(root_module, cls):
-    ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper() [constructor]
-    cls.add_constructor([])
     ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper(ns3::WifiPhyHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiPhyHelper const &', 'arg0')])
+    ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper() [constructor]
+    cls.add_constructor([])
     ## wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('Create', 
                    'ns3::Ptr< ns3::WifiPhy >', 
                    [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-helper.h (module 'wifi'): ns3::PcapHelper::DataLinkType ns3::WifiPhyHelper::GetPcapDataLinkType() const [member function]
+    cls.add_method('GetPcapDataLinkType', 
+                   'ns3::PcapHelper::DataLinkType', 
+                   [], 
+                   is_const=True)
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::Set(std::string name, ns3::AttributeValue const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'v')])
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::SetErrorRateModel(std::string name, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetErrorRateModel', 
+                   'void', 
+                   [param('std::string', 'name'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::SetPcapDataLinkType(ns3::WifiPhyHelper::SupportedPcapDataLinkTypes dlt) [member function]
+    cls.add_method('SetPcapDataLinkType', 
+                   'void', 
+                   [param('ns3::WifiPhyHelper::SupportedPcapDataLinkTypes', 'dlt')])
+    ## wifi-helper.h (module 'wifi'): static void ns3::WifiPhyHelper::PcapSniffRxEvent(ns3::Ptr<ns3::PcapFileWrapper> file, 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('PcapSniffRxEvent', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PcapFileWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::signalNoiseDbm', 'signalNoise')], 
+                   is_static=True, visibility='protected')
+    ## wifi-helper.h (module 'wifi'): static void ns3::WifiPhyHelper::PcapSniffTxEvent(ns3::Ptr<ns3::PcapFileWrapper> file, ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector, ns3::mpduInfo aMpdu) [member function]
+    cls.add_method('PcapSniffTxEvent', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PcapFileWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector'), param('ns3::mpduInfo', 'aMpdu')], 
+                   is_static=True, visibility='protected')
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiInternal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapInternal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3WifiPhyListener_methods(root_module, cls):
@@ -5246,15 +5442,6 @@
                    'ns3::YansWifiPhyHelper', 
                    [], 
                    is_static=True)
-    ## yans-wifi-helper.h (module 'wifi'): uint32_t ns3::YansWifiPhyHelper::GetPcapDataLinkType() const [member function]
-    cls.add_method('GetPcapDataLinkType', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::Set(std::string name, ns3::AttributeValue const & v) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'v')])
     ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::SetChannel(ns3::Ptr<ns3::YansWifiChannel> channel) [member function]
     cls.add_method('SetChannel', 
                    'void', 
@@ -5263,29 +5450,11 @@
     cls.add_method('SetChannel', 
                    'void', 
                    [param('std::string', 'channelName')])
-    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::SetErrorRateModel(std::string name, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
-    cls.add_method('SetErrorRateModel', 
-                   'void', 
-                   [param('std::string', 'name'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
-    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::SetPcapDataLinkType(ns3::YansWifiPhyHelper::SupportedPcapDataLinkTypes dlt) [member function]
-    cls.add_method('SetPcapDataLinkType', 
-                   'void', 
-                   [param('ns3::YansWifiPhyHelper::SupportedPcapDataLinkTypes', 'dlt')])
     ## yans-wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::YansWifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('Create', 
                    'ns3::Ptr< ns3::WifiPhy >', 
                    [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
-    cls.add_method('EnableAsciiInternal', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
-                   visibility='private', is_virtual=True)
-    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
-    cls.add_method('EnablePcapInternal', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
-                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -6157,6 +6326,11 @@
                    'ns3::CapabilityInformation', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::EdcaParameterSet ns3::MgtAssocResponseHeader::GetEdcaParameterSet() const [member function]
+    cls.add_method('GetEdcaParameterSet', 
+                   'ns3::EdcaParameterSet', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::ErpInformation ns3::MgtAssocResponseHeader::GetErpInformation() const [member function]
     cls.add_method('GetErpInformation', 
                    'ns3::ErpInformation', 
@@ -6214,6 +6388,10 @@
     cls.add_method('SetCapabilities', 
                    'void', 
                    [param('ns3::CapabilityInformation', 'capabilities')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetEdcaParameterSet(ns3::EdcaParameterSet edcaParameterSet) [member function]
+    cls.add_method('SetEdcaParameterSet', 
+                   'void', 
+                   [param('ns3::EdcaParameterSet', 'edcaParameterSet')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetErpInformation(ns3::ErpInformation erpInformation) [member function]
     cls.add_method('SetErpInformation', 
                    'void', 
@@ -6392,6 +6570,16 @@
                    'ns3::CapabilityInformation', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::DsssParameterSet ns3::MgtProbeResponseHeader::GetDsssParameterSet() const [member function]
+    cls.add_method('GetDsssParameterSet', 
+                   'ns3::DsssParameterSet', 
+                   [], 
+                   is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::EdcaParameterSet ns3::MgtProbeResponseHeader::GetEdcaParameterSet() const [member function]
+    cls.add_method('GetEdcaParameterSet', 
+                   'ns3::EdcaParameterSet', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::ErpInformation ns3::MgtProbeResponseHeader::GetErpInformation() const [member function]
     cls.add_method('GetErpInformation', 
                    'ns3::ErpInformation', 
@@ -6459,6 +6647,14 @@
     cls.add_method('SetCapabilities', 
                    'void', 
                    [param('ns3::CapabilityInformation', 'capabilities')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetDsssParameterSet(ns3::DsssParameterSet dsssParameterSet) [member function]
+    cls.add_method('SetDsssParameterSet', 
+                   'void', 
+                   [param('ns3::DsssParameterSet', 'dsssParameterSet')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetEdcaParameterSet(ns3::EdcaParameterSet edcaParameterSet) [member function]
+    cls.add_method('SetEdcaParameterSet', 
+                   'void', 
+                   [param('ns3::EdcaParameterSet', 'edcaParameterSet')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetErpInformation(ns3::ErpInformation erpInformation) [member function]
     cls.add_method('SetErpInformation', 
                    'void', 
@@ -6532,6 +6728,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -7036,6 +7237,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -7061,6 +7267,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -7209,6 +7420,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -7236,11 +7451,6 @@
                    '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', 
@@ -7303,52 +7513,6 @@
                    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')])
@@ -7533,6 +7697,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -8526,10 +8736,10 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureDcf(ns3::Ptr<ns3::Dcf> dcf, uint32_t cwmin, uint32_t cwmax, ns3::AcIndex ac) [member function]
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureDcf(ns3::Ptr<ns3::Dcf> dcf, uint32_t cwmin, uint32_t cwmax, bool isDsss, ns3::AcIndex ac) [member function]
     cls.add_method('ConfigureDcf', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Dcf >', 'dcf'), param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('ns3::AcIndex', 'ac')], 
+                   [param('ns3::Ptr< ns3::Dcf >', 'dcf'), param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('bool', 'isDsss'), param('ns3::AcIndex', 'ac')], 
                    visibility='protected')
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('FinishConfigureStandard', 
@@ -9070,16 +9280,16 @@
     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]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::AddSupportedChannelWidth(uint32_t channelwidth) [member function]
     cls.add_method('AddSupportedChannelWidth', 
                    'void', 
-                   [param('uint32_t', 'width')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   [param('uint32_t', 'channelwidth')], 
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): int64_t ns3::WifiPhy::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
                    [param('int64_t', 'stream')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculatePlcpPreambleAndHeaderDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('CalculatePlcpPreambleAndHeaderDuration', 
                    'ns3::Time', 
@@ -9088,7 +9298,7 @@
     cls.add_method('CalculateSnr', 
                    'double', 
                    [param('ns3::WifiTxVector', 'txVector'), param('double', 'ber')], 
-                   is_pure_virtual=True, is_const=True, is_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) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
@@ -9101,12 +9311,31 @@
     cls.add_method('ConfigureStandard', 
                    'void', 
                    [param('ns3::WifiPhyStandard', 'standard')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::DbToRatio(double db) const [member function]
+    cls.add_method('DbToRatio', 
+                   'double', 
+                   [param('double', 'db')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::DbmToW(double dbm) const [member function]
+    cls.add_method('DbmToW', 
+                   'double', 
+                   [param('double', 'dbm')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DefineChannelNumber(uint16_t channelNumber, ns3::WifiPhyStandard standard, uint32_t frequency, uint32_t channelWidth) [member function]
+    cls.add_method('DefineChannelNumber', 
+                   'bool', 
+                   [param('uint16_t', 'channelNumber'), param('ns3::WifiPhyStandard', 'standard'), param('uint32_t', 'frequency'), param('uint32_t', 'channelWidth')])
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
     cls.add_method('GetBssMembershipSelector', 
                    'uint32_t', 
                    [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetCcaMode1Threshold() const [member function]
+    cls.add_method('GetCcaMode1Threshold', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::WifiPhy::GetChannel() const [member function]
     cls.add_method('GetChannel', 
                    'ns3::Ptr< ns3::WifiChannel >', 
@@ -9116,22 +9345,27 @@
     cls.add_method('GetChannelNumber', 
                    'uint16_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetChannelSwitchDelay() const [member function]
     cls.add_method('GetChannelSwitchDelay', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetChannelWidth() const [member function]
     cls.add_method('GetChannelWidth', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::NetDevice> ns3::WifiPhy::GetDevice() const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate11Mbps() [member function]
     cls.add_method('GetDsssRate11Mbps', 
                    'ns3::WifiMode', 
@@ -9152,6 +9386,16 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetEdThreshold() const [member function]
+    cls.add_method('GetEdThreshold', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetEdThresholdW() const [member function]
+    cls.add_method('GetEdThresholdW', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate12Mbps() [member function]
     cls.add_method('GetErpOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -9192,21 +9436,26 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::ErrorRateModel> ns3::WifiPhy::GetErrorRateModel() const [member function]
+    cls.add_method('GetErrorRateModel', 
+                   'ns3::Ptr< ns3::ErrorRateModel >', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetFrequency() const [member function]
     cls.add_method('GetFrequency', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGreenfield() const [member function]
     cls.add_method('GetGreenfield', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGuardInterval() const [member function]
     cls.add_method('GetGuardInterval', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs0() [member function]
     cls.add_method('GetHtMcs0', 
                    'ns3::WifiMode', 
@@ -9376,57 +9625,61 @@
     cls.add_method('GetLastRxStartTime', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
     cls.add_method('GetLdpc', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
     cls.add_method('GetMcs', 
                    'ns3::WifiMode', 
                    [param('uint8_t', 'mcs')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
     cls.add_method('GetMembershipSelectorModes', 
                    'ns3::WifiModeList', 
                    [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::MobilityModel> ns3::WifiPhy::GetMobility() [member function]
+    cls.add_method('GetMobility', 
+                   'ns3::Ptr< ns3::MobilityModel >', 
+                   [])
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
     cls.add_method('GetNBssMembershipSelectors', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
     cls.add_method('GetNMcs', 
                    'uint8_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
     cls.add_method('GetNModes', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNTxPower() const [member function]
     cls.add_method('GetNTxPower', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
     cls.add_method('GetNumberOfReceiveAntennas', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
     cls.add_method('GetNumberOfTransmitAntennas', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
     cls.add_method('GetOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -9595,46 +9848,66 @@
                    'ns3::Time', 
                    [param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetRxGain() const [member function]
+    cls.add_method('GetRxGain', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetRxNoiseFigure() const [member function]
+    cls.add_method('GetRxNoiseFigure', 
+                   'double', 
+                   [], 
+                   is_const=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', 
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiPhyStandard ns3::WifiPhy::GetStandard() const [member function]
+    cls.add_method('GetStandard', 
+                   'ns3::WifiPhyStandard', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
+    cls.add_method('GetStateDuration', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetStbc() const [member function]
     cls.add_method('GetStbc', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   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)
+                   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)
+                   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)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxGain() const [member function]
+    cls.add_method('GetTxGain', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
     cls.add_method('GetTxPowerEnd', 
                    'double', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerStart() const [member function]
     cls.add_method('GetTxPowerStart', 
                    'double', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::WifiPhy::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -9695,46 +9968,51 @@
                    'ns3::WifiMode', 
                    [param('ns3::WifiMode', 'payloadMode')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsMcsSupported(ns3::WifiMode mcs) const [member function]
+    cls.add_method('IsMcsSupported', 
+                   'bool', 
+                   [param('ns3::WifiMode', 'mcs')], 
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
     cls.add_method('IsModeSupported', 
                    'bool', 
                    [param('ns3::WifiMode', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateBusy() [member function]
     cls.add_method('IsStateBusy', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateCcaBusy() [member function]
     cls.add_method('IsStateCcaBusy', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateIdle() [member function]
     cls.add_method('IsStateIdle', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateRx() [member function]
     cls.add_method('IsStateRx', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSleep() [member function]
     cls.add_method('IsStateSleep', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSwitching() [member function]
     cls.add_method('IsStateSwitching', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateTx() [member function]
     cls.add_method('IsStateTx', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static bool ns3::WifiPhy::IsValidTxVector(ns3::WifiTxVector txVector) [member function]
     cls.add_method('IsValidTxVector', 
                    'bool', 
@@ -9772,6 +10050,11 @@
     cls.add_method('NotifyTxEnd', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::RatioToDb(double ratio) const [member function]
+    cls.add_method('RatioToDb', 
+                   'double', 
+                   [param('double', 'ratio')], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('RegisterListener', 
                    'void', 
@@ -9792,61 +10075,93 @@
                    '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::SetCcaMode1Threshold(double threshold) [member function]
+    cls.add_method('SetCcaMode1Threshold', 
+                   'void', 
+                   [param('double', 'threshold')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
                    'void', 
                    [param('uint16_t', 'id')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelWidth(uint32_t channelwidth) [member function]
     cls.add_method('SetChannelWidth', 
                    'void', 
                    [param('uint32_t', 'channelwidth')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetEdThreshold(double threshold) [member function]
+    cls.add_method('SetEdThreshold', 
+                   'void', 
+                   [param('double', 'threshold')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetErrorRateModel(ns3::Ptr<ns3::ErrorRateModel> rate) [member function]
+    cls.add_method('SetErrorRateModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::ErrorRateModel >', 'rate')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
     cls.add_method('SetFrequency', 
                    'void', 
                    [param('uint32_t', 'freq')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGreenfield(bool greenfield) [member function]
     cls.add_method('SetGreenfield', 
                    'void', 
                    [param('bool', 'greenfield')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool guardInterval) [member function]
     cls.add_method('SetGuardInterval', 
                    'void', 
                    [param('bool', 'guardInterval')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool ldpc) [member function]
     cls.add_method('SetLdpc', 
                    'void', 
                    [param('bool', 'ldpc')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> mobility) [member function]
+    cls.add_method('SetMobility', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MobilityModel >', 'mobility')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNTxPower(uint32_t n) [member function]
+    cls.add_method('SetNTxPower', 
+                   'void', 
+                   [param('uint32_t', 'n')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
     cls.add_method('SetNumberOfReceiveAntennas', 
                    'void', 
                    [param('uint32_t', 'rx')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
     cls.add_method('SetNumberOfTransmitAntennas', 
                    'void', 
                    [param('uint32_t', 'tx')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,bool,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveOkCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::WifiTxVector,ns3::WifiPreamble,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveOkCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiTxVector, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetRxGain(double gain) [member function]
+    cls.add_method('SetRxGain', 
+                   'void', 
+                   [param('double', 'gain')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetRxNoiseFigure(double noiseFigureDb) [member function]
+    cls.add_method('SetRxNoiseFigure', 
+                   'void', 
+                   [param('double', 'noiseFigureDb')])
     ## 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)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetSleepMode() [member function]
     cls.add_method('SetSleepMode', 
                    'void', 
@@ -9856,12 +10171,64 @@
     cls.add_method('SetStbc', 
                    'void', 
                    [param('bool', 'stbc')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxGain(double gain) [member function]
+    cls.add_method('SetTxGain', 
+                   'void', 
+                   [param('double', 'gain')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxPowerEnd(double end) [member function]
+    cls.add_method('SetTxPowerEnd', 
+                   'void', 
+                   [param('double', 'end')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxPowerStart(double start) [member function]
+    cls.add_method('SetTxPowerStart', 
+                   'void', 
+                   [param('double', 'start')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('UnregisterListener', 
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::WToDbm(double w) const [member function]
+    cls.add_method('WToDbm', 
+                   'double', 
+                   [param('double', 'w')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DoChannelSwitch(uint16_t id) [member function]
+    cls.add_method('DoChannelSwitch', 
+                   'bool', 
+                   [param('uint16_t', 'id')], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DoFrequencySwitch(uint32_t frequency) [member function]
+    cls.add_method('DoFrequencySwitch', 
+                   'bool', 
+                   [param('uint32_t', 'frequency')], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetPowerDbm(uint8_t power) const [member function]
+    cls.add_method('GetPowerDbm', 
+                   'double', 
+                   [param('uint8_t', 'power')], 
+                   is_const=True, visibility='protected')
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureChannelForStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('ConfigureChannelForStandard', 
+                   'void', 
+                   [param('ns3::WifiPhyStandard', 'standard')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureDefaultsForStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('ConfigureDefaultsForStandard', 
+                   'void', 
+                   [param('ns3::WifiPhyStandard', 'standard')], 
+                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3WifiRemoteStationManager_methods(root_module, cls):
@@ -10183,7 +10550,8 @@
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetHtSupported(bool enable) [member function]
     cls.add_method('SetHtSupported', 
                    'void', 
-                   [param('bool', 'enable')])
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetMaxSlrc(uint32_t maxSlrc) [member function]
     cls.add_method('SetMaxSlrc', 
                    'void', 
@@ -10215,7 +10583,8 @@
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetVhtSupported(bool enable) [member function]
     cls.add_method('SetVhtSupported', 
                    'void', 
-                   [param('bool', 'enable')])
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
     cls.add_method('SetupMac', 
                    'void', 
@@ -10529,260 +10898,16 @@
     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::WifiTxVector txVector, double ber) const [member function]
-    cls.add_method('CalculateSnr', 
-                   'double', 
-                   [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', 
-                   'void', 
-                   [param('ns3::WifiPhyStandard', 'standard')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
-    cls.add_method('GetBssMembershipSelector', 
-                   'uint32_t', 
-                   [param('uint32_t', 'selector')], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetCcaMode1Threshold() const [member function]
-    cls.add_method('GetCcaMode1Threshold', 
-                   'double', 
-                   [], 
-                   is_const=True)
     ## yans-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::YansWifiPhy::GetChannel() const [member function]
     cls.add_method('GetChannel', 
                    'ns3::Ptr< ns3::WifiChannel >', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetChannelFrequencyMhz() const [member function]
-    cls.add_method('GetChannelFrequencyMhz', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint16_t ns3::YansWifiPhy::GetChannelNumber() const [member function]
-    cls.add_method('GetChannelNumber', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Time ns3::YansWifiPhy::GetChannelSwitchDelay() const [member function]
-    cls.add_method('GetChannelSwitchDelay', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetChannelWidth() const [member function]
-    cls.add_method('GetChannelWidth', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Time ns3::YansWifiPhy::GetDelayUntilIdle() [member function]
-    cls.add_method('GetDelayUntilIdle', 
-                   'ns3::Time', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::NetDevice> ns3::YansWifiPhy::GetDevice() const [member function]
-    cls.add_method('GetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetEdThreshold() const [member function]
-    cls.add_method('GetEdThreshold', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::ErrorRateModel> ns3::YansWifiPhy::GetErrorRateModel() const [member function]
-    cls.add_method('GetErrorRateModel', 
-                   'ns3::Ptr< ns3::ErrorRateModel >', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetFrequency() const [member function]
-    cls.add_method('GetFrequency', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetGreenfield() const [member function]
-    cls.add_method('GetGreenfield', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetGuardInterval() const [member function]
-    cls.add_method('GetGuardInterval', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Time ns3::YansWifiPhy::GetLastRxStartTime() const [member function]
-    cls.add_method('GetLastRxStartTime', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetLdpc() const [member function]
-    cls.add_method('GetLdpc', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::YansWifiPhy::GetMcs(uint8_t mcs) const [member function]
-    cls.add_method('GetMcs', 
-                   'ns3::WifiMode', 
-                   [param('uint8_t', 'mcs')], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::YansWifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
-    cls.add_method('GetMembershipSelectorModes', 
-                   'ns3::WifiModeList', 
-                   [param('uint32_t', 'selector')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::MobilityModel> ns3::YansWifiPhy::GetMobility() [member function]
-    cls.add_method('GetMobility', 
-                   'ns3::Ptr< ns3::MobilityModel >', 
-                   [])
-    ## yans-wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::YansWifiPhy::GetMode(uint32_t mode) const [member function]
-    cls.add_method('GetMode', 
-                   'ns3::WifiMode', 
-                   [param('uint32_t', 'mode')], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNBssMembershipSelectors() const [member function]
-    cls.add_method('GetNBssMembershipSelectors', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint8_t ns3::YansWifiPhy::GetNMcs() const [member function]
-    cls.add_method('GetNMcs', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNModes() const [member function]
-    cls.add_method('GetNModes', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNTxPower() const [member function]
-    cls.add_method('GetNTxPower', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNumberOfReceiveAntennas() const [member function]
-    cls.add_method('GetNumberOfReceiveAntennas', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNumberOfTransmitAntennas() const [member function]
-    cls.add_method('GetNumberOfTransmitAntennas', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetRxGain() const [member function]
-    cls.add_method('GetRxGain', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetRxNoiseFigure() const [member function]
-    cls.add_method('GetRxNoiseFigure', 
-                   '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', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetStbc() const [member function]
-    cls.add_method('GetStbc', 
-                   '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', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetTxPowerEnd() const [member function]
-    cls.add_method('GetTxPowerEnd', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetTxPowerStart() const [member function]
-    cls.add_method('GetTxPowerStart', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::YansWifiPhy::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsMcsSupported(ns3::WifiMode mcs) [member function]
-    cls.add_method('IsMcsSupported', 
-                   'bool', 
-                   [param('ns3::WifiMode', 'mcs')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
-    cls.add_method('IsModeSupported', 
-                   'bool', 
-                   [param('ns3::WifiMode', 'mode')], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateBusy() [member function]
-    cls.add_method('IsStateBusy', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateCcaBusy() [member function]
-    cls.add_method('IsStateCcaBusy', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateIdle() [member function]
-    cls.add_method('IsStateIdle', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateRx() [member function]
-    cls.add_method('IsStateRx', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateSleep() [member function]
-    cls.add_method('IsStateSleep', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateSwitching() [member function]
-    cls.add_method('IsStateSwitching', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateTx() [member function]
-    cls.add_method('IsStateTx', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('RegisterListener', 
                    'void', 
@@ -10803,119 +10928,25 @@
                    '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', 
-                   'void', 
-                   [param('double', 'threshold')])
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetChannel(ns3::Ptr<ns3::YansWifiChannel> channel) [member function]
     cls.add_method('SetChannel', 
                    'void', 
                    [param('ns3::Ptr< ns3::YansWifiChannel >', 'channel')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetChannelNumber(uint16_t id) [member function]
-    cls.add_method('SetChannelNumber', 
-                   'void', 
-                   [param('uint16_t', 'id')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetChannelWidth(uint32_t channelwidth) [member function]
-    cls.add_method('SetChannelWidth', 
-                   'void', 
-                   [param('uint32_t', 'channelwidth')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('SetDevice', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetEdThreshold(double threshold) [member function]
-    cls.add_method('SetEdThreshold', 
-                   'void', 
-                   [param('double', 'threshold')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetErrorRateModel(ns3::Ptr<ns3::ErrorRateModel> rate) [member function]
-    cls.add_method('SetErrorRateModel', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::ErrorRateModel >', 'rate')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetFrequency(uint32_t freq) [member function]
-    cls.add_method('SetFrequency', 
-                   'void', 
-                   [param('uint32_t', 'freq')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetGreenfield(bool greenfield) [member function]
-    cls.add_method('SetGreenfield', 
-                   'void', 
-                   [param('bool', 'greenfield')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetGuardInterval(bool guardInterval) [member function]
-    cls.add_method('SetGuardInterval', 
-                   'void', 
-                   [param('bool', 'guardInterval')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetLdpc(bool ldpc) [member function]
-    cls.add_method('SetLdpc', 
-                   'void', 
-                   [param('bool', 'ldpc')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> mobility) [member function]
-    cls.add_method('SetMobility', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::MobilityModel >', 'mobility')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetNTxPower(uint32_t n) [member function]
-    cls.add_method('SetNTxPower', 
-                   'void', 
-                   [param('uint32_t', 'n')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
-    cls.add_method('SetNumberOfReceiveAntennas', 
-                   'void', 
-                   [param('uint32_t', 'rx')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
-    cls.add_method('SetNumberOfTransmitAntennas', 
-                   '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>,double,bool,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,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::empty, 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', 
                    '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_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetRxGain(double gain) [member function]
-    cls.add_method('SetRxGain', 
-                   'void', 
-                   [param('double', 'gain')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetRxNoiseFigure(double noiseFigureDb) [member function]
-    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', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetStbc(bool stbc) [member function]
-    cls.add_method('SetStbc', 
-                   'void', 
-                   [param('bool', 'stbc')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetTxGain(double gain) [member function]
-    cls.add_method('SetTxGain', 
-                   'void', 
-                   [param('double', 'gain')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetTxPowerEnd(double end) [member function]
-    cls.add_method('SetTxPowerEnd', 
-                   'void', 
-                   [param('double', 'end')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetTxPowerStart(double start) [member function]
-    cls.add_method('SetTxPowerStart', 
-                   'void', 
-                   [param('double', 'start')])
+                   [], 
+                   is_virtual=True)
     ## 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', 
@@ -10929,16 +10960,21 @@
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::DoChannelSwitch(uint16_t id) [member function]
+    cls.add_method('DoChannelSwitch', 
+                   'bool', 
+                   [param('uint16_t', 'id')], 
+                   visibility='protected', is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
                    [], 
-                   visibility='private', is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::DoInitialize() [member function]
-    cls.add_method('DoInitialize', 
-                   'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
+                   visibility='protected', is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::DoFrequencySwitch(uint32_t frequency) [member function]
+    cls.add_method('DoFrequencySwitch', 
+                   'bool', 
+                   [param('uint32_t', 'frequency')], 
+                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3ZetaRandomVariable_methods(root_module, cls):
@@ -11289,6 +11325,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_Ns3BsmApplication_methods(root_module, cls):
     ## bsm-application.h (module 'wave'): ns3::BsmApplication::BsmApplication(ns3::BsmApplication const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::BsmApplication const &', 'arg0')])
@@ -11986,6 +12063,11 @@
                    'uint32_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): ns3::Time ns3::Dcf::GetTxopLimit() const [member function]
+    cls.add_method('GetTxopLimit', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## dcf.h (module 'wifi'): static ns3::TypeId ns3::Dcf::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -12006,6 +12088,11 @@
                    'void', 
                    [param('uint32_t', 'minCw')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): void ns3::Dcf::SetTxopLimit(ns3::Time txopLimit) [member function]
+    cls.add_method('SetTxopLimit', 
+                   'void', 
+                   [param('ns3::Time', 'txopLimit')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3DefaultChannelScheduler_methods(root_module, cls):
@@ -12063,42 +12150,473 @@
     ## default-channel-scheduler.h (module 'wave'): void ns3::DefaultChannelScheduler::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    ## default-channel-scheduler.h (module 'wave'): void ns3::DefaultChannelScheduler::DoInitialize() [member function]
-    cls.add_method('DoInitialize', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## default-channel-scheduler.h (module 'wave'): void ns3::DefaultChannelScheduler::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## default-channel-scheduler.h (module 'wave'): bool ns3::DefaultChannelScheduler::ReleaseAccess(uint32_t channelNumber) [member function]
+    cls.add_method('ReleaseAccess', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')], 
+                   visibility='private', 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_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_Ns3DsssParameterSet_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet::DsssParameterSet(ns3::DsssParameterSet const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DsssParameterSet const &', 'arg0')])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet::DsssParameterSet() [constructor]
+    cls.add_constructor([])
+    ## dsss-parameter-set.h (module 'wifi'): uint8_t ns3::DsssParameterSet::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)
+    ## dsss-parameter-set.h (module 'wifi'): ns3::WifiInformationElementId ns3::DsssParameterSet::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): uint8_t ns3::DsssParameterSet::GetCurrentChannel() const [member function]
+    cls.add_method('GetCurrentChannel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): uint8_t ns3::DsssParameterSet::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): uint16_t ns3::DsssParameterSet::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): ns3::Buffer::Iterator ns3::DsssParameterSet::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSet::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSet::SetCurrentChannel(uint8_t currentChannel) [member function]
+    cls.add_method('SetCurrentChannel', 
+                   'void', 
+                   [param('uint8_t', 'currentChannel')])
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSet::SetDsssSupported(uint8_t DsssSupported) [member function]
+    cls.add_method('SetDsssSupported', 
+                   'void', 
+                   [param('uint8_t', 'DsssSupported')])
+    return
+
+def register_Ns3DsssParameterSetChecker_methods(root_module, cls):
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetChecker::DsssParameterSetChecker() [constructor]
+    cls.add_constructor([])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetChecker::DsssParameterSetChecker(ns3::DsssParameterSetChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DsssParameterSetChecker const &', 'arg0')])
+    return
+
+def register_Ns3DsssParameterSetValue_methods(root_module, cls):
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue::DsssParameterSetValue() [constructor]
+    cls.add_constructor([])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue::DsssParameterSetValue(ns3::DsssParameterSetValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DsssParameterSetValue const &', 'arg0')])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue::DsssParameterSetValue(ns3::DsssParameterSet const & value) [constructor]
+    cls.add_constructor([param('ns3::DsssParameterSet const &', 'value')])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::DsssParameterSetValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): bool ns3::DsssParameterSetValue::DeserializeFromString(std::string value, ns3::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)
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet ns3::DsssParameterSetValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::DsssParameterSet', 
+                   [], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): std::string ns3::DsssParameterSetValue::SerializeToString(ns3::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)
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSetValue::Set(ns3::DsssParameterSet const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::DsssParameterSet const &', 'value')])
+    return
+
+def register_Ns3EdcaParameterSet_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet::EdcaParameterSet(ns3::EdcaParameterSet const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSet const &', 'arg0')])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet::EdcaParameterSet() [constructor]
+    cls.add_constructor([])
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::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)
+    ## edca-parameter-set.h (module 'wifi'): ns3::WifiInformationElementId ns3::EdcaParameterSet::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeAci() const [member function]
+    cls.add_method('GetBeAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeAcm() const [member function]
+    cls.add_method('GetBeAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeAifsn() const [member function]
+    cls.add_method('GetBeAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeCWmax() const [member function]
+    cls.add_method('GetBeCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeCWmin() const [member function]
+    cls.add_method('GetBeCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetBeTXOPLimit() const [member function]
+    cls.add_method('GetBeTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkAci() const [member function]
+    cls.add_method('GetBkAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkAcm() const [member function]
+    cls.add_method('GetBkAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkAifsn() const [member function]
+    cls.add_method('GetBkAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkCWmax() const [member function]
+    cls.add_method('GetBkCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkCWmin() const [member function]
+    cls.add_method('GetBkCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetBkTXOPLimit() const [member function]
+    cls.add_method('GetBkTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetQosInfo() const [member function]
+    cls.add_method('GetQosInfo', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViAci() const [member function]
+    cls.add_method('GetViAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViAcm() const [member function]
+    cls.add_method('GetViAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViAifsn() const [member function]
+    cls.add_method('GetViAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViCWmax() const [member function]
+    cls.add_method('GetViCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViCWmin() const [member function]
+    cls.add_method('GetViCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetViTXOPLimit() const [member function]
+    cls.add_method('GetViTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoAci() const [member function]
+    cls.add_method('GetVoAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoAcm() const [member function]
+    cls.add_method('GetVoAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoAifsn() const [member function]
+    cls.add_method('GetVoAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoCWmax() const [member function]
+    cls.add_method('GetVoCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoCWmin() const [member function]
+    cls.add_method('GetVoCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetVoTXOPLimit() const [member function]
+    cls.add_method('GetVoTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): ns3::Buffer::Iterator ns3::EdcaParameterSet::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeAci(uint8_t aci) [member function]
+    cls.add_method('SetBeAci', 
                    'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    ## default-channel-scheduler.h (module 'wave'): bool ns3::DefaultChannelScheduler::ReleaseAccess(uint32_t channelNumber) [member function]
-    cls.add_method('ReleaseAccess', 
-                   'bool', 
-                   [param('uint32_t', 'channelNumber')], 
-                   visibility='private', is_virtual=True)
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeAcm(uint8_t acm) [member function]
+    cls.add_method('SetBeAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetBeAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetBeCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetBeCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetBeTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkAci(uint8_t aci) [member function]
+    cls.add_method('SetBkAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkAcm(uint8_t acm) [member function]
+    cls.add_method('SetBkAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetBkAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetBkCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetBkCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetBkTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetQosInfo(uint8_t qosInfo) [member function]
+    cls.add_method('SetQosInfo', 
+                   'void', 
+                   [param('uint8_t', 'qosInfo')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetQosSupported(uint8_t qosSupported) [member function]
+    cls.add_method('SetQosSupported', 
+                   'void', 
+                   [param('uint8_t', 'qosSupported')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViAci(uint8_t aci) [member function]
+    cls.add_method('SetViAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViAcm(uint8_t acm) [member function]
+    cls.add_method('SetViAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetViAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetViCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetViCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetViTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoAci(uint8_t aci) [member function]
+    cls.add_method('SetVoAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoAcm(uint8_t acm) [member function]
+    cls.add_method('SetVoAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetVoAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetVoCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetVoCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetVoTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
     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]
+def register_Ns3EdcaParameterSetChecker_methods(root_module, cls):
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetChecker::EdcaParameterSetChecker() [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', 
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetChecker::EdcaParameterSetChecker(ns3::EdcaParameterSetChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSetChecker const &', 'arg0')])
+    return
+
+def register_Ns3EdcaParameterSetValue_methods(root_module, cls):
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue::EdcaParameterSetValue() [constructor]
+    cls.add_constructor([])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue::EdcaParameterSetValue(ns3::EdcaParameterSetValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSetValue const &', 'arg0')])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue::EdcaParameterSetValue(ns3::EdcaParameterSet const & value) [constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSet const &', 'value')])
+    ## edca-parameter-set.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::EdcaParameterSetValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
                    [], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): bool ns3::EdcaParameterSetValue::DeserializeFromString(std::string value, ns3::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)
-    ## random-variable-stream.h (module 'core'): uint32_t ns3::DeterministicRandomVariable::GetInteger() [member function]
-    cls.add_method('GetInteger', 
-                   'uint32_t', 
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet ns3::EdcaParameterSetValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::EdcaParameterSet', 
                    [], 
-                   is_virtual=True)
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): std::string ns3::EdcaParameterSetValue::SerializeToString(ns3::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)
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSetValue::Set(ns3::EdcaParameterSet const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::EdcaParameterSet const &', 'value')])
     return
 
 def register_Ns3EdcaTxopN_methods(root_module, cls):
@@ -12169,6 +12687,11 @@
                    'void', 
                    [param('uint32_t', 'aifsn')], 
                    is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTxopLimit(ns3::Time txopLimit) [member function]
+    cls.add_method('SetTxopLimit', 
+                   'void', 
+                   [param('ns3::Time', 'txopLimit')], 
+                   is_virtual=True)
     ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetMinCw() const [member function]
     cls.add_method('GetMinCw', 
                    'uint32_t', 
@@ -12184,6 +12707,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): ns3::Time ns3::EdcaTxopN::GetTxopLimit() const [member function]
+    cls.add_method('GetTxopLimit', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::MacLow> ns3::EdcaTxopN::Low() [member function]
     cls.add_method('Low', 
                    'ns3::Ptr< ns3::MacLow >', 
@@ -12198,10 +12726,11 @@
                    '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]
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetBaAgreementExists(ns3::Mac48Address address, uint8_t tid) const [member function]
     cls.add_method('GetBaAgreementExists', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')])
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')], 
+                   is_const=True)
     ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNOutstandingPacketsInBa(ns3::Mac48Address address, uint8_t tid) [member function]
     cls.add_method('GetNOutstandingPacketsInBa', 
                    'uint32_t', 
@@ -12276,6 +12805,10 @@
     cls.add_method('MissedAck', 
                    'void', 
                    [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::StartNextFragment() [member function]
+    cls.add_method('StartNextFragment', 
+                   'void', 
+                   [])
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::StartNext() [member function]
     cls.add_method('StartNext', 
                    'void', 
@@ -12296,14 +12829,14 @@
     cls.add_method('StartAccessIfNeeded', 
                    'void', 
                    [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRtsRetransmission() [member function]
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRtsRetransmission(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
     cls.add_method('NeedRtsRetransmission', 
                    'bool', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedDataRetransmission() [member function]
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedDataRetransmission(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
     cls.add_method('NeedDataRetransmission', 
                    'bool', 
-                   [])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
     ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedBarRetransmission() [member function]
     cls.add_method('NeedBarRetransmission', 
                    'bool', 
@@ -12383,10 +12916,11 @@
     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(ns3::Mac48Address dest) [member function]
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetAmpduExist(ns3::Mac48Address dest) const [member function]
     cls.add_method('GetAmpduExist', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'dest')])
+                   [param('ns3::Mac48Address', 'dest')], 
+                   is_const=True)
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAmpduExist(ns3::Mac48Address dest, bool enableAmpdu) [member function]
     cls.add_method('SetAmpduExist', 
                    'void', 
@@ -12460,6 +12994,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -12482,6 +13080,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', 
@@ -12629,6 +13305,28 @@
                    [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::WifiTxVector txVector, double ber) const [member function]
+    cls.add_method('CalculateSnr', 
+                   'double', 
+                   [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', 
+                   'double', 
+                   [param('ns3::WifiMode', 'mode'), param('ns3::WifiTxVector', 'txVector'), param('double', 'snr'), param('uint32_t', 'nbits')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## error-rate-model.h (module 'wifi'): static ns3::TypeId ns3::ErrorRateModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=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')])
@@ -13341,6 +14039,39 @@
                    [param('ns3::HtOperations 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_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')])
@@ -14682,6 +15413,11 @@
     cls.add_method('AggregateToAmpdu', 
                    'ns3::Ptr< ns3::Packet >', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const', 'hdr')])
+    ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::CalculateOverallTxTime(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr, ns3::MacLowTransmissionParameters const & params) const [member function]
+    cls.add_method('CalculateOverallTxTime', 
+                   'ns3::Time', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr'), param('ns3::MacLowTransmissionParameters const &', 'params')], 
+                   is_const=True)
     ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::CalculateTransmissionTime(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr, ns3::MacLowTransmissionParameters const & parameters) const [member function]
     cls.add_method('CalculateTransmissionTime', 
                    'ns3::Time', 
@@ -14738,6 +15474,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## mac-low.h (module 'wifi'): ns3::WifiTxVector ns3::MacLow::GetDataTxVector(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr) const [member function]
+    cls.add_method('GetDataTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr')], 
+                   is_const=True, is_virtual=True)
     ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::MacLow::GetPhy() const [member function]
     cls.add_method('GetPhy', 
                    'ns3::Ptr< ns3::WifiPhy >', 
@@ -14781,10 +15522,10 @@
     cls.add_method('NotifySwitchingStartNow', 
                    'void', 
                    [param('ns3::Time', 'duration')])
-    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveError(ns3::Ptr<ns3::Packet> packet, double rxSnr, bool isEndOfFrame) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveError(ns3::Ptr<ns3::Packet> packet, double rxSnr) [member function]
     cls.add_method('ReceiveError', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxSnr'), param('bool', 'isEndOfFrame')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxSnr')])
     ## 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', 
@@ -14871,11 +15612,6 @@
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet const >', 'peekedPacket'), param('ns3::WifiMacHeader', 'peekedHdr'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('uint16_t', 'size')], 
                    is_const=True)
-    ## mac-low.h (module 'wifi'): ns3::WifiTxVector ns3::MacLow::GetDataTxVector(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr) const [member function]
-    cls.add_method('GetDataTxVector', 
-                   'ns3::WifiTxVector', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr')], 
-                   is_const=True, visibility='protected', is_virtual=True)
     ## mac-low.h (module 'wifi'): void ns3::MacLow::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -15181,16 +15917,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -15218,35 +15969,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -15819,6 +16565,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
@@ -16163,6 +16914,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetDsssSupported(bool enable) [member function]
+    cls.add_method('SetDsssSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): bool ns3::RegularWifiMac::GetDsssSupported() const [member function]
+    cls.add_method('GetDsssSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
     return
 
 def register_Ns3Ssid_methods(root_module, cls):
@@ -16258,6 +17019,10 @@
     cls.add_constructor([])
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates(ns3::SupportedRates const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SupportedRates const &', 'arg0')])
+    ## supported-rates.h (module 'wifi'): void ns3::SupportedRates::AddBssMembershipSelectorRate(uint32_t bs) [member function]
+    cls.add_method('AddBssMembershipSelectorRate', 
+                   'void', 
+                   [param('uint32_t', 'bs')])
     ## supported-rates.h (module 'wifi'): void ns3::SupportedRates::AddSupportedRate(uint32_t bs) [member function]
     cls.add_method('AddSupportedRate', 
                    'void', 
@@ -16292,6 +17057,11 @@
                    'bool', 
                    [param('uint32_t', 'bs')], 
                    is_const=True)
+    ## supported-rates.h (module 'wifi'): bool ns3::SupportedRates::IsBssMembershipSelectorRate(uint32_t bs) const [member function]
+    cls.add_method('IsBssMembershipSelectorRate', 
+                   'bool', 
+                   [param('uint32_t', 'bs')], 
+                   is_const=True)
     ## supported-rates.h (module 'wifi'): bool ns3::SupportedRates::IsSupportedRate(uint32_t bs) const [member function]
     cls.add_method('IsSupportedRate', 
                    'bool', 
@@ -17188,6 +17958,11 @@
                    'void', 
                    [param('uint32_t', 'aifsn')], 
                    is_virtual=True)
+    ## dca-txop.h (module 'wifi'): void ns3::DcaTxop::SetTxopLimit(ns3::Time txopLimit) [member function]
+    cls.add_method('SetTxopLimit', 
+                   'void', 
+                   [param('ns3::Time', 'txopLimit')], 
+                   is_virtual=True)
     ## dca-txop.h (module 'wifi'): uint32_t ns3::DcaTxop::GetMinCw() const [member function]
     cls.add_method('GetMinCw', 
                    'uint32_t', 
@@ -17203,6 +17978,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## dca-txop.h (module 'wifi'): ns3::Time ns3::DcaTxop::GetTxopLimit() const [member function]
+    cls.add_method('GetTxopLimit', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## dca-txop.h (module 'wifi'): void ns3::DcaTxop::Queue(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
     cls.add_method('Queue', 
                    'void', 
diff -Naur ns-3.25/src/wave/bindings/modulegen__gcc_LP64.py ns-3.26/src/wave/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/wave/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.412246351 -0700
+++ ns-3.26/src/wave/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.700387258 -0700
@@ -31,13 +31,13 @@
     ## 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')
+    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', 'WIFI_PHY_STANDARD_UNSPECIFIED'], 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]
     module.add_enum('ChannelAccess', ['ContinuousAccess', 'AlternatingAccess', 'ExtendedAccess', 'DefaultCchAccess', 'NoAccess'])
+    ## 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')
     ## edca-txop-n.h (module 'wifi'): ns3::TypeOfStation [enumeration]
     module.add_enum('TypeOfStation', ['STA', 'AP', 'ADHOC_STA', 'MESH', 'HT_STA', 'HT_AP', 'HT_ADHOC_STA', 'OCB'], import_from_module='ns.wifi')
     ## ctrl-headers.h (module 'wifi'): ns3::BlockAckType [enumeration]
@@ -186,8 +186,8 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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]
@@ -200,6 +200,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], import_from_module='ns.core')
     ## status-code.h (module 'wifi'): ns3::StatusCode [class]
     module.add_class('StatusCode', import_from_module='ns.wifi')
     ## tag.h (module 'network'): ns3::Tag [class]
@@ -208,6 +210,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'])
     ## wave-net-device.h (module 'wave'): ns3::TxInfo [struct]
     module.add_class('TxInfo')
     ## wave-net-device.h (module 'wave'): ns3::TxProfile [struct]
@@ -216,6 +220,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -241,7 +247,9 @@
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeFactory [class]
     module.add_class('WifiModeFactory', import_from_module='ns.wifi')
     ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper [class]
-    module.add_class('WifiPhyHelper', allow_subclassing=True, import_from_module='ns.wifi')
+    module.add_class('WifiPhyHelper', import_from_module='ns.wifi', parent=[root_module['ns3::PcapHelperForDevice'], root_module['ns3::AsciiTraceHelperForDevice']])
+    ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::SupportedPcapDataLinkTypes [enumeration]
+    module.add_enum('SupportedPcapDataLinkTypes', ['DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO'], outer_class=root_module['ns3::WifiPhyHelper'], import_from_module='ns.wifi')
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhyListener [class]
     module.add_class('WifiPhyListener', allow_subclassing=True, import_from_module='ns.wifi')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStation [struct]
@@ -257,9 +265,7 @@
     ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiChannelHelper [class]
     module.add_class('YansWifiChannelHelper', import_from_module='ns.wifi')
     ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiPhyHelper [class]
-    module.add_class('YansWifiPhyHelper', import_from_module='ns.wifi', parent=[root_module['ns3::WifiPhyHelper'], root_module['ns3::PcapHelperForDevice'], root_module['ns3::AsciiTraceHelperForDevice']])
-    ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiPhyHelper::SupportedPcapDataLinkTypes [enumeration]
-    module.add_enum('SupportedPcapDataLinkTypes', ['DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO'], outer_class=root_module['ns3::YansWifiPhyHelper'], import_from_module='ns.wifi')
+    module.add_class('YansWifiPhyHelper', import_from_module='ns.wifi', parent=root_module['ns3::WifiPhyHelper'])
     ## 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]
@@ -358,10 +364,10 @@
     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::SocketPriority [enumeration]
+    module.add_enum('SocketPriority', ['NS3_PRIO_BESTEFFORT', 'NS3_PRIO_FILLER', 'NS3_PRIO_BULK', 'NS3_PRIO_INTERACTIVE_BULK', 'NS3_PRIO_INTERACTIVE', 'NS3_PRIO_CONTROL'], 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]
@@ -370,6 +376,8 @@
     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::SocketPriorityTag [class]
+    module.add_class('SocketPriorityTag', 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]
@@ -422,6 +430,8 @@
     module.add_enum('AddressType', ['ADDR1', 'ADDR2', 'ADDR3', 'ADDR4'], outer_class=root_module['ns3::WifiMacHeader'], import_from_module='ns.wifi')
     ## wifi-mac-queue.h (module 'wifi'): ns3::WifiMacQueue [class]
     module.add_class('WifiMacQueue', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
+    ## wifi-mac-queue.h (module 'wifi'): ns3::WifiMacQueue::DropPolicy [enumeration]
+    module.add_enum('DropPolicy', ['DROP_NEWEST', 'DROP_OLDEST'], outer_class=root_module['ns3::WifiMacQueue'], import_from_module='ns.wifi')
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhy [class]
     module.add_class('WifiPhy', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhy::State [enumeration]
@@ -450,6 +460,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'])
     ## bsm-application.h (module 'wave'): ns3::BsmApplication [class]
     module.add_class('BsmApplication', parent=root_module['ns3::Application'])
     ## callback.h (module 'core'): ns3::CallbackChecker [class]
@@ -480,12 +494,34 @@
     module.add_class('DefaultChannelScheduler', parent=root_module['ns3::ChannelScheduler'])
     ## 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'])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet [class]
+    module.add_class('DsssParameterSet', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetChecker [class]
+    module.add_class('DsssParameterSetChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue [class]
+    module.add_class('DsssParameterSetValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet [class]
+    module.add_class('EdcaParameterSet', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetChecker [class]
+    module.add_class('EdcaParameterSetChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue [class]
+    module.add_class('EdcaParameterSetValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
     ## edca-txop-n.h (module 'wifi'): ns3::EdcaTxopN [class]
     module.add_class('EdcaTxopN', import_from_module='ns.wifi', parent=root_module['ns3::Dcf'])
     ## 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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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'])
     ## erp-information.h (module 'wifi'): ns3::ErpInformation [class]
@@ -494,6 +530,8 @@
     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'])
+    ## error-rate-model.h (module 'wifi'): ns3::ErrorRateModel [class]
+    module.add_class('ErrorRateModel', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
     ## 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]
@@ -514,6 +552,8 @@
     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.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]
@@ -600,6 +640,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -652,7 +694,7 @@
     module.add_class('DcaTxop', import_from_module='ns.wifi', parent=root_module['ns3::Dcf'])
     ## ocb-wifi-mac.h (module 'wave'): ns3::OcbWifiMac [class]
     module.add_class('OcbWifiMac', parent=root_module['ns3::RegularWifiMac'])
-    module.add_container('ns3::EdcaParameterSet', ('ns3::AcIndex', 'ns3::EdcaParameter'), container_type=u'map')
+    module.add_container('ns3::EdcaParameters', ('ns3::AcIndex', 'ns3::EdcaParameter'), container_type=u'map')
     module.add_container('std::vector< double >', 'double', container_type=u'vector')
     module.add_container('std::vector< int >', 'int', container_type=u'vector')
     module.add_container('std::vector< unsigned int >', 'unsigned int', container_type=u'vector')
@@ -667,12 +709,15 @@
     typehandlers.add_type_alias(u'uint8_t', u'ns3::WifiInformationElementId')
     typehandlers.add_type_alias(u'uint8_t*', u'ns3::WifiInformationElementId*')
     typehandlers.add_type_alias(u'uint8_t&', u'ns3::WifiInformationElementId&')
-    typehandlers.add_type_alias(u'std::map< ns3::AcIndex, ns3::EdcaParameter, std::less< ns3::AcIndex >, std::allocator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > > >', u'ns3::EdcaParameterSet')
-    typehandlers.add_type_alias(u'std::map< ns3::AcIndex, ns3::EdcaParameter, std::less< ns3::AcIndex >, std::allocator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > > >*', u'ns3::EdcaParameterSet*')
-    typehandlers.add_type_alias(u'std::map< ns3::AcIndex, ns3::EdcaParameter, std::less< ns3::AcIndex >, std::allocator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > > >&', u'ns3::EdcaParameterSet&')
     typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::WifiMac >, ns3::OrganizationIdentifier const &, ns3::Ptr< ns3::Packet const >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::VscCallback')
     typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::WifiMac >, ns3::OrganizationIdentifier const &, ns3::Ptr< ns3::Packet const >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::VscCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::WifiMac >, ns3::OrganizationIdentifier const &, ns3::Ptr< ns3::Packet const >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::VscCallback&')
+    typehandlers.add_type_alias(u'std::_Rb_tree_const_iterator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > >', u'ns3::EdcaParametersI')
+    typehandlers.add_type_alias(u'std::_Rb_tree_const_iterator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > >*', u'ns3::EdcaParametersI*')
+    typehandlers.add_type_alias(u'std::_Rb_tree_const_iterator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > >&', u'ns3::EdcaParametersI&')
+    typehandlers.add_type_alias(u'std::map< ns3::AcIndex, ns3::EdcaParameter, std::less< ns3::AcIndex >, std::allocator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > > >', u'ns3::EdcaParameters')
+    typehandlers.add_type_alias(u'std::map< ns3::AcIndex, ns3::EdcaParameter, std::less< ns3::AcIndex >, std::allocator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > > >*', u'ns3::EdcaParameters*')
+    typehandlers.add_type_alias(u'std::map< ns3::AcIndex, ns3::EdcaParameter, std::less< ns3::AcIndex >, std::allocator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > > >&', u'ns3::EdcaParameters&')
     typehandlers.add_type_alias(u'ns3::Vector3D', u'ns3::Vector')
     typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
     typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
@@ -691,9 +736,6 @@
     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::_Rb_tree_const_iterator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > >', u'ns3::EdcaParameterSetI')
-    typehandlers.add_type_alias(u'std::_Rb_tree_const_iterator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > >*', u'ns3::EdcaParameterSetI*')
-    typehandlers.add_type_alias(u'std::_Rb_tree_const_iterator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > >&', u'ns3::EdcaParameterSetI&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -756,9 +798,36 @@
 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&')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_internal(module):
     root_module = module.get_root()
@@ -833,6 +902,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_Ns3TxInfo_methods(root_module, root_module['ns3::TxInfo'])
     register_Ns3TxProfile_methods(root_module, root_module['ns3::TxProfile'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
@@ -898,11 +968,11 @@
     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'])
-    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_Ns3SocketPriorityTag_methods(root_module, root_module['ns3::SocketPriorityTag'])
     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'])
@@ -932,6 +1002,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_Ns3BsmApplication_methods(root_module, root_module['ns3::BsmApplication'])
     register_Ns3CallbackChecker_methods(root_module, root_module['ns3::CallbackChecker'])
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
@@ -947,13 +1019,25 @@
     register_Ns3Dcf_methods(root_module, root_module['ns3::Dcf'])
     register_Ns3DefaultChannelScheduler_methods(root_module, root_module['ns3::DefaultChannelScheduler'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
+    register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
+    register_Ns3DsssParameterSet_methods(root_module, root_module['ns3::DsssParameterSet'])
+    register_Ns3DsssParameterSetChecker_methods(root_module, root_module['ns3::DsssParameterSetChecker'])
+    register_Ns3DsssParameterSetValue_methods(root_module, root_module['ns3::DsssParameterSetValue'])
+    register_Ns3EdcaParameterSet_methods(root_module, root_module['ns3::EdcaParameterSet'])
+    register_Ns3EdcaParameterSetChecker_methods(root_module, root_module['ns3::EdcaParameterSetChecker'])
+    register_Ns3EdcaParameterSetValue_methods(root_module, root_module['ns3::EdcaParameterSetValue'])
     register_Ns3EdcaTxopN_methods(root_module, root_module['ns3::EdcaTxopN'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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_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'])
     register_Ns3ExtendedSupportedRatesIE_methods(root_module, root_module['ns3::ExtendedSupportedRatesIE'])
@@ -964,6 +1048,7 @@
     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_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'])
@@ -1662,9 +1747,13 @@
     cls.add_method('NotifyMpduTransmission', 
                    'void', 
                    [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('uint16_t', 'nextSeqNumber'), param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
-    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacket(ns3::WifiMacHeader & hdr, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacket(ns3::WifiMacHeader & hdr) [member function]
     cls.add_method('PeekNextPacket', 
                    'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'hdr')])
+    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacketByTidAndAddress(ns3::WifiMacHeader & hdr, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextPacketByTidAndAddress', 
+                   'ns3::Ptr< ns3::Packet const >', 
                    [param('ns3::WifiMacHeader &', 'hdr'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')])
     ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::RemovePacket(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
     cls.add_method('RemovePacket', 
@@ -1830,6 +1919,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2308,6 +2402,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## inet-socket-address.h (module 'network'): uint8_t ns3::InetSocketAddress::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_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', 
@@ -2321,6 +2420,10 @@
     cls.add_method('SetPort', 
                    'void', 
                    [param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
     return
 
 def register_Ns3InterferenceHelper_methods(root_module, cls):
@@ -2332,6 +2435,10 @@
     cls.add_method('Add', 
                    'ns3::Ptr< ns3::InterferenceHelper::Event >', 
                    [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::Time', 'duration'), param('double', 'rxPower')])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::AddForeignSignal(ns3::Time duration, double rxPower) [member function]
+    cls.add_method('AddForeignSignal', 
+                   'void', 
+                   [param('ns3::Time', 'duration'), param('double', 'rxPower')])
     ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer ns3::InterferenceHelper::CalculatePlcpHeaderSnrPer(ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
     cls.add_method('CalculatePlcpHeaderSnrPer', 
                    'ns3::InterferenceHelper::SnrPer', 
@@ -3316,6 +3423,11 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::StartNextFragment() [member function]
+    cls.add_method('StartNextFragment', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3MacLowTransmissionParameters_methods(root_module, cls):
@@ -4053,10 +4165,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -4182,12 +4294,12 @@
     cls.add_constructor([])
     ## channel-scheduler.h (module 'wave'): ns3::SchInfo::SchInfo(uint32_t channel, bool immediate, uint32_t channelAccess) [constructor]
     cls.add_constructor([param('uint32_t', 'channel'), param('bool', 'immediate'), param('uint32_t', 'channelAccess')])
-    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::SchInfo(uint32_t channel, bool immediate, uint32_t channelAccess, ns3::EdcaParameterSet edca) [constructor]
-    cls.add_constructor([param('uint32_t', 'channel'), param('bool', 'immediate'), param('uint32_t', 'channelAccess'), param('ns3::EdcaParameterSet', 'edca')])
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::SchInfo(uint32_t channel, bool immediate, uint32_t channelAccess, ns3::EdcaParameters edca) [constructor]
+    cls.add_constructor([param('uint32_t', 'channel'), param('bool', 'immediate'), param('uint32_t', 'channelAccess'), param('ns3::EdcaParameters', 'edca')])
     ## channel-scheduler.h (module 'wave'): ns3::SchInfo::channelNumber [variable]
     cls.add_instance_attribute('channelNumber', 'uint32_t', is_const=False)
-    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::edcaParameterSet [variable]
-    cls.add_instance_attribute('edcaParameterSet', 'ns3::EdcaParameterSet', is_const=False)
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::edcaParameters [variable]
+    cls.add_instance_attribute('edcaParameters', 'ns3::EdcaParameters', is_const=False)
     ## channel-scheduler.h (module 'wave'): ns3::SchInfo::extendedAccess [variable]
     cls.add_instance_attribute('extendedAccess', 'uint8_t', is_const=False)
     ## channel-scheduler.h (module 'wave'): ns3::SchInfo::immediateAccess [variable]
@@ -4424,6 +4536,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_Ns3TxInfo_methods(root_module, cls):
     ## wave-net-device.h (module 'wave'): ns3::TxInfo::TxInfo(ns3::TxInfo const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::TxInfo const &', 'arg0')])
@@ -4469,23 +4615,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -4600,6 +4746,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -4621,10 +4772,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -4646,6 +4797,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -4661,6 +4816,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Vector2D_methods(root_module, cls):
@@ -4986,15 +5145,52 @@
     return
 
 def register_Ns3WifiPhyHelper_methods(root_module, cls):
-    ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper() [constructor]
-    cls.add_constructor([])
     ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper(ns3::WifiPhyHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiPhyHelper const &', 'arg0')])
+    ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper() [constructor]
+    cls.add_constructor([])
     ## wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('Create', 
                    'ns3::Ptr< ns3::WifiPhy >', 
                    [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-helper.h (module 'wifi'): ns3::PcapHelper::DataLinkType ns3::WifiPhyHelper::GetPcapDataLinkType() const [member function]
+    cls.add_method('GetPcapDataLinkType', 
+                   'ns3::PcapHelper::DataLinkType', 
+                   [], 
+                   is_const=True)
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::Set(std::string name, ns3::AttributeValue const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'v')])
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::SetErrorRateModel(std::string name, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetErrorRateModel', 
+                   'void', 
+                   [param('std::string', 'name'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::SetPcapDataLinkType(ns3::WifiPhyHelper::SupportedPcapDataLinkTypes dlt) [member function]
+    cls.add_method('SetPcapDataLinkType', 
+                   'void', 
+                   [param('ns3::WifiPhyHelper::SupportedPcapDataLinkTypes', 'dlt')])
+    ## wifi-helper.h (module 'wifi'): static void ns3::WifiPhyHelper::PcapSniffRxEvent(ns3::Ptr<ns3::PcapFileWrapper> file, 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('PcapSniffRxEvent', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PcapFileWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::signalNoiseDbm', 'signalNoise')], 
+                   is_static=True, visibility='protected')
+    ## wifi-helper.h (module 'wifi'): static void ns3::WifiPhyHelper::PcapSniffTxEvent(ns3::Ptr<ns3::PcapFileWrapper> file, ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector, ns3::mpduInfo aMpdu) [member function]
+    cls.add_method('PcapSniffTxEvent', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PcapFileWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector'), param('ns3::mpduInfo', 'aMpdu')], 
+                   is_static=True, visibility='protected')
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiInternal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapInternal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3WifiPhyListener_methods(root_module, cls):
@@ -5246,15 +5442,6 @@
                    'ns3::YansWifiPhyHelper', 
                    [], 
                    is_static=True)
-    ## yans-wifi-helper.h (module 'wifi'): uint32_t ns3::YansWifiPhyHelper::GetPcapDataLinkType() const [member function]
-    cls.add_method('GetPcapDataLinkType', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::Set(std::string name, ns3::AttributeValue const & v) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'v')])
     ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::SetChannel(ns3::Ptr<ns3::YansWifiChannel> channel) [member function]
     cls.add_method('SetChannel', 
                    'void', 
@@ -5263,29 +5450,11 @@
     cls.add_method('SetChannel', 
                    'void', 
                    [param('std::string', 'channelName')])
-    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::SetErrorRateModel(std::string name, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
-    cls.add_method('SetErrorRateModel', 
-                   'void', 
-                   [param('std::string', 'name'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
-    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::SetPcapDataLinkType(ns3::YansWifiPhyHelper::SupportedPcapDataLinkTypes dlt) [member function]
-    cls.add_method('SetPcapDataLinkType', 
-                   'void', 
-                   [param('ns3::YansWifiPhyHelper::SupportedPcapDataLinkTypes', 'dlt')])
     ## yans-wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::YansWifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('Create', 
                    'ns3::Ptr< ns3::WifiPhy >', 
                    [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
-    cls.add_method('EnableAsciiInternal', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
-                   visibility='private', is_virtual=True)
-    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
-    cls.add_method('EnablePcapInternal', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
-                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -6157,6 +6326,11 @@
                    'ns3::CapabilityInformation', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::EdcaParameterSet ns3::MgtAssocResponseHeader::GetEdcaParameterSet() const [member function]
+    cls.add_method('GetEdcaParameterSet', 
+                   'ns3::EdcaParameterSet', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::ErpInformation ns3::MgtAssocResponseHeader::GetErpInformation() const [member function]
     cls.add_method('GetErpInformation', 
                    'ns3::ErpInformation', 
@@ -6214,6 +6388,10 @@
     cls.add_method('SetCapabilities', 
                    'void', 
                    [param('ns3::CapabilityInformation', 'capabilities')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetEdcaParameterSet(ns3::EdcaParameterSet edcaParameterSet) [member function]
+    cls.add_method('SetEdcaParameterSet', 
+                   'void', 
+                   [param('ns3::EdcaParameterSet', 'edcaParameterSet')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetErpInformation(ns3::ErpInformation erpInformation) [member function]
     cls.add_method('SetErpInformation', 
                    'void', 
@@ -6392,6 +6570,16 @@
                    'ns3::CapabilityInformation', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::DsssParameterSet ns3::MgtProbeResponseHeader::GetDsssParameterSet() const [member function]
+    cls.add_method('GetDsssParameterSet', 
+                   'ns3::DsssParameterSet', 
+                   [], 
+                   is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::EdcaParameterSet ns3::MgtProbeResponseHeader::GetEdcaParameterSet() const [member function]
+    cls.add_method('GetEdcaParameterSet', 
+                   'ns3::EdcaParameterSet', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::ErpInformation ns3::MgtProbeResponseHeader::GetErpInformation() const [member function]
     cls.add_method('GetErpInformation', 
                    'ns3::ErpInformation', 
@@ -6459,6 +6647,14 @@
     cls.add_method('SetCapabilities', 
                    'void', 
                    [param('ns3::CapabilityInformation', 'capabilities')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetDsssParameterSet(ns3::DsssParameterSet dsssParameterSet) [member function]
+    cls.add_method('SetDsssParameterSet', 
+                   'void', 
+                   [param('ns3::DsssParameterSet', 'dsssParameterSet')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetEdcaParameterSet(ns3::EdcaParameterSet edcaParameterSet) [member function]
+    cls.add_method('SetEdcaParameterSet', 
+                   'void', 
+                   [param('ns3::EdcaParameterSet', 'edcaParameterSet')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetErpInformation(ns3::ErpInformation erpInformation) [member function]
     cls.add_method('SetErpInformation', 
                    'void', 
@@ -6532,6 +6728,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -7036,6 +7237,11 @@
                    'int', 
                    [param('ns3::Address &', 'address')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -7061,6 +7267,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): static uint8_t ns3::Socket::IpTos2Priority(uint8_t ipTos) [member function]
+    cls.add_method('IpTos2Priority', 
+                   'uint8_t', 
+                   [param('uint8_t', 'ipTos')], 
+                   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', 
@@ -7209,6 +7420,10 @@
     cls.add_method('SetIpv6Tclass', 
                    'void', 
                    [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
     ## 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', 
@@ -7236,11 +7451,6 @@
                    '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', 
@@ -7303,52 +7513,6 @@
                    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')])
@@ -7533,6 +7697,52 @@
                    [param('uint8_t', 'tclass')])
     return
 
+def register_Ns3SocketPriorityTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag(ns3::SocketPriorityTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketPriorityTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketPriorityTag::SocketPriorityTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketPriorityTag::GetPriority() const [member function]
+    cls.add_method('GetPriority', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketPriorityTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketPriorityTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketPriorityTag::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::SocketPriorityTag::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::SocketPriorityTag::SetPriority(uint8_t priority) [member function]
+    cls.add_method('SetPriority', 
+                   'void', 
+                   [param('uint8_t', 'priority')])
+    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')])
@@ -8526,10 +8736,10 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureDcf(ns3::Ptr<ns3::Dcf> dcf, uint32_t cwmin, uint32_t cwmax, ns3::AcIndex ac) [member function]
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureDcf(ns3::Ptr<ns3::Dcf> dcf, uint32_t cwmin, uint32_t cwmax, bool isDsss, ns3::AcIndex ac) [member function]
     cls.add_method('ConfigureDcf', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Dcf >', 'dcf'), param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('ns3::AcIndex', 'ac')], 
+                   [param('ns3::Ptr< ns3::Dcf >', 'dcf'), param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('bool', 'isDsss'), param('ns3::AcIndex', 'ac')], 
                    visibility='protected')
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('FinishConfigureStandard', 
@@ -9070,16 +9280,16 @@
     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]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::AddSupportedChannelWidth(uint32_t channelwidth) [member function]
     cls.add_method('AddSupportedChannelWidth', 
                    'void', 
-                   [param('uint32_t', 'width')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   [param('uint32_t', 'channelwidth')], 
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): int64_t ns3::WifiPhy::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
                    [param('int64_t', 'stream')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculatePlcpPreambleAndHeaderDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('CalculatePlcpPreambleAndHeaderDuration', 
                    'ns3::Time', 
@@ -9088,7 +9298,7 @@
     cls.add_method('CalculateSnr', 
                    'double', 
                    [param('ns3::WifiTxVector', 'txVector'), param('double', 'ber')], 
-                   is_pure_virtual=True, is_const=True, is_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) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
@@ -9101,12 +9311,31 @@
     cls.add_method('ConfigureStandard', 
                    'void', 
                    [param('ns3::WifiPhyStandard', 'standard')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::DbToRatio(double db) const [member function]
+    cls.add_method('DbToRatio', 
+                   'double', 
+                   [param('double', 'db')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::DbmToW(double dbm) const [member function]
+    cls.add_method('DbmToW', 
+                   'double', 
+                   [param('double', 'dbm')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DefineChannelNumber(uint16_t channelNumber, ns3::WifiPhyStandard standard, uint32_t frequency, uint32_t channelWidth) [member function]
+    cls.add_method('DefineChannelNumber', 
+                   'bool', 
+                   [param('uint16_t', 'channelNumber'), param('ns3::WifiPhyStandard', 'standard'), param('uint32_t', 'frequency'), param('uint32_t', 'channelWidth')])
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
     cls.add_method('GetBssMembershipSelector', 
                    'uint32_t', 
                    [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetCcaMode1Threshold() const [member function]
+    cls.add_method('GetCcaMode1Threshold', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::WifiPhy::GetChannel() const [member function]
     cls.add_method('GetChannel', 
                    'ns3::Ptr< ns3::WifiChannel >', 
@@ -9116,22 +9345,27 @@
     cls.add_method('GetChannelNumber', 
                    'uint16_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetChannelSwitchDelay() const [member function]
     cls.add_method('GetChannelSwitchDelay', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetChannelWidth() const [member function]
     cls.add_method('GetChannelWidth', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::NetDevice> ns3::WifiPhy::GetDevice() const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate11Mbps() [member function]
     cls.add_method('GetDsssRate11Mbps', 
                    'ns3::WifiMode', 
@@ -9152,6 +9386,16 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetEdThreshold() const [member function]
+    cls.add_method('GetEdThreshold', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetEdThresholdW() const [member function]
+    cls.add_method('GetEdThresholdW', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate12Mbps() [member function]
     cls.add_method('GetErpOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -9192,21 +9436,26 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::ErrorRateModel> ns3::WifiPhy::GetErrorRateModel() const [member function]
+    cls.add_method('GetErrorRateModel', 
+                   'ns3::Ptr< ns3::ErrorRateModel >', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetFrequency() const [member function]
     cls.add_method('GetFrequency', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGreenfield() const [member function]
     cls.add_method('GetGreenfield', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGuardInterval() const [member function]
     cls.add_method('GetGuardInterval', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs0() [member function]
     cls.add_method('GetHtMcs0', 
                    'ns3::WifiMode', 
@@ -9376,57 +9625,61 @@
     cls.add_method('GetLastRxStartTime', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
     cls.add_method('GetLdpc', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
     cls.add_method('GetMcs', 
                    'ns3::WifiMode', 
                    [param('uint8_t', 'mcs')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
     cls.add_method('GetMembershipSelectorModes', 
                    'ns3::WifiModeList', 
                    [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::MobilityModel> ns3::WifiPhy::GetMobility() [member function]
+    cls.add_method('GetMobility', 
+                   'ns3::Ptr< ns3::MobilityModel >', 
+                   [])
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
     cls.add_method('GetNBssMembershipSelectors', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
     cls.add_method('GetNMcs', 
                    'uint8_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
     cls.add_method('GetNModes', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNTxPower() const [member function]
     cls.add_method('GetNTxPower', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
     cls.add_method('GetNumberOfReceiveAntennas', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
     cls.add_method('GetNumberOfTransmitAntennas', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
     cls.add_method('GetOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -9595,46 +9848,66 @@
                    'ns3::Time', 
                    [param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetRxGain() const [member function]
+    cls.add_method('GetRxGain', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetRxNoiseFigure() const [member function]
+    cls.add_method('GetRxNoiseFigure', 
+                   'double', 
+                   [], 
+                   is_const=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', 
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiPhyStandard ns3::WifiPhy::GetStandard() const [member function]
+    cls.add_method('GetStandard', 
+                   'ns3::WifiPhyStandard', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
+    cls.add_method('GetStateDuration', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetStbc() const [member function]
     cls.add_method('GetStbc', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   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)
+                   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)
+                   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)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxGain() const [member function]
+    cls.add_method('GetTxGain', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
     cls.add_method('GetTxPowerEnd', 
                    'double', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerStart() const [member function]
     cls.add_method('GetTxPowerStart', 
                    'double', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::WifiPhy::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -9695,46 +9968,51 @@
                    'ns3::WifiMode', 
                    [param('ns3::WifiMode', 'payloadMode')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsMcsSupported(ns3::WifiMode mcs) const [member function]
+    cls.add_method('IsMcsSupported', 
+                   'bool', 
+                   [param('ns3::WifiMode', 'mcs')], 
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
     cls.add_method('IsModeSupported', 
                    'bool', 
                    [param('ns3::WifiMode', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateBusy() [member function]
     cls.add_method('IsStateBusy', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateCcaBusy() [member function]
     cls.add_method('IsStateCcaBusy', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateIdle() [member function]
     cls.add_method('IsStateIdle', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateRx() [member function]
     cls.add_method('IsStateRx', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSleep() [member function]
     cls.add_method('IsStateSleep', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSwitching() [member function]
     cls.add_method('IsStateSwitching', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateTx() [member function]
     cls.add_method('IsStateTx', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static bool ns3::WifiPhy::IsValidTxVector(ns3::WifiTxVector txVector) [member function]
     cls.add_method('IsValidTxVector', 
                    'bool', 
@@ -9772,6 +10050,11 @@
     cls.add_method('NotifyTxEnd', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::RatioToDb(double ratio) const [member function]
+    cls.add_method('RatioToDb', 
+                   'double', 
+                   [param('double', 'ratio')], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('RegisterListener', 
                    'void', 
@@ -9792,61 +10075,93 @@
                    '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::SetCcaMode1Threshold(double threshold) [member function]
+    cls.add_method('SetCcaMode1Threshold', 
+                   'void', 
+                   [param('double', 'threshold')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
                    'void', 
                    [param('uint16_t', 'id')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelWidth(uint32_t channelwidth) [member function]
     cls.add_method('SetChannelWidth', 
                    'void', 
                    [param('uint32_t', 'channelwidth')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetEdThreshold(double threshold) [member function]
+    cls.add_method('SetEdThreshold', 
+                   'void', 
+                   [param('double', 'threshold')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetErrorRateModel(ns3::Ptr<ns3::ErrorRateModel> rate) [member function]
+    cls.add_method('SetErrorRateModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::ErrorRateModel >', 'rate')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
     cls.add_method('SetFrequency', 
                    'void', 
                    [param('uint32_t', 'freq')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGreenfield(bool greenfield) [member function]
     cls.add_method('SetGreenfield', 
                    'void', 
                    [param('bool', 'greenfield')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool guardInterval) [member function]
     cls.add_method('SetGuardInterval', 
                    'void', 
                    [param('bool', 'guardInterval')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool ldpc) [member function]
     cls.add_method('SetLdpc', 
                    'void', 
                    [param('bool', 'ldpc')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> mobility) [member function]
+    cls.add_method('SetMobility', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MobilityModel >', 'mobility')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNTxPower(uint32_t n) [member function]
+    cls.add_method('SetNTxPower', 
+                   'void', 
+                   [param('uint32_t', 'n')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
     cls.add_method('SetNumberOfReceiveAntennas', 
                    'void', 
                    [param('uint32_t', 'rx')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
     cls.add_method('SetNumberOfTransmitAntennas', 
                    'void', 
                    [param('uint32_t', 'tx')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,bool,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveOkCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::WifiTxVector,ns3::WifiPreamble,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveOkCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiTxVector, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetRxGain(double gain) [member function]
+    cls.add_method('SetRxGain', 
+                   'void', 
+                   [param('double', 'gain')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetRxNoiseFigure(double noiseFigureDb) [member function]
+    cls.add_method('SetRxNoiseFigure', 
+                   'void', 
+                   [param('double', 'noiseFigureDb')])
     ## 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)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetSleepMode() [member function]
     cls.add_method('SetSleepMode', 
                    'void', 
@@ -9856,12 +10171,64 @@
     cls.add_method('SetStbc', 
                    'void', 
                    [param('bool', 'stbc')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxGain(double gain) [member function]
+    cls.add_method('SetTxGain', 
+                   'void', 
+                   [param('double', 'gain')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxPowerEnd(double end) [member function]
+    cls.add_method('SetTxPowerEnd', 
+                   'void', 
+                   [param('double', 'end')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxPowerStart(double start) [member function]
+    cls.add_method('SetTxPowerStart', 
+                   'void', 
+                   [param('double', 'start')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('UnregisterListener', 
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::WToDbm(double w) const [member function]
+    cls.add_method('WToDbm', 
+                   'double', 
+                   [param('double', 'w')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DoChannelSwitch(uint16_t id) [member function]
+    cls.add_method('DoChannelSwitch', 
+                   'bool', 
+                   [param('uint16_t', 'id')], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DoFrequencySwitch(uint32_t frequency) [member function]
+    cls.add_method('DoFrequencySwitch', 
+                   'bool', 
+                   [param('uint32_t', 'frequency')], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetPowerDbm(uint8_t power) const [member function]
+    cls.add_method('GetPowerDbm', 
+                   'double', 
+                   [param('uint8_t', 'power')], 
+                   is_const=True, visibility='protected')
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureChannelForStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('ConfigureChannelForStandard', 
+                   'void', 
+                   [param('ns3::WifiPhyStandard', 'standard')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureDefaultsForStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('ConfigureDefaultsForStandard', 
+                   'void', 
+                   [param('ns3::WifiPhyStandard', 'standard')], 
+                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3WifiRemoteStationManager_methods(root_module, cls):
@@ -10183,7 +10550,8 @@
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetHtSupported(bool enable) [member function]
     cls.add_method('SetHtSupported', 
                    'void', 
-                   [param('bool', 'enable')])
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetMaxSlrc(uint32_t maxSlrc) [member function]
     cls.add_method('SetMaxSlrc', 
                    'void', 
@@ -10215,7 +10583,8 @@
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetVhtSupported(bool enable) [member function]
     cls.add_method('SetVhtSupported', 
                    'void', 
-                   [param('bool', 'enable')])
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
     cls.add_method('SetupMac', 
                    'void', 
@@ -10529,260 +10898,16 @@
     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::WifiTxVector txVector, double ber) const [member function]
-    cls.add_method('CalculateSnr', 
-                   'double', 
-                   [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', 
-                   'void', 
-                   [param('ns3::WifiPhyStandard', 'standard')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
-    cls.add_method('GetBssMembershipSelector', 
-                   'uint32_t', 
-                   [param('uint32_t', 'selector')], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetCcaMode1Threshold() const [member function]
-    cls.add_method('GetCcaMode1Threshold', 
-                   'double', 
-                   [], 
-                   is_const=True)
     ## yans-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::YansWifiPhy::GetChannel() const [member function]
     cls.add_method('GetChannel', 
                    'ns3::Ptr< ns3::WifiChannel >', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetChannelFrequencyMhz() const [member function]
-    cls.add_method('GetChannelFrequencyMhz', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint16_t ns3::YansWifiPhy::GetChannelNumber() const [member function]
-    cls.add_method('GetChannelNumber', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Time ns3::YansWifiPhy::GetChannelSwitchDelay() const [member function]
-    cls.add_method('GetChannelSwitchDelay', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetChannelWidth() const [member function]
-    cls.add_method('GetChannelWidth', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Time ns3::YansWifiPhy::GetDelayUntilIdle() [member function]
-    cls.add_method('GetDelayUntilIdle', 
-                   'ns3::Time', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::NetDevice> ns3::YansWifiPhy::GetDevice() const [member function]
-    cls.add_method('GetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetEdThreshold() const [member function]
-    cls.add_method('GetEdThreshold', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::ErrorRateModel> ns3::YansWifiPhy::GetErrorRateModel() const [member function]
-    cls.add_method('GetErrorRateModel', 
-                   'ns3::Ptr< ns3::ErrorRateModel >', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetFrequency() const [member function]
-    cls.add_method('GetFrequency', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetGreenfield() const [member function]
-    cls.add_method('GetGreenfield', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetGuardInterval() const [member function]
-    cls.add_method('GetGuardInterval', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Time ns3::YansWifiPhy::GetLastRxStartTime() const [member function]
-    cls.add_method('GetLastRxStartTime', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetLdpc() const [member function]
-    cls.add_method('GetLdpc', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::YansWifiPhy::GetMcs(uint8_t mcs) const [member function]
-    cls.add_method('GetMcs', 
-                   'ns3::WifiMode', 
-                   [param('uint8_t', 'mcs')], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::YansWifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
-    cls.add_method('GetMembershipSelectorModes', 
-                   'ns3::WifiModeList', 
-                   [param('uint32_t', 'selector')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::MobilityModel> ns3::YansWifiPhy::GetMobility() [member function]
-    cls.add_method('GetMobility', 
-                   'ns3::Ptr< ns3::MobilityModel >', 
-                   [])
-    ## yans-wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::YansWifiPhy::GetMode(uint32_t mode) const [member function]
-    cls.add_method('GetMode', 
-                   'ns3::WifiMode', 
-                   [param('uint32_t', 'mode')], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNBssMembershipSelectors() const [member function]
-    cls.add_method('GetNBssMembershipSelectors', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint8_t ns3::YansWifiPhy::GetNMcs() const [member function]
-    cls.add_method('GetNMcs', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNModes() const [member function]
-    cls.add_method('GetNModes', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNTxPower() const [member function]
-    cls.add_method('GetNTxPower', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNumberOfReceiveAntennas() const [member function]
-    cls.add_method('GetNumberOfReceiveAntennas', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNumberOfTransmitAntennas() const [member function]
-    cls.add_method('GetNumberOfTransmitAntennas', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetRxGain() const [member function]
-    cls.add_method('GetRxGain', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetRxNoiseFigure() const [member function]
-    cls.add_method('GetRxNoiseFigure', 
-                   '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', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetStbc() const [member function]
-    cls.add_method('GetStbc', 
-                   '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', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetTxPowerEnd() const [member function]
-    cls.add_method('GetTxPowerEnd', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetTxPowerStart() const [member function]
-    cls.add_method('GetTxPowerStart', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::YansWifiPhy::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsMcsSupported(ns3::WifiMode mcs) [member function]
-    cls.add_method('IsMcsSupported', 
-                   'bool', 
-                   [param('ns3::WifiMode', 'mcs')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
-    cls.add_method('IsModeSupported', 
-                   'bool', 
-                   [param('ns3::WifiMode', 'mode')], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateBusy() [member function]
-    cls.add_method('IsStateBusy', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateCcaBusy() [member function]
-    cls.add_method('IsStateCcaBusy', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateIdle() [member function]
-    cls.add_method('IsStateIdle', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateRx() [member function]
-    cls.add_method('IsStateRx', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateSleep() [member function]
-    cls.add_method('IsStateSleep', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateSwitching() [member function]
-    cls.add_method('IsStateSwitching', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateTx() [member function]
-    cls.add_method('IsStateTx', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('RegisterListener', 
                    'void', 
@@ -10803,119 +10928,25 @@
                    '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', 
-                   'void', 
-                   [param('double', 'threshold')])
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetChannel(ns3::Ptr<ns3::YansWifiChannel> channel) [member function]
     cls.add_method('SetChannel', 
                    'void', 
                    [param('ns3::Ptr< ns3::YansWifiChannel >', 'channel')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetChannelNumber(uint16_t id) [member function]
-    cls.add_method('SetChannelNumber', 
-                   'void', 
-                   [param('uint16_t', 'id')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetChannelWidth(uint32_t channelwidth) [member function]
-    cls.add_method('SetChannelWidth', 
-                   'void', 
-                   [param('uint32_t', 'channelwidth')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('SetDevice', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetEdThreshold(double threshold) [member function]
-    cls.add_method('SetEdThreshold', 
-                   'void', 
-                   [param('double', 'threshold')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetErrorRateModel(ns3::Ptr<ns3::ErrorRateModel> rate) [member function]
-    cls.add_method('SetErrorRateModel', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::ErrorRateModel >', 'rate')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetFrequency(uint32_t freq) [member function]
-    cls.add_method('SetFrequency', 
-                   'void', 
-                   [param('uint32_t', 'freq')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetGreenfield(bool greenfield) [member function]
-    cls.add_method('SetGreenfield', 
-                   'void', 
-                   [param('bool', 'greenfield')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetGuardInterval(bool guardInterval) [member function]
-    cls.add_method('SetGuardInterval', 
-                   'void', 
-                   [param('bool', 'guardInterval')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetLdpc(bool ldpc) [member function]
-    cls.add_method('SetLdpc', 
-                   'void', 
-                   [param('bool', 'ldpc')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> mobility) [member function]
-    cls.add_method('SetMobility', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::MobilityModel >', 'mobility')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetNTxPower(uint32_t n) [member function]
-    cls.add_method('SetNTxPower', 
-                   'void', 
-                   [param('uint32_t', 'n')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
-    cls.add_method('SetNumberOfReceiveAntennas', 
-                   'void', 
-                   [param('uint32_t', 'rx')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
-    cls.add_method('SetNumberOfTransmitAntennas', 
-                   '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>,double,bool,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,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::empty, 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', 
                    '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_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetRxGain(double gain) [member function]
-    cls.add_method('SetRxGain', 
-                   'void', 
-                   [param('double', 'gain')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetRxNoiseFigure(double noiseFigureDb) [member function]
-    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', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetStbc(bool stbc) [member function]
-    cls.add_method('SetStbc', 
-                   'void', 
-                   [param('bool', 'stbc')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetTxGain(double gain) [member function]
-    cls.add_method('SetTxGain', 
-                   'void', 
-                   [param('double', 'gain')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetTxPowerEnd(double end) [member function]
-    cls.add_method('SetTxPowerEnd', 
-                   'void', 
-                   [param('double', 'end')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetTxPowerStart(double start) [member function]
-    cls.add_method('SetTxPowerStart', 
-                   'void', 
-                   [param('double', 'start')])
+                   [], 
+                   is_virtual=True)
     ## 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', 
@@ -10929,16 +10960,21 @@
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::DoChannelSwitch(uint16_t id) [member function]
+    cls.add_method('DoChannelSwitch', 
+                   'bool', 
+                   [param('uint16_t', 'id')], 
+                   visibility='protected', is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
                    [], 
-                   visibility='private', is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::DoInitialize() [member function]
-    cls.add_method('DoInitialize', 
-                   'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
+                   visibility='protected', is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::DoFrequencySwitch(uint32_t frequency) [member function]
+    cls.add_method('DoFrequencySwitch', 
+                   'bool', 
+                   [param('uint32_t', 'frequency')], 
+                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3ZetaRandomVariable_methods(root_module, cls):
@@ -11289,6 +11325,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_Ns3BsmApplication_methods(root_module, cls):
     ## bsm-application.h (module 'wave'): ns3::BsmApplication::BsmApplication(ns3::BsmApplication const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::BsmApplication const &', 'arg0')])
@@ -11986,6 +12063,11 @@
                    'uint32_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): ns3::Time ns3::Dcf::GetTxopLimit() const [member function]
+    cls.add_method('GetTxopLimit', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## dcf.h (module 'wifi'): static ns3::TypeId ns3::Dcf::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -12006,6 +12088,11 @@
                    'void', 
                    [param('uint32_t', 'minCw')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): void ns3::Dcf::SetTxopLimit(ns3::Time txopLimit) [member function]
+    cls.add_method('SetTxopLimit', 
+                   'void', 
+                   [param('ns3::Time', 'txopLimit')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3DefaultChannelScheduler_methods(root_module, cls):
@@ -12063,42 +12150,473 @@
     ## default-channel-scheduler.h (module 'wave'): void ns3::DefaultChannelScheduler::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    ## default-channel-scheduler.h (module 'wave'): void ns3::DefaultChannelScheduler::DoInitialize() [member function]
-    cls.add_method('DoInitialize', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## default-channel-scheduler.h (module 'wave'): void ns3::DefaultChannelScheduler::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## default-channel-scheduler.h (module 'wave'): bool ns3::DefaultChannelScheduler::ReleaseAccess(uint32_t channelNumber) [member function]
+    cls.add_method('ReleaseAccess', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')], 
+                   visibility='private', 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_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_Ns3DsssParameterSet_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet::DsssParameterSet(ns3::DsssParameterSet const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DsssParameterSet const &', 'arg0')])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet::DsssParameterSet() [constructor]
+    cls.add_constructor([])
+    ## dsss-parameter-set.h (module 'wifi'): uint8_t ns3::DsssParameterSet::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)
+    ## dsss-parameter-set.h (module 'wifi'): ns3::WifiInformationElementId ns3::DsssParameterSet::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): uint8_t ns3::DsssParameterSet::GetCurrentChannel() const [member function]
+    cls.add_method('GetCurrentChannel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): uint8_t ns3::DsssParameterSet::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): uint16_t ns3::DsssParameterSet::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): ns3::Buffer::Iterator ns3::DsssParameterSet::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSet::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSet::SetCurrentChannel(uint8_t currentChannel) [member function]
+    cls.add_method('SetCurrentChannel', 
+                   'void', 
+                   [param('uint8_t', 'currentChannel')])
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSet::SetDsssSupported(uint8_t DsssSupported) [member function]
+    cls.add_method('SetDsssSupported', 
+                   'void', 
+                   [param('uint8_t', 'DsssSupported')])
+    return
+
+def register_Ns3DsssParameterSetChecker_methods(root_module, cls):
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetChecker::DsssParameterSetChecker() [constructor]
+    cls.add_constructor([])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetChecker::DsssParameterSetChecker(ns3::DsssParameterSetChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DsssParameterSetChecker const &', 'arg0')])
+    return
+
+def register_Ns3DsssParameterSetValue_methods(root_module, cls):
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue::DsssParameterSetValue() [constructor]
+    cls.add_constructor([])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue::DsssParameterSetValue(ns3::DsssParameterSetValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DsssParameterSetValue const &', 'arg0')])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue::DsssParameterSetValue(ns3::DsssParameterSet const & value) [constructor]
+    cls.add_constructor([param('ns3::DsssParameterSet const &', 'value')])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::DsssParameterSetValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): bool ns3::DsssParameterSetValue::DeserializeFromString(std::string value, ns3::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)
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet ns3::DsssParameterSetValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::DsssParameterSet', 
+                   [], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): std::string ns3::DsssParameterSetValue::SerializeToString(ns3::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)
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSetValue::Set(ns3::DsssParameterSet const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::DsssParameterSet const &', 'value')])
+    return
+
+def register_Ns3EdcaParameterSet_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet::EdcaParameterSet(ns3::EdcaParameterSet const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSet const &', 'arg0')])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet::EdcaParameterSet() [constructor]
+    cls.add_constructor([])
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::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)
+    ## edca-parameter-set.h (module 'wifi'): ns3::WifiInformationElementId ns3::EdcaParameterSet::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeAci() const [member function]
+    cls.add_method('GetBeAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeAcm() const [member function]
+    cls.add_method('GetBeAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeAifsn() const [member function]
+    cls.add_method('GetBeAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeCWmax() const [member function]
+    cls.add_method('GetBeCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeCWmin() const [member function]
+    cls.add_method('GetBeCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetBeTXOPLimit() const [member function]
+    cls.add_method('GetBeTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkAci() const [member function]
+    cls.add_method('GetBkAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkAcm() const [member function]
+    cls.add_method('GetBkAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkAifsn() const [member function]
+    cls.add_method('GetBkAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkCWmax() const [member function]
+    cls.add_method('GetBkCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkCWmin() const [member function]
+    cls.add_method('GetBkCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetBkTXOPLimit() const [member function]
+    cls.add_method('GetBkTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetQosInfo() const [member function]
+    cls.add_method('GetQosInfo', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViAci() const [member function]
+    cls.add_method('GetViAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViAcm() const [member function]
+    cls.add_method('GetViAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViAifsn() const [member function]
+    cls.add_method('GetViAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViCWmax() const [member function]
+    cls.add_method('GetViCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViCWmin() const [member function]
+    cls.add_method('GetViCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetViTXOPLimit() const [member function]
+    cls.add_method('GetViTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoAci() const [member function]
+    cls.add_method('GetVoAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoAcm() const [member function]
+    cls.add_method('GetVoAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoAifsn() const [member function]
+    cls.add_method('GetVoAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoCWmax() const [member function]
+    cls.add_method('GetVoCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoCWmin() const [member function]
+    cls.add_method('GetVoCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetVoTXOPLimit() const [member function]
+    cls.add_method('GetVoTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): ns3::Buffer::Iterator ns3::EdcaParameterSet::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeAci(uint8_t aci) [member function]
+    cls.add_method('SetBeAci', 
                    'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    ## default-channel-scheduler.h (module 'wave'): bool ns3::DefaultChannelScheduler::ReleaseAccess(uint32_t channelNumber) [member function]
-    cls.add_method('ReleaseAccess', 
-                   'bool', 
-                   [param('uint32_t', 'channelNumber')], 
-                   visibility='private', is_virtual=True)
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeAcm(uint8_t acm) [member function]
+    cls.add_method('SetBeAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetBeAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetBeCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetBeCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetBeTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkAci(uint8_t aci) [member function]
+    cls.add_method('SetBkAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkAcm(uint8_t acm) [member function]
+    cls.add_method('SetBkAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetBkAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetBkCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetBkCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetBkTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetQosInfo(uint8_t qosInfo) [member function]
+    cls.add_method('SetQosInfo', 
+                   'void', 
+                   [param('uint8_t', 'qosInfo')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetQosSupported(uint8_t qosSupported) [member function]
+    cls.add_method('SetQosSupported', 
+                   'void', 
+                   [param('uint8_t', 'qosSupported')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViAci(uint8_t aci) [member function]
+    cls.add_method('SetViAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViAcm(uint8_t acm) [member function]
+    cls.add_method('SetViAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetViAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetViCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetViCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetViTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoAci(uint8_t aci) [member function]
+    cls.add_method('SetVoAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoAcm(uint8_t acm) [member function]
+    cls.add_method('SetVoAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetVoAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetVoCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetVoCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetVoTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
     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]
+def register_Ns3EdcaParameterSetChecker_methods(root_module, cls):
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetChecker::EdcaParameterSetChecker() [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', 
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetChecker::EdcaParameterSetChecker(ns3::EdcaParameterSetChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSetChecker const &', 'arg0')])
+    return
+
+def register_Ns3EdcaParameterSetValue_methods(root_module, cls):
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue::EdcaParameterSetValue() [constructor]
+    cls.add_constructor([])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue::EdcaParameterSetValue(ns3::EdcaParameterSetValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSetValue const &', 'arg0')])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue::EdcaParameterSetValue(ns3::EdcaParameterSet const & value) [constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSet const &', 'value')])
+    ## edca-parameter-set.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::EdcaParameterSetValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
                    [], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): bool ns3::EdcaParameterSetValue::DeserializeFromString(std::string value, ns3::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)
-    ## random-variable-stream.h (module 'core'): uint32_t ns3::DeterministicRandomVariable::GetInteger() [member function]
-    cls.add_method('GetInteger', 
-                   'uint32_t', 
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet ns3::EdcaParameterSetValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::EdcaParameterSet', 
                    [], 
-                   is_virtual=True)
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): std::string ns3::EdcaParameterSetValue::SerializeToString(ns3::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)
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSetValue::Set(ns3::EdcaParameterSet const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::EdcaParameterSet const &', 'value')])
     return
 
 def register_Ns3EdcaTxopN_methods(root_module, cls):
@@ -12169,6 +12687,11 @@
                    'void', 
                    [param('uint32_t', 'aifsn')], 
                    is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTxopLimit(ns3::Time txopLimit) [member function]
+    cls.add_method('SetTxopLimit', 
+                   'void', 
+                   [param('ns3::Time', 'txopLimit')], 
+                   is_virtual=True)
     ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetMinCw() const [member function]
     cls.add_method('GetMinCw', 
                    'uint32_t', 
@@ -12184,6 +12707,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): ns3::Time ns3::EdcaTxopN::GetTxopLimit() const [member function]
+    cls.add_method('GetTxopLimit', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::MacLow> ns3::EdcaTxopN::Low() [member function]
     cls.add_method('Low', 
                    'ns3::Ptr< ns3::MacLow >', 
@@ -12198,10 +12726,11 @@
                    '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]
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetBaAgreementExists(ns3::Mac48Address address, uint8_t tid) const [member function]
     cls.add_method('GetBaAgreementExists', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')])
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')], 
+                   is_const=True)
     ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNOutstandingPacketsInBa(ns3::Mac48Address address, uint8_t tid) [member function]
     cls.add_method('GetNOutstandingPacketsInBa', 
                    'uint32_t', 
@@ -12276,6 +12805,10 @@
     cls.add_method('MissedAck', 
                    'void', 
                    [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::StartNextFragment() [member function]
+    cls.add_method('StartNextFragment', 
+                   'void', 
+                   [])
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::StartNext() [member function]
     cls.add_method('StartNext', 
                    'void', 
@@ -12296,14 +12829,14 @@
     cls.add_method('StartAccessIfNeeded', 
                    'void', 
                    [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRtsRetransmission() [member function]
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRtsRetransmission(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
     cls.add_method('NeedRtsRetransmission', 
                    'bool', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedDataRetransmission() [member function]
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedDataRetransmission(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
     cls.add_method('NeedDataRetransmission', 
                    'bool', 
-                   [])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
     ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedBarRetransmission() [member function]
     cls.add_method('NeedBarRetransmission', 
                    'bool', 
@@ -12383,10 +12916,11 @@
     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(ns3::Mac48Address dest) [member function]
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetAmpduExist(ns3::Mac48Address dest) const [member function]
     cls.add_method('GetAmpduExist', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'dest')])
+                   [param('ns3::Mac48Address', 'dest')], 
+                   is_const=True)
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAmpduExist(ns3::Mac48Address dest, bool enableAmpdu) [member function]
     cls.add_method('SetAmpduExist', 
                    'void', 
@@ -12460,6 +12994,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -12482,6 +13080,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', 
@@ -12629,6 +13305,28 @@
                    [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::WifiTxVector txVector, double ber) const [member function]
+    cls.add_method('CalculateSnr', 
+                   'double', 
+                   [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', 
+                   'double', 
+                   [param('ns3::WifiMode', 'mode'), param('ns3::WifiTxVector', 'txVector'), param('double', 'snr'), param('uint32_t', 'nbits')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## error-rate-model.h (module 'wifi'): static ns3::TypeId ns3::ErrorRateModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=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')])
@@ -13341,6 +14039,39 @@
                    [param('ns3::HtOperations 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_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')])
@@ -14682,6 +15413,11 @@
     cls.add_method('AggregateToAmpdu', 
                    'ns3::Ptr< ns3::Packet >', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const', 'hdr')])
+    ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::CalculateOverallTxTime(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr, ns3::MacLowTransmissionParameters const & params) const [member function]
+    cls.add_method('CalculateOverallTxTime', 
+                   'ns3::Time', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr'), param('ns3::MacLowTransmissionParameters const &', 'params')], 
+                   is_const=True)
     ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::CalculateTransmissionTime(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr, ns3::MacLowTransmissionParameters const & parameters) const [member function]
     cls.add_method('CalculateTransmissionTime', 
                    'ns3::Time', 
@@ -14738,6 +15474,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## mac-low.h (module 'wifi'): ns3::WifiTxVector ns3::MacLow::GetDataTxVector(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr) const [member function]
+    cls.add_method('GetDataTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr')], 
+                   is_const=True, is_virtual=True)
     ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::MacLow::GetPhy() const [member function]
     cls.add_method('GetPhy', 
                    'ns3::Ptr< ns3::WifiPhy >', 
@@ -14781,10 +15522,10 @@
     cls.add_method('NotifySwitchingStartNow', 
                    'void', 
                    [param('ns3::Time', 'duration')])
-    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveError(ns3::Ptr<ns3::Packet> packet, double rxSnr, bool isEndOfFrame) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveError(ns3::Ptr<ns3::Packet> packet, double rxSnr) [member function]
     cls.add_method('ReceiveError', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxSnr'), param('bool', 'isEndOfFrame')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxSnr')])
     ## 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', 
@@ -14871,11 +15612,6 @@
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet const >', 'peekedPacket'), param('ns3::WifiMacHeader', 'peekedHdr'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('uint16_t', 'size')], 
                    is_const=True)
-    ## mac-low.h (module 'wifi'): ns3::WifiTxVector ns3::MacLow::GetDataTxVector(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr) const [member function]
-    cls.add_method('GetDataTxVector', 
-                   'ns3::WifiTxVector', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr')], 
-                   is_const=True, visibility='protected', is_virtual=True)
     ## mac-low.h (module 'wifi'): void ns3::MacLow::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -15181,16 +15917,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -15218,35 +15969,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -15819,6 +16565,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
@@ -16163,6 +16914,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetDsssSupported(bool enable) [member function]
+    cls.add_method('SetDsssSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): bool ns3::RegularWifiMac::GetDsssSupported() const [member function]
+    cls.add_method('GetDsssSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
     return
 
 def register_Ns3Ssid_methods(root_module, cls):
@@ -16258,6 +17019,10 @@
     cls.add_constructor([])
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates(ns3::SupportedRates const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SupportedRates const &', 'arg0')])
+    ## supported-rates.h (module 'wifi'): void ns3::SupportedRates::AddBssMembershipSelectorRate(uint32_t bs) [member function]
+    cls.add_method('AddBssMembershipSelectorRate', 
+                   'void', 
+                   [param('uint32_t', 'bs')])
     ## supported-rates.h (module 'wifi'): void ns3::SupportedRates::AddSupportedRate(uint32_t bs) [member function]
     cls.add_method('AddSupportedRate', 
                    'void', 
@@ -16292,6 +17057,11 @@
                    'bool', 
                    [param('uint32_t', 'bs')], 
                    is_const=True)
+    ## supported-rates.h (module 'wifi'): bool ns3::SupportedRates::IsBssMembershipSelectorRate(uint32_t bs) const [member function]
+    cls.add_method('IsBssMembershipSelectorRate', 
+                   'bool', 
+                   [param('uint32_t', 'bs')], 
+                   is_const=True)
     ## supported-rates.h (module 'wifi'): bool ns3::SupportedRates::IsSupportedRate(uint32_t bs) const [member function]
     cls.add_method('IsSupportedRate', 
                    'bool', 
@@ -17188,6 +17958,11 @@
                    'void', 
                    [param('uint32_t', 'aifsn')], 
                    is_virtual=True)
+    ## dca-txop.h (module 'wifi'): void ns3::DcaTxop::SetTxopLimit(ns3::Time txopLimit) [member function]
+    cls.add_method('SetTxopLimit', 
+                   'void', 
+                   [param('ns3::Time', 'txopLimit')], 
+                   is_virtual=True)
     ## dca-txop.h (module 'wifi'): uint32_t ns3::DcaTxop::GetMinCw() const [member function]
     cls.add_method('GetMinCw', 
                    'uint32_t', 
@@ -17203,6 +17978,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## dca-txop.h (module 'wifi'): ns3::Time ns3::DcaTxop::GetTxopLimit() const [member function]
+    cls.add_method('GetTxopLimit', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## dca-txop.h (module 'wifi'): void ns3::DcaTxop::Queue(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
     cls.add_method('Queue', 
                    'void', 
diff -Naur ns-3.25/src/wave/examples/vanet-routing-compare.cc ns-3.26/src/wave/examples/vanet-routing-compare.cc
--- ns-3.25/src/wave/examples/vanet-routing-compare.cc	2016-10-03 20:57:08.416246320 -0700
+++ ns-3.26/src/wave/examples/vanet-routing-compare.cc	2016-10-03 19:49:01.703387236 -0700
@@ -662,18 +662,15 @@
 }
 
 static inline std::string
-PrintReceivedRoutingPacket (Ptr<Socket> socket, Ptr<Packet> packet)
+PrintReceivedRoutingPacket (Ptr<Socket> socket, Ptr<Packet> packet, Address srcAddress)
 {
-  SocketAddressTag tag;
-  bool found;
-  found = packet->PeekPacketTag (tag);
   std::ostringstream oss;
 
   oss << Simulator::Now ().GetSeconds () << " " << socket->GetNode ()->GetId ();
 
-  if (found)
+  if (InetSocketAddress::IsMatchingType (srcAddress))
     {
-      InetSocketAddress addr = InetSocketAddress::ConvertFrom (tag.GetAddress ());
+      InetSocketAddress addr = InetSocketAddress::ConvertFrom (srcAddress);
       oss << " received one packet from " << addr.GetIpv4 ();
     }
   else
@@ -687,7 +684,8 @@
 RoutingHelper::ReceiveRoutingPacket (Ptr<Socket> socket)
 {
   Ptr<Packet> packet;
-  while ((packet = socket->Recv ()))
+  Address srcAddress;
+  while ((packet = socket->RecvFrom (srcAddress)))
     {
       // application data, for goodput
       uint32_t RxRoutingBytes = packet->GetSize ();
@@ -695,7 +693,7 @@
       GetRoutingStats ().IncRxPkts ();
       if (m_log != 0)
         {
-          NS_LOG_UNCOND (m_protocolName + " " + PrintReceivedRoutingPacket (socket, packet));
+          NS_LOG_UNCOND (m_protocolName + " " + PrintReceivedRoutingPacket (socket, packet, srcAddress));
         }
     }
 }
diff -Naur ns-3.25/src/wave/examples/wave-simple-device.cc ns-3.26/src/wave/examples/wave-simple-device.cc
--- ns-3.25/src/wave/examples/wave-simple-device.cc	2016-10-03 20:57:08.417246312 -0700
+++ ns-3.26/src/wave/examples/wave-simple-device.cc	2016-10-03 19:49:01.704387228 -0700
@@ -15,6 +15,7 @@
  *
  * Author: Junling Bu <linlinjavaer@gmail.com>
  */
+#include "ns3/command-line.h"
 #include "ns3/node.h"
 #include "ns3/packet.h"
 #include "ns3/simulator.h"
@@ -249,6 +250,9 @@
 int
 main (int argc, char *argv[])
 {
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  
   WaveNetDeviceExample example;
   std::cout << "run WAVE WSMP routing service case:" << std::endl;
   example.SendWsmpExample ();
diff -Naur ns-3.25/src/wave/helper/wave-helper.cc ns-3.26/src/wave/helper/wave-helper.cc
--- ns-3.25/src/wave/helper/wave-helper.cc	2016-10-03 20:57:08.419246297 -0700
+++ ns-3.26/src/wave/helper/wave-helper.cc	2016-10-03 19:49:01.706387213 -0700
@@ -86,394 +86,6 @@
   *stream->GetStream () << "r " << Simulator::Now ().GetSeconds () << " " << *p << std::endl;
 }
 
-static void
-PcapSniffTxEvent (
-  Ptr<PcapFileWrapper> file,
-  Ptr<const Packet>    packet,
-  uint16_t             channelFreqMhz,
-  uint16_t             channelNumber,
-  uint32_t             rate,
-  WifiPreamble         preamble,
-  WifiTxVector         txVector,
-  struct mpduInfo      aMpdu)
-{
-  uint32_t dlt = file->GetDataLinkType ();
-
-  switch (dlt)
-    {
-    case PcapHelper::DLT_IEEE802_11:
-      file->Write (Simulator::Now (), packet);
-      return;
-    case PcapHelper::DLT_PRISM_HEADER:
-      {
-        NS_FATAL_ERROR ("PcapSniffTxEvent(): DLT_PRISM_HEADER not implemented");
-        return;
-      }
-    case PcapHelper::DLT_IEEE802_11_RADIO:
-      {
-        Ptr<Packet> p = packet->Copy ();
-        RadiotapHeader header;
-        uint8_t frameFlags = RadiotapHeader::FRAME_FLAG_NONE;
-        header.SetTsft (Simulator::Now ().GetMicroSeconds ());
-
-        //Our capture includes the FCS, so we set the flag to say so.
-        frameFlags |= RadiotapHeader::FRAME_FLAG_FCS_INCLUDED;
-
-        if (preamble == WIFI_PREAMBLE_SHORT)
-          {
-            frameFlags |= RadiotapHeader::FRAME_FLAG_SHORT_PREAMBLE;
-          }
-
-        if (txVector.IsShortGuardInterval ())
-          {
-            frameFlags |= RadiotapHeader::FRAME_FLAG_SHORT_GUARD;
-          }
-
-        header.SetFrameFlags (frameFlags);
-        header.SetRate (rate);
-
-        uint16_t channelFlags = 0;
-        switch (rate)
-          {
-          case 2:  //1Mbps
-          case 4:  //2Mbps
-          case 10: //5Mbps
-          case 22: //11Mbps
-            channelFlags |= RadiotapHeader::CHANNEL_FLAG_CCK;
-            break;
-
-          default:
-            channelFlags |= RadiotapHeader::CHANNEL_FLAG_OFDM;
-            break;
-          }
-
-        if (channelFreqMhz < 2500)
-          {
-            channelFlags |= RadiotapHeader::CHANNEL_FLAG_SPECTRUM_2GHZ;
-          }
-        else
-          {
-            channelFlags |= RadiotapHeader::CHANNEL_FLAG_SPECTRUM_5GHZ;
-          }
-
-        header.SetChannelFrequencyAndFlags (channelFreqMhz, channelFlags);
-
-        if (preamble == WIFI_PREAMBLE_HT_MF || preamble == WIFI_PREAMBLE_HT_GF || preamble == WIFI_PREAMBLE_NONE)
-          {
-            uint8_t mcsRate = 0;
-            uint8_t mcsKnown = RadiotapHeader::MCS_KNOWN_NONE;
-            uint8_t mcsFlags = RadiotapHeader::MCS_FLAGS_NONE;
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_INDEX;
-            mcsRate = rate - 128;
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_BANDWIDTH;
-            if (txVector.GetChannelWidth () == 40)
-              {
-                mcsFlags |= RadiotapHeader::MCS_FLAGS_BANDWIDTH_40;
-              }
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_GUARD_INTERVAL;
-            if (txVector.IsShortGuardInterval ())
-              {
-                mcsFlags |= RadiotapHeader::MCS_FLAGS_GUARD_INTERVAL;
-              }
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_HT_FORMAT;
-            if (preamble == WIFI_PREAMBLE_HT_GF)
-              {
-                mcsFlags |= RadiotapHeader::MCS_FLAGS_HT_GREENFIELD;
-              }
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_NESS;
-            if (txVector.GetNess () & 0x01) //bit 1
-              {
-                mcsFlags |= RadiotapHeader::MCS_FLAGS_NESS_BIT_0;
-              }
-            if (txVector.GetNess () & 0x02) //bit 2
-              {
-                mcsKnown |= RadiotapHeader::MCS_KNOWN_NESS_BIT_1;
-              }
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_FEC_TYPE; //only BCC is currently supported
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_STBC;
-            if (txVector.IsStbc ())
-              {
-                mcsFlags |= RadiotapHeader::MCS_FLAGS_STBC_STREAMS;
-              }
-
-            header.SetMcsFields (mcsKnown, mcsFlags, mcsRate);
-          }
-
-        if (txVector.IsAggregation ())
-          {
-            uint16_t ampduStatusFlags = RadiotapHeader::A_MPDU_STATUS_NONE;
-            ampduStatusFlags |= RadiotapHeader::A_MPDU_STATUS_LAST_KNOWN;
-            /* For PCAP file, MPDU Delimiter and Padding should be removed by the MAC Driver */
-            AmpduSubframeHeader hdr;
-            uint32_t extractedLength;
-            p->RemoveHeader (hdr);
-            extractedLength = hdr.GetLength ();
-            p = p->CreateFragment (0, static_cast<uint32_t> (extractedLength));
-            if (aMpdu.type == LAST_MPDU_IN_AGGREGATE || (hdr.GetEof () == true && hdr.GetLength () > 0))
-              {
-                ampduStatusFlags |= RadiotapHeader::A_MPDU_STATUS_LAST;
-              }
-            header.SetAmpduStatus (aMpdu.mpduRefNumber, ampduStatusFlags, hdr.GetCrc ());
-          }
-
-        if (preamble == WIFI_PREAMBLE_VHT)
-          {
-            uint16_t vhtKnown = RadiotapHeader::VHT_KNOWN_NONE;
-            uint8_t vhtFlags = RadiotapHeader::VHT_FLAGS_NONE;
-            uint8_t vhtBandwidth = 0;
-            uint8_t vhtMcsNss[4] = {0,0,0,0};
-            uint8_t vhtCoding = 0;
-            uint8_t vhtGroupId = 0;
-            uint16_t vhtPartialAid = 0;
-
-            vhtKnown |= RadiotapHeader::VHT_KNOWN_STBC;
-            if (txVector.IsStbc ())
-              {
-                vhtFlags |= RadiotapHeader::VHT_FLAGS_STBC;
-              }
-
-            vhtKnown |= RadiotapHeader::VHT_KNOWN_GUARD_INTERVAL;
-            if (txVector.IsShortGuardInterval ())
-              {
-                vhtFlags |= RadiotapHeader::VHT_FLAGS_GUARD_INTERVAL;
-              }
-
-            vhtKnown |= RadiotapHeader::VHT_KNOWN_BEAMFORMED; //Beamforming is currently not supported
-
-            vhtKnown |= RadiotapHeader::VHT_KNOWN_BANDWIDTH;
-            //not all bandwidth values are currently supported
-            if (txVector.GetChannelWidth () == 40)
-              {
-                vhtBandwidth = 1;
-              }
-            else if (txVector.GetChannelWidth () == 80)
-              {
-                vhtBandwidth = 4;
-              }
-            else if (txVector.GetChannelWidth () == 160)
-              {
-                vhtBandwidth = 11;
-              }
-
-            //only SU PPDUs are currently supported
-            vhtMcsNss[0] |= (txVector.GetNss () & 0x0f);
-            vhtMcsNss[0] |= (((rate - 128) << 4) & 0xf0);
-
-            header.SetVhtFields (vhtKnown, vhtFlags, vhtBandwidth, vhtMcsNss, vhtCoding, vhtGroupId, vhtPartialAid);
-          }
-
-        p->AddHeader (header);
-        file->Write (Simulator::Now (), p);
-        return;
-      }
-    default:
-      NS_ABORT_MSG ("PcapSniffTxEvent(): Unexpected data link type " << dlt);
-    }
-}
-
-static void
-PcapSniffRxEvent (
-  Ptr<PcapFileWrapper>  file,
-  Ptr<const Packet>     packet,
-  uint16_t              channelFreqMhz,
-  uint16_t              channelNumber,
-  uint32_t              rate,
-  WifiPreamble          preamble,
-  WifiTxVector          txVector,
-  struct mpduInfo       aMpdu,
-  struct signalNoiseDbm signalNoise)
-{
-  uint32_t dlt = file->GetDataLinkType ();
-
-  switch (dlt)
-    {
-    case PcapHelper::DLT_IEEE802_11:
-      file->Write (Simulator::Now (), packet);
-      return;
-    case PcapHelper::DLT_PRISM_HEADER:
-      {
-        NS_FATAL_ERROR ("PcapSniffRxEvent(): DLT_PRISM_HEADER not implemented");
-        return;
-      }
-    case PcapHelper::DLT_IEEE802_11_RADIO:
-      {
-        Ptr<Packet> p = packet->Copy ();
-        RadiotapHeader header;
-        uint8_t frameFlags = RadiotapHeader::FRAME_FLAG_NONE;
-        header.SetTsft (Simulator::Now ().GetMicroSeconds ());
-
-        //Our capture includes the FCS, so we set the flag to say so.
-        frameFlags |= RadiotapHeader::FRAME_FLAG_FCS_INCLUDED;
-
-        if (preamble == WIFI_PREAMBLE_SHORT)
-          {
-            frameFlags |= RadiotapHeader::FRAME_FLAG_SHORT_PREAMBLE;
-          }
-
-        if (txVector.IsShortGuardInterval ())
-          {
-            frameFlags |= RadiotapHeader::FRAME_FLAG_SHORT_GUARD;
-          }
-
-        header.SetFrameFlags (frameFlags);
-        header.SetRate (rate);
-
-        uint16_t channelFlags = 0;
-        switch (rate)
-          {
-          case 2:  //1Mbps
-          case 4:  //2Mbps
-          case 10: //5Mbps
-          case 22: //11Mbps
-            channelFlags |= RadiotapHeader::CHANNEL_FLAG_CCK;
-            break;
-
-          default:
-            channelFlags |= RadiotapHeader::CHANNEL_FLAG_OFDM;
-            break;
-          }
-
-        if (channelFreqMhz < 2500)
-          {
-            channelFlags |= RadiotapHeader::CHANNEL_FLAG_SPECTRUM_2GHZ;
-          }
-        else
-          {
-            channelFlags |= RadiotapHeader::CHANNEL_FLAG_SPECTRUM_5GHZ;
-          }
-
-        header.SetChannelFrequencyAndFlags (channelFreqMhz, channelFlags);
-
-        header.SetAntennaSignalPower (signalNoise.signal);
-        header.SetAntennaNoisePower (signalNoise.noise);
-
-        if (preamble == WIFI_PREAMBLE_HT_MF || preamble == WIFI_PREAMBLE_HT_GF || preamble == WIFI_PREAMBLE_NONE)
-          {
-            uint8_t mcsRate = 0;
-            uint8_t mcsKnown = RadiotapHeader::MCS_KNOWN_NONE;
-            uint8_t mcsFlags = RadiotapHeader::MCS_FLAGS_NONE;
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_INDEX;
-            mcsRate = rate - 128;
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_BANDWIDTH;
-            if (txVector.GetChannelWidth () == 40)
-              {
-                mcsFlags |= RadiotapHeader::MCS_FLAGS_BANDWIDTH_40;
-              }
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_GUARD_INTERVAL;
-            if (txVector.IsShortGuardInterval ())
-              {
-                mcsFlags |= RadiotapHeader::MCS_FLAGS_GUARD_INTERVAL;
-              }
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_HT_FORMAT;
-            if (preamble == WIFI_PREAMBLE_HT_GF)
-              {
-                mcsFlags |= RadiotapHeader::MCS_FLAGS_HT_GREENFIELD;
-              }
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_NESS;
-            if (txVector.GetNess () & 0x01) //bit 1
-              {
-                mcsFlags |= RadiotapHeader::MCS_FLAGS_NESS_BIT_0;
-              }
-            if (txVector.GetNess () & 0x02) //bit 2
-              {
-                mcsKnown |= RadiotapHeader::MCS_KNOWN_NESS_BIT_1;
-              }
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_FEC_TYPE; //only BCC is currently supported
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_STBC;
-            if (txVector.IsStbc ())
-              {
-                mcsFlags |= RadiotapHeader::MCS_FLAGS_STBC_STREAMS;
-              }
-
-            header.SetMcsFields (mcsKnown, mcsFlags, mcsRate);
-          }
-
-        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;
-            uint32_t extractedLength;
-            p->RemoveHeader (hdr);
-            extractedLength = hdr.GetLength ();
-            p = p->CreateFragment (0, static_cast<uint32_t> (extractedLength));
-            if (aMpdu.type == LAST_MPDU_IN_AGGREGATE || (hdr.GetEof () == true && hdr.GetLength () > 0))
-              {
-                ampduStatusFlags |= RadiotapHeader::A_MPDU_STATUS_LAST;
-              }
-            header.SetAmpduStatus (aMpdu.mpduRefNumber, ampduStatusFlags, hdr.GetCrc ());
-          }
-
-        if (preamble == WIFI_PREAMBLE_VHT)
-          {
-            uint16_t vhtKnown = RadiotapHeader::VHT_KNOWN_NONE;
-            uint8_t vhtFlags = RadiotapHeader::VHT_FLAGS_NONE;
-            uint8_t vhtBandwidth = 0;
-            uint8_t vhtMcsNss[4] = {0,0,0,0};
-            uint8_t vhtCoding = 0;
-            uint8_t vhtGroupId = 0;
-            uint16_t vhtPartialAid = 0;
-
-            vhtKnown |= RadiotapHeader::VHT_KNOWN_STBC;
-            if (txVector.IsStbc ())
-              {
-                vhtFlags |= RadiotapHeader::VHT_FLAGS_STBC;
-              }
-
-            vhtKnown |= RadiotapHeader::VHT_KNOWN_GUARD_INTERVAL;
-            if (txVector.IsShortGuardInterval ())
-              {
-                vhtFlags |= RadiotapHeader::VHT_FLAGS_GUARD_INTERVAL;
-              }
-
-            vhtKnown |= RadiotapHeader::VHT_KNOWN_BEAMFORMED; //Beamforming is currently not supported
-
-            vhtKnown |= RadiotapHeader::VHT_KNOWN_BANDWIDTH;
-            //not all bandwidth values are currently supported
-            if (txVector.GetChannelWidth () == 40)
-              {
-                vhtBandwidth = 1;
-              }
-            else if (txVector.GetChannelWidth () == 80)
-              {
-                vhtBandwidth = 4;
-              }
-            else if (txVector.GetChannelWidth () == 160)
-              {
-                vhtBandwidth = 11;
-              }
-
-            //only SU PPDUs are currently supported
-            vhtMcsNss[0] |= (txVector.GetNss () & 0x0f);
-            vhtMcsNss[0] |= (((rate - 128) << 4) & 0xf0);
-
-            header.SetVhtFields (vhtKnown, vhtFlags, vhtBandwidth, vhtMcsNss, vhtCoding, vhtGroupId, vhtPartialAid);
-          }
-
-        p->AddHeader (header);
-        file->Write (Simulator::Now (), p);
-        return;
-      }
-    default:
-      NS_ABORT_MSG ("PcapSniffRxEvent(): Unexpected data link type " << dlt);
-    }
-}
 
 /****************************** YansWavePhyHelper ***********************************/
 YansWavePhyHelper
@@ -520,8 +132,8 @@
   for (i = phys.begin (); i != phys.end (); ++i)
     {
       Ptr<WifiPhy> phy = (*i);
-      phy->TraceConnectWithoutContext ("MonitorSnifferTx", MakeBoundCallback (&PcapSniffTxEvent, file));
-      phy->TraceConnectWithoutContext ("MonitorSnifferRx", MakeBoundCallback (&PcapSniffRxEvent, file));
+      phy->TraceConnectWithoutContext ("MonitorSnifferTx", MakeBoundCallback (&YansWavePhyHelper::PcapSniffTxEvent, file));
+      phy->TraceConnectWithoutContext ("MonitorSnifferRx", MakeBoundCallback (&YansWavePhyHelper::PcapSniffRxEvent, file));
     }
 }
 
@@ -809,7 +421,7 @@
         {
           // Handle any random numbers in the PHY objects.
           std::vector<Ptr<WifiPhy> > phys = wave->GetPhys ();
-          for (std::vector<Ptr<WifiPhy> >::iterator j = phys.begin (); j != phys.end (); ++i)
+          for (std::vector<Ptr<WifiPhy> >::iterator j = phys.begin (); j != phys.end (); ++j)
             {
               currentStream += (*j)->AssignStreams (currentStream);
             }
diff -Naur ns-3.25/src/wave/model/bsm-application.cc ns-3.26/src/wave/model/bsm-application.cc
--- ns-3.25/src/wave/model/bsm-application.cc	2016-10-03 20:57:08.421246281 -0700
+++ ns-3.26/src/wave/model/bsm-application.cc	2016-10-03 19:49:01.709387191 -0700
@@ -319,17 +319,14 @@
   NS_LOG_FUNCTION (this);
 
   Ptr<Packet> packet;
-  while ((packet = socket->Recv ()))
+  Address senderAddr;
+  while ((packet = socket->RecvFrom (senderAddr)))
     {
       Ptr<Node> rxNode = socket->GetNode ();
 
-      SocketAddressTag tag;
-      bool found;
-      found = packet->PeekPacketTag (tag);
-
-      if (found)
+      if (InetSocketAddress::IsMatchingType (senderAddr))
         {
-          InetSocketAddress addr = InetSocketAddress::ConvertFrom (tag.GetAddress ());
+          InetSocketAddress addr = InetSocketAddress::ConvertFrom (senderAddr);
           int nodes = m_adhocTxInterfaces->GetN ();
           for (int i = 0; i < nodes; i++)
             {
diff -Naur ns-3.25/src/wave/model/channel-scheduler.cc ns-3.26/src/wave/model/channel-scheduler.cc
--- ns-3.25/src/wave/model/channel-scheduler.cc	2016-10-03 20:57:08.423246266 -0700
+++ ns-3.26/src/wave/model/channel-scheduler.cc	2016-10-03 19:49:01.711387176 -0700
@@ -119,7 +119,7 @@
   uint32_t extends = schInfo.extendedAccess;
   bool immediate = schInfo.immediateAccess;
   Ptr<OcbWifiMac> mac = m_device->GetMac (cn);
-  for (EdcaParameterSetI i = schInfo.edcaParameterSet.begin (); i != schInfo.edcaParameterSet.end (); ++i)
+  for (EdcaParametersI i = schInfo.edcaParameters.begin (); i != schInfo.edcaParameters.end (); ++i)
     {
       EdcaParameter edca = i->second;
       mac->ConfigureEdca (edca.cwmin, edca.cwmax, edca.aifsn, i->first);
diff -Naur ns-3.25/src/wave/model/channel-scheduler.h ns-3.26/src/wave/model/channel-scheduler.h
--- ns-3.25/src/wave/model/channel-scheduler.h	2016-10-03 20:57:08.423246266 -0700
+++ ns-3.26/src/wave/model/channel-scheduler.h	2016-10-03 19:49:01.711387176 -0700
@@ -29,8 +29,8 @@
   uint32_t cwmax;
   uint32_t aifsn;
 };
-typedef std::map<AcIndex,EdcaParameter> EdcaParameterSet;
-typedef std::map<AcIndex,EdcaParameter>::const_iterator EdcaParameterSetI;
+typedef std::map<AcIndex,EdcaParameter> EdcaParameters;
+typedef std::map<AcIndex,EdcaParameter>::const_iterator EdcaParametersI;
 
 #define EXTENDED_ALTERNATING 0x00
 #define EXTENDED_CONTINUOUS 0xff
@@ -44,7 +44,7 @@
  * \param extendedAccess Indicates that the MLME should provide continuous
  * access (during both SCH interval and CCH interval) to the SCH for ExtendedAccess
  * control channel intervals. A value of 255 indicates indefinite access.
- * \param edcaParameterSet If present, as specified in IEEE Std 802.11.
+ * \param edcaParameters If present, as specified in IEEE Std 802.11.
  */
 struct SchInfo
 {
@@ -52,7 +52,7 @@
   //OperationalRateSet  operationalRateSet;  // not supported
   bool immediateAccess;
   uint8_t extendedAccess;
-  EdcaParameterSet edcaParameterSet;
+  EdcaParameters edcaParameters;
   SchInfo ()
     : channelNumber (SCH1),
       immediateAccess (false),
@@ -67,11 +67,11 @@
   {
 
   }
-  SchInfo (uint32_t channel, bool immediate, uint32_t channelAccess, EdcaParameterSet edca)
+  SchInfo (uint32_t channel, bool immediate, uint32_t channelAccess, EdcaParameters edca)
     : channelNumber (channel),
       immediateAccess (immediate),
       extendedAccess (channelAccess),
-      edcaParameterSet (edca)
+      edcaParameters (edca)
   {
 
   }
diff -Naur ns-3.25/src/wave/model/ocb-wifi-mac.cc ns-3.26/src/wave/model/ocb-wifi-mac.cc
--- ns-3.25/src/wave/model/ocb-wifi-mac.cc	2016-10-03 20:57:08.425246250 -0700
+++ ns-3.26/src/wave/model/ocb-wifi-mac.cc	2016-10-03 19:49:01.713387161 -0700
@@ -22,7 +22,6 @@
 #include "ns3/pointer.h"
 #include "ns3/log.h"
 #include "ns3/string.h"
-#include "ns3/qos-tag.h"
 #include "ns3/mac-low.h"
 #include "ns3/dcf-manager.h"
 #include "ns3/mac-rx-middle.h"
@@ -160,8 +159,17 @@
   NS_LOG_FUNCTION (this << packet << to);
   if (m_stationManager->IsBrandNew (to))
     {
-      // In ocb mode, we assume that every destination supports all
-      // the rates we support.
+      //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);
     }
@@ -237,6 +245,23 @@
   Mac48Address from = hdr->GetAddr2 ();
   Mac48Address to = hdr->GetAddr1 ();
 
+  if (m_stationManager->IsBrandNew (from))
+    {
+      //In ad hoc mode, we assume that every destination supports all
+      //the rates we support.
+      if (m_htSupported || m_vhtSupported)
+        {
+          m_stationManager->AddAllSupportedMcs (from);
+          m_stationManager->AddStationHtCapabilities (from, GetHtCapabilities());
+        }
+      if (m_vhtSupported)
+        {
+          m_stationManager->AddStationVhtCapabilities (from, GetVhtCapabilities());
+        }
+      m_stationManager->AddAllSupportedModes (from);
+      m_stationManager->RecordDisassociated (from);
+    }
+
   if (hdr->IsData ())
     {
       if (hdr->IsQosData () && hdr->IsQosAmsdu ())
diff -Naur ns-3.25/src/wave/model/vsa-manager.cc ns-3.26/src/wave/model/vsa-manager.cc
--- ns-3.25/src/wave/model/vsa-manager.cc	2016-10-03 20:57:08.427246235 -0700
+++ ns-3.26/src/wave/model/vsa-manager.cc	2016-10-03 19:49:01.714387154 -0700
@@ -18,7 +18,7 @@
 #include "ns3/log.h"
 #include "ns3/assert.h"
 #include "ns3/simulator.h"
-#include "ns3/qos-tag.h"
+#include "ns3/socket.h"
 #include "vsa-manager.h"
 #include "higher-tx-tag.h"
 #include "wave-net-device.h"
@@ -170,8 +170,9 @@
 
   // refer to 1609.4-2010 chapter 5.4.1
   // Management frames are assigned the highest AC (AC_VO).
-  QosTag qosTag (7);
-  vsc->AddPacketTag (qosTag);
+  SocketPriorityTag priorityTag;
+  priorityTag.SetPriority (7);
+  vsc->AddPacketTag (priorityTag);
 
   WifiTxVector txVector;
   txVector.SetChannelWidth (10);
diff -Naur ns-3.25/src/wave/model/wave-net-device.cc ns-3.26/src/wave/model/wave-net-device.cc
--- ns-3.25/src/wave/model/wave-net-device.cc	2016-10-03 20:57:08.428246227 -0700
+++ ns-3.26/src/wave/model/wave-net-device.cc	2016-10-03 19:49:01.716387139 -0700
@@ -24,7 +24,7 @@
 #include "ns3/node.h"
 #include "ns3/trace-source-accessor.h"
 #include "ns3/log.h"
-#include "ns3/qos-tag.h"
+#include "ns3/socket.h"
 #include "ns3/object-map.h"
 #include "ns3/object-vector.h"
 #include "wave-net-device.h"
@@ -421,8 +421,9 @@
 
   // according to channel number and priority,
   // route the packet to a proper queue.
-  QosTag qos = QosTag (txInfo.priority);
-  packet->AddPacketTag (qos);
+  SocketPriorityTag prio;
+  prio.SetPriority (txInfo.priority);
+  packet->ReplacePacketTag (prio);
   Ptr<WifiMac> mac = GetMac (txInfo.channelNumber);
   Mac48Address realTo = Mac48Address::ConvertFrom (dest);
   mac->NotifyTx (packet);
diff -Naur ns-3.25/src/wifi/bindings/callbacks_list.py ns-3.26/src/wifi/bindings/callbacks_list.py
--- ns-3.25/src/wifi/bindings/callbacks_list.py	2016-10-03 20:57:08.431246203 -0700
+++ ns-3.26/src/wifi/bindings/callbacks_list.py	2016-10-03 19:49:01.718387124 -0700
@@ -2,15 +2,16 @@
     ['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>', 'double', 'bool', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::Ptr<ns3::Packet>', 'double', 'ns3::empty', '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', 'bool', 'ns3::empty', 'ns3::empty', 'ns3::empty', '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'],
     ['void', 'ns3::Mac48Address', 'unsigned char', 'bool', '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.25/src/wifi/bindings/modulegen__gcc_ILP32.py ns-3.26/src/wifi/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/wifi/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.443246110 -0700
+++ ns-3.26/src/wifi/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.732387020 -0700
@@ -20,12 +20,8 @@
 def register_types(module):
     root_module = module.get_root()
     
-    ## 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_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]
@@ -35,21 +31,25 @@
     ## 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]
-    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'])
-    ## qos-tag.h (module 'wifi'): ns3::UserPriority [enumeration]
-    module.add_enum('UserPriority', ['UP_BK', 'UP_BE', 'UP_EE', 'UP_CL', 'UP_VI', 'UP_VO', 'UP_NC'])
+    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', 'WIFI_PHY_STANDARD_UNSPECIFIED'])
+    ## 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-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'])
     ## edca-txop-n.h (module 'wifi'): ns3::TypeOfStation [enumeration]
     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::EnvironmentType [enumeration]
+    module.add_enum('EnvironmentType', ['UrbanEnvironment', 'SubUrbanEnvironment', 'OpenAreasEnvironment'], import_from_module='ns.propagation')
     ## 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]
     module.add_enum('MaxSize_e', ['MAX_SIZE'], outer_class=root_module['ns3::Address'], import_from_module='ns.network')
+    ## angles.h (module 'antenna'): ns3::Angles [struct]
+    module.add_class('Angles', import_from_module='ns.antenna')
     ## trace-helper.h (module 'network'): ns3::AsciiTraceHelper [class]
     module.add_class('AsciiTraceHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::AsciiTraceHelperForDevice [class]
@@ -60,6 +60,8 @@
     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'])
+    ## spectrum-model.h (module 'spectrum'): ns3::BandInfo [struct]
+    module.add_class('BandInfo', import_from_module='ns.spectrum')
     ## block-ack-manager.h (module 'wifi'): ns3::Bar [struct]
     module.add_class('Bar')
     ## block-ack-agreement.h (module 'wifi'): ns3::BlockAckAgreement [class]
@@ -178,8 +180,8 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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 +192,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], import_from_module='ns.core')
     ## status-code.h (module 'wifi'): ns3::StatusCode [class]
     module.add_class('StatusCode')
     ## tag.h (module 'network'): ns3::Tag [class]
@@ -200,12 +204,16 @@
     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 int> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned int'])
     ## 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]
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -223,9 +231,13 @@
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeFactory [class]
     module.add_class('WifiModeFactory')
     ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper [class]
-    module.add_class('WifiPhyHelper', allow_subclassing=True)
+    module.add_class('WifiPhyHelper', parent=[root_module['ns3::PcapHelperForDevice'], root_module['ns3::AsciiTraceHelperForDevice']])
+    ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::SupportedPcapDataLinkTypes [enumeration]
+    module.add_enum('SupportedPcapDataLinkTypes', ['DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO'], outer_class=root_module['ns3::WifiPhyHelper'])
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhyListener [class]
     module.add_class('WifiPhyListener', allow_subclassing=True)
+    ## wifi-phy-tag.h (module 'wifi'): ns3::WifiPhyTag [class]
+    module.add_class('WifiPhyTag', parent=root_module['ns3::Tag'])
     ## wifi-radio-energy-model-helper.h (module 'wifi'): ns3::WifiRadioEnergyModelHelper [class]
     module.add_class('WifiRadioEnergyModelHelper', parent=root_module['ns3::DeviceEnergyModelHelper'])
     ## wifi-radio-energy-model.h (module 'wifi'): ns3::WifiRadioEnergyModelPhyListener [class]
@@ -243,9 +255,7 @@
     ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiChannelHelper [class]
     module.add_class('YansWifiChannelHelper')
     ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiPhyHelper [class]
-    module.add_class('YansWifiPhyHelper', parent=[root_module['ns3::WifiPhyHelper'], root_module['ns3::PcapHelperForDevice'], root_module['ns3::AsciiTraceHelperForDevice']])
-    ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiPhyHelper::SupportedPcapDataLinkTypes [enumeration]
-    module.add_enum('SupportedPcapDataLinkTypes', ['DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO'], outer_class=root_module['ns3::YansWifiPhyHelper'])
+    module.add_class('YansWifiPhyHelper', parent=root_module['ns3::WifiPhyHelper'])
     ## 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]
@@ -290,8 +300,6 @@
     module.add_class('PropagationDelayModel', import_from_module='ns.propagation', parent=root_module['ns3::Object'])
     ## propagation-loss-model.h (module 'propagation'): ns3::PropagationLossModel [class]
     module.add_class('PropagationLossModel', import_from_module='ns.propagation', parent=root_module['ns3::Object'])
-    ## qos-tag.h (module 'wifi'): ns3::QosTag [class]
-    module.add_class('QosTag', parent=root_module['ns3::Tag'])
     ## qos-wifi-mac-helper.h (module 'wifi'): ns3::QosWifiMacHelper [class]
     module.add_class('QosWifiMacHelper', parent=root_module['ns3::WifiMacHelper'])
     ## propagation-delay-model.h (module 'propagation'): ns3::RandomPropagationDelayModel [class]
@@ -328,12 +336,30 @@
     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]
+    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::SpectrumValue, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumValue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::SpectrumValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::SpectrumValue>'], parent=root_module['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]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::WifiInformationElement', 'ns3::empty', 'ns3::DefaultDeleter<ns3::WifiInformationElement>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## snr-tag.h (module 'wifi'): ns3::SnrTag [class]
     module.add_class('SnrTag', parent=root_module['ns3::Tag'])
+    ## spectrum-interference.h (module 'spectrum'): ns3::SpectrumInterference [class]
+    module.add_class('SpectrumInterference', import_from_module='ns.spectrum', parent=root_module['ns3::Object'])
+    ## spectrum-model.h (module 'spectrum'): ns3::SpectrumModel [class]
+    module.add_class('SpectrumModel', import_from_module='ns.spectrum', parent=root_module['ns3::SimpleRefCount< ns3::SpectrumModel, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumModel> >'])
+    ## spectrum-phy.h (module 'spectrum'): ns3::SpectrumPhy [class]
+    module.add_class('SpectrumPhy', import_from_module='ns.spectrum', parent=root_module['ns3::Object'])
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters [struct]
+    module.add_class('SpectrumSignalParameters', import_from_module='ns.spectrum', parent=root_module['ns3::SimpleRefCount< ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> >'])
+    ## spectrum-value.h (module 'spectrum'): ns3::SpectrumValue [class]
+    module.add_class('SpectrumValue', import_from_module='ns.spectrum', parent=root_module['ns3::SimpleRefCount< ns3::SpectrumValue, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumValue> >'])
+    ## spectrum-wifi-helper.h (module 'wifi'): ns3::SpectrumWifiPhyHelper [class]
+    module.add_class('SpectrumWifiPhyHelper', parent=root_module['ns3::WifiPhyHelper'])
     ## propagation-loss-model.h (module 'propagation'): ns3::ThreeLogDistancePropagationLossModel [class]
     module.add_class('ThreeLogDistancePropagationLossModel', import_from_module='ns.propagation', parent=root_module['ns3::PropagationLossModel'])
     ## nstime.h (module 'core'): ns3::Time [class]
@@ -384,6 +410,8 @@
     module.add_enum('AddressType', ['ADDR1', 'ADDR2', 'ADDR3', 'ADDR4'], outer_class=root_module['ns3::WifiMacHeader'])
     ## wifi-mac-queue.h (module 'wifi'): ns3::WifiMacQueue [class]
     module.add_class('WifiMacQueue', parent=root_module['ns3::Object'])
+    ## wifi-mac-queue.h (module 'wifi'): ns3::WifiMacQueue::DropPolicy [enumeration]
+    module.add_enum('DropPolicy', ['DROP_NEWEST', 'DROP_OLDEST'], outer_class=root_module['ns3::WifiMacQueue'])
     ## wifi-mac-trailer.h (module 'wifi'): ns3::WifiMacTrailer [class]
     module.add_class('WifiMacTrailer', parent=root_module['ns3::Trailer'])
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhy [class]
@@ -396,6 +424,10 @@
     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-spectrum-phy-interface.h (module 'wifi'): ns3::WifiSpectrumPhyInterface [class]
+    module.add_class('WifiSpectrumPhyInterface', parent=root_module['ns3::SpectrumPhy'])
+    ## wifi-spectrum-signal-parameters.h (module 'wifi'): ns3::WifiSpectrumSignalParameters [struct]
+    module.add_class('WifiSpectrumSignalParameters', parent=root_module['ns3::SpectrumSignalParameters'])
     ## 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]
@@ -414,6 +446,8 @@
     module.add_class('AmrrWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
     ## amsdu-subframe-header.h (module 'wifi'): ns3::AmsduSubframeHeader [class]
     module.add_class('AmsduSubframeHeader', parent=root_module['ns3::Header'])
+    ## antenna-model.h (module 'antenna'): ns3::AntennaModel [class]
+    module.add_class('AntennaModel', import_from_module='ns.antenna', parent=root_module['ns3::Object'])
     ## aparf-wifi-manager.h (module 'wifi'): ns3::AparfWifiManager [class]
     module.add_class('AparfWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
     ## aparf-wifi-manager.h (module 'wifi'): ns3::AparfWifiManager::State [enumeration]
@@ -462,10 +496,26 @@
     module.add_class('DeviceEnergyModel', import_from_module='ns.energy', parent=root_module['ns3::Object'])
     ## double.h (module 'core'): ns3::DoubleValue [class]
     module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet [class]
+    module.add_class('DsssParameterSet', parent=root_module['ns3::WifiInformationElement'])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetChecker [class]
+    module.add_class('DsssParameterSetChecker', parent=root_module['ns3::AttributeChecker'])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue [class]
+    module.add_class('DsssParameterSetValue', parent=root_module['ns3::AttributeValue'])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet [class]
+    module.add_class('EdcaParameterSet', parent=root_module['ns3::WifiInformationElement'])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetChecker [class]
+    module.add_class('EdcaParameterSetChecker', parent=root_module['ns3::AttributeChecker'])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue [class]
+    module.add_class('EdcaParameterSetValue', parent=root_module['ns3::AttributeValue'])
     ## edca-txop-n.h (module 'wifi'): ns3::EdcaTxopN [class]
     module.add_class('EdcaTxopN', parent=root_module['ns3::Dcf'])
     ## 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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## energy-harvester.h (module 'energy'): ns3::EnergyHarvester [class]
@@ -610,10 +660,16 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
     module.add_class('RraaWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
+    ## spectrum-channel.h (module 'spectrum'): ns3::SpectrumChannel [class]
+    module.add_class('SpectrumChannel', import_from_module='ns.spectrum', parent=root_module['ns3::Channel'])
+    ## spectrum-wifi-phy.h (module 'wifi'): ns3::SpectrumWifiPhy [class]
+    module.add_class('SpectrumWifiPhy', parent=root_module['ns3::WifiPhy'])
     ## ssid.h (module 'wifi'): ns3::Ssid [class]
     module.add_class('Ssid', parent=root_module['ns3::WifiInformationElement'])
     ## ssid.h (module 'wifi'): ns3::SsidChecker [class]
@@ -679,10 +735,13 @@
     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< double >', 'double', container_type=u'vector')
+    module.add_container('ns3::Bands', 'ns3::BandInfo', 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')
+    module.add_container('std::vector< unsigned short >', 'short unsigned int', container_type=u'vector')
     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&')
@@ -692,6 +751,12 @@
     typehandlers.add_type_alias(u'uint8_t', u'ns3::WifiInformationElementId')
     typehandlers.add_type_alias(u'uint8_t*', u'ns3::WifiInformationElementId*')
     typehandlers.add_type_alias(u'uint8_t&', u'ns3::WifiInformationElementId&')
+    typehandlers.add_type_alias(u'std::vector< double, std::allocator< double > >', u'ns3::Values')
+    typehandlers.add_type_alias(u'std::vector< double, std::allocator< double > >*', u'ns3::Values*')
+    typehandlers.add_type_alias(u'std::vector< double, std::allocator< double > >&', u'ns3::Values&')
+    typehandlers.add_type_alias(u'std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >', u'ns3::Bands')
+    typehandlers.add_type_alias(u'std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >*', u'ns3::Bands*')
+    typehandlers.add_type_alias(u'std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >&', u'ns3::Bands&')
     typehandlers.add_type_alias(u'ns3::Vector3D', u'ns3::Vector')
     typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
     typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
@@ -706,15 +771,18 @@
     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'uint32_t', u'ns3::SpectrumModelUid_t')
+    typehandlers.add_type_alias(u'uint32_t*', u'ns3::SpectrumModelUid_t*')
+    typehandlers.add_type_alias(u'uint32_t&', u'ns3::SpectrumModelUid_t&')
     typehandlers.add_type_alias(u'std::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'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'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&')
@@ -808,12 +876,15 @@
     typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
     typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
     typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
     typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
     typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
     typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_internal(module):
     root_module = module.get_root()
@@ -821,11 +892,13 @@
 
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
+    register_Ns3Angles_methods(root_module, root_module['ns3::Angles'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
     register_Ns3AsciiTraceHelperForDevice_methods(root_module, root_module['ns3::AsciiTraceHelperForDevice'])
     register_Ns3AthstatsHelper_methods(root_module, root_module['ns3::AthstatsHelper'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
+    register_Ns3BandInfo_methods(root_module, root_module['ns3::BandInfo'])
     register_Ns3Bar_methods(root_module, root_module['ns3::Bar'])
     register_Ns3BlockAckAgreement_methods(root_module, root_module['ns3::BlockAckAgreement'])
     register_Ns3BlockAckCache_methods(root_module, root_module['ns3::BlockAckCache'])
@@ -889,6 +962,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_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
     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'])
@@ -901,6 +975,7 @@
     register_Ns3WifiModeFactory_methods(root_module, root_module['ns3::WifiModeFactory'])
     register_Ns3WifiPhyHelper_methods(root_module, root_module['ns3::WifiPhyHelper'])
     register_Ns3WifiPhyListener_methods(root_module, root_module['ns3::WifiPhyListener'])
+    register_Ns3WifiPhyTag_methods(root_module, root_module['ns3::WifiPhyTag'])
     register_Ns3WifiRadioEnergyModelHelper_methods(root_module, root_module['ns3::WifiRadioEnergyModelHelper'])
     register_Ns3WifiRadioEnergyModelPhyListener_methods(root_module, root_module['ns3::WifiRadioEnergyModelPhyListener'])
     register_Ns3WifiRemoteStation_methods(root_module, root_module['ns3::WifiRemoteStation'])
@@ -930,7 +1005,6 @@
     register_Ns3PcapFileWrapper_methods(root_module, root_module['ns3::PcapFileWrapper'])
     register_Ns3PropagationDelayModel_methods(root_module, root_module['ns3::PropagationDelayModel'])
     register_Ns3PropagationLossModel_methods(root_module, root_module['ns3::PropagationLossModel'])
-    register_Ns3QosTag_methods(root_module, root_module['ns3::QosTag'])
     register_Ns3QosWifiMacHelper_methods(root_module, root_module['ns3::QosWifiMacHelper'])
     register_Ns3RandomPropagationDelayModel_methods(root_module, root_module['ns3::RandomPropagationDelayModel'])
     register_Ns3RandomPropagationLossModel_methods(root_module, root_module['ns3::RandomPropagationLossModel'])
@@ -949,9 +1023,18 @@
     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__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> >'])
     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'])
+    register_Ns3SpectrumInterference_methods(root_module, root_module['ns3::SpectrumInterference'])
+    register_Ns3SpectrumModel_methods(root_module, root_module['ns3::SpectrumModel'])
+    register_Ns3SpectrumPhy_methods(root_module, root_module['ns3::SpectrumPhy'])
+    register_Ns3SpectrumSignalParameters_methods(root_module, root_module['ns3::SpectrumSignalParameters'])
+    register_Ns3SpectrumValue_methods(root_module, root_module['ns3::SpectrumValue'])
+    register_Ns3SpectrumWifiPhyHelper_methods(root_module, root_module['ns3::SpectrumWifiPhyHelper'])
     register_Ns3ThreeLogDistancePropagationLossModel_methods(root_module, root_module['ns3::ThreeLogDistancePropagationLossModel'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
@@ -972,6 +1055,8 @@
     register_Ns3WifiPhy_methods(root_module, root_module['ns3::WifiPhy'])
     register_Ns3WifiPhyStateHelper_methods(root_module, root_module['ns3::WifiPhyStateHelper'])
     register_Ns3WifiRemoteStationManager_methods(root_module, root_module['ns3::WifiRemoteStationManager'])
+    register_Ns3WifiSpectrumPhyInterface_methods(root_module, root_module['ns3::WifiSpectrumPhyInterface'])
+    register_Ns3WifiSpectrumSignalParameters_methods(root_module, root_module['ns3::WifiSpectrumSignalParameters'])
     register_Ns3WifiTxCurrentModel_methods(root_module, root_module['ns3::WifiTxCurrentModel'])
     register_Ns3YansWifiPhy_methods(root_module, root_module['ns3::YansWifiPhy'])
     register_Ns3ZetaRandomVariable_methods(root_module, root_module['ns3::ZetaRandomVariable'])
@@ -981,6 +1066,7 @@
     register_Ns3AmpduSubframeHeader_methods(root_module, root_module['ns3::AmpduSubframeHeader'])
     register_Ns3AmrrWifiManager_methods(root_module, root_module['ns3::AmrrWifiManager'])
     register_Ns3AmsduSubframeHeader_methods(root_module, root_module['ns3::AmsduSubframeHeader'])
+    register_Ns3AntennaModel_methods(root_module, root_module['ns3::AntennaModel'])
     register_Ns3AparfWifiManager_methods(root_module, root_module['ns3::AparfWifiManager'])
     register_Ns3ArfWifiManager_methods(root_module, root_module['ns3::ArfWifiManager'])
     register_Ns3AthstatsWifiTraceSink_methods(root_module, root_module['ns3::AthstatsWifiTraceSink'])
@@ -1004,8 +1090,16 @@
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3DeviceEnergyModel_methods(root_module, root_module['ns3::DeviceEnergyModel'])
     register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
+    register_Ns3DsssParameterSet_methods(root_module, root_module['ns3::DsssParameterSet'])
+    register_Ns3DsssParameterSetChecker_methods(root_module, root_module['ns3::DsssParameterSetChecker'])
+    register_Ns3DsssParameterSetValue_methods(root_module, root_module['ns3::DsssParameterSetValue'])
+    register_Ns3EdcaParameterSet_methods(root_module, root_module['ns3::EdcaParameterSet'])
+    register_Ns3EdcaParameterSetChecker_methods(root_module, root_module['ns3::EdcaParameterSetChecker'])
+    register_Ns3EdcaParameterSetValue_methods(root_module, root_module['ns3::EdcaParameterSetValue'])
     register_Ns3EdcaTxopN_methods(root_module, root_module['ns3::EdcaTxopN'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EnergyHarvester_methods(root_module, root_module['ns3::EnergyHarvester'])
     register_Ns3EnergySource_methods(root_module, root_module['ns3::EnergySource'])
@@ -1079,6 +1173,8 @@
     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_Ns3SpectrumChannel_methods(root_module, root_module['ns3::SpectrumChannel'])
+    register_Ns3SpectrumWifiPhy_methods(root_module, root_module['ns3::SpectrumWifiPhy'])
     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'])
@@ -1186,6 +1282,24 @@
                    is_const=True)
     return
 
+def register_Ns3Angles_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## angles.h (module 'antenna'): ns3::Angles::Angles(ns3::Angles const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Angles const &', 'arg0')])
+    ## angles.h (module 'antenna'): ns3::Angles::Angles() [constructor]
+    cls.add_constructor([])
+    ## angles.h (module 'antenna'): ns3::Angles::Angles(double phi, double theta) [constructor]
+    cls.add_constructor([param('double', 'phi'), param('double', 'theta')])
+    ## angles.h (module 'antenna'): ns3::Angles::Angles(ns3::Vector v) [constructor]
+    cls.add_constructor([param('ns3::Vector', 'v')])
+    ## angles.h (module 'antenna'): ns3::Angles::Angles(ns3::Vector v, ns3::Vector o) [constructor]
+    cls.add_constructor([param('ns3::Vector', 'v'), param('ns3::Vector', 'o')])
+    ## angles.h (module 'antenna'): ns3::Angles::phi [variable]
+    cls.add_instance_attribute('phi', 'double', is_const=False)
+    ## angles.h (module 'antenna'): ns3::Angles::theta [variable]
+    cls.add_instance_attribute('theta', 'double', is_const=False)
+    return
+
 def register_Ns3AsciiTraceHelper_methods(root_module, cls):
     ## trace-helper.h (module 'network'): ns3::AsciiTraceHelper::AsciiTraceHelper(ns3::AsciiTraceHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::AsciiTraceHelper const &', 'arg0')])
@@ -1367,6 +1481,19 @@
     cls.add_instance_attribute('value', 'ns3::Ptr< ns3::AttributeValue >', is_const=False)
     return
 
+def register_Ns3BandInfo_methods(root_module, cls):
+    ## spectrum-model.h (module 'spectrum'): ns3::BandInfo::BandInfo() [constructor]
+    cls.add_constructor([])
+    ## spectrum-model.h (module 'spectrum'): ns3::BandInfo::BandInfo(ns3::BandInfo const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BandInfo const &', 'arg0')])
+    ## spectrum-model.h (module 'spectrum'): ns3::BandInfo::fc [variable]
+    cls.add_instance_attribute('fc', 'double', is_const=False)
+    ## spectrum-model.h (module 'spectrum'): ns3::BandInfo::fh [variable]
+    cls.add_instance_attribute('fh', 'double', is_const=False)
+    ## spectrum-model.h (module 'spectrum'): ns3::BandInfo::fl [variable]
+    cls.add_instance_attribute('fl', 'double', is_const=False)
+    return
+
 def register_Ns3Bar_methods(root_module, cls):
     ## block-ack-manager.h (module 'wifi'): ns3::Bar::Bar(ns3::Bar const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Bar const &', 'arg0')])
@@ -1593,9 +1720,13 @@
     cls.add_method('NotifyMpduTransmission', 
                    'void', 
                    [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('uint16_t', 'nextSeqNumber'), param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
-    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacket(ns3::WifiMacHeader & hdr, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacket(ns3::WifiMacHeader & hdr) [member function]
     cls.add_method('PeekNextPacket', 
                    'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'hdr')])
+    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacketByTidAndAddress(ns3::WifiMacHeader & hdr, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextPacketByTidAndAddress', 
+                   'ns3::Ptr< ns3::Packet const >', 
                    [param('ns3::WifiMacHeader &', 'hdr'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')])
     ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::RemovePacket(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
     cls.add_method('RemovePacket', 
@@ -1761,6 +1892,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2206,6 +2342,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## dcf-manager.h (module 'wifi'): ns3::Time ns3::DcfState::GetTxopLimit() const [member function]
+    cls.add_method('GetTxopLimit', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## dcf-manager.h (module 'wifi'): bool ns3::DcfState::IsAccessRequested() const [member function]
     cls.add_method('IsAccessRequested', 
                    'bool', 
@@ -2232,6 +2373,10 @@
     cls.add_method('SetCwMin', 
                    'void', 
                    [param('uint32_t', 'minCw')])
+    ## dcf-manager.h (module 'wifi'): void ns3::DcfState::SetTxopLimit(ns3::Time txopLimit) [member function]
+    cls.add_method('SetTxopLimit', 
+                   'void', 
+                   [param('ns3::Time', 'txopLimit')])
     ## dcf-manager.h (module 'wifi'): void ns3::DcfState::StartBackoffNow(uint32_t nSlots) [member function]
     cls.add_method('StartBackoffNow', 
                    'void', 
@@ -2562,6 +2707,10 @@
     cls.add_method('Add', 
                    'ns3::Ptr< ns3::InterferenceHelper::Event >', 
                    [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::Time', 'duration'), param('double', 'rxPower')])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::AddForeignSignal(ns3::Time duration, double rxPower) [member function]
+    cls.add_method('AddForeignSignal', 
+                   'void', 
+                   [param('ns3::Time', 'duration'), param('double', 'rxPower')])
     ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer ns3::InterferenceHelper::CalculatePlcpHeaderSnrPer(ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
     cls.add_method('CalculatePlcpHeaderSnrPer', 
                    'ns3::InterferenceHelper::SnrPer', 
@@ -3301,6 +3450,11 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::StartNextFragment() [member function]
+    cls.add_method('StartNextFragment', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3MacLowTransmissionParameters_methods(root_module, cls):
@@ -4048,10 +4202,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -4412,6 +4566,40 @@
                    [param('double 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_Ns3TracedValue__Unsigned_long_long_methods(root_module, cls):
     ## traced-value.h (module 'core'): ns3::TracedValue<unsigned long long>::TracedValue() [constructor]
     cls.add_constructor([])
@@ -4457,23 +4645,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -4588,6 +4776,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -4609,10 +4802,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -4634,6 +4827,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -4649,6 +4846,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Vector2D_methods(root_module, cls):
@@ -4840,15 +5041,52 @@
     return
 
 def register_Ns3WifiPhyHelper_methods(root_module, cls):
-    ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper() [constructor]
-    cls.add_constructor([])
     ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper(ns3::WifiPhyHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiPhyHelper const &', 'arg0')])
+    ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper() [constructor]
+    cls.add_constructor([])
     ## wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('Create', 
                    'ns3::Ptr< ns3::WifiPhy >', 
                    [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-helper.h (module 'wifi'): ns3::PcapHelper::DataLinkType ns3::WifiPhyHelper::GetPcapDataLinkType() const [member function]
+    cls.add_method('GetPcapDataLinkType', 
+                   'ns3::PcapHelper::DataLinkType', 
+                   [], 
+                   is_const=True)
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::Set(std::string name, ns3::AttributeValue const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'v')])
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::SetErrorRateModel(std::string name, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetErrorRateModel', 
+                   'void', 
+                   [param('std::string', 'name'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::SetPcapDataLinkType(ns3::WifiPhyHelper::SupportedPcapDataLinkTypes dlt) [member function]
+    cls.add_method('SetPcapDataLinkType', 
+                   'void', 
+                   [param('ns3::WifiPhyHelper::SupportedPcapDataLinkTypes', 'dlt')])
+    ## wifi-helper.h (module 'wifi'): static void ns3::WifiPhyHelper::PcapSniffRxEvent(ns3::Ptr<ns3::PcapFileWrapper> file, 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('PcapSniffRxEvent', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PcapFileWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::signalNoiseDbm', 'signalNoise')], 
+                   is_static=True, visibility='protected')
+    ## wifi-helper.h (module 'wifi'): static void ns3::WifiPhyHelper::PcapSniffTxEvent(ns3::Ptr<ns3::PcapFileWrapper> file, ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector, ns3::mpduInfo aMpdu) [member function]
+    cls.add_method('PcapSniffTxEvent', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PcapFileWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector'), param('ns3::mpduInfo', 'aMpdu')], 
+                   is_static=True, visibility='protected')
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiInternal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapInternal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3WifiPhyListener_methods(root_module, cls):
@@ -4898,6 +5136,60 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3WifiPhyTag_methods(root_module, cls):
+    ## wifi-phy-tag.h (module 'wifi'): ns3::WifiPhyTag::WifiPhyTag(ns3::WifiPhyTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiPhyTag const &', 'arg0')])
+    ## wifi-phy-tag.h (module 'wifi'): ns3::WifiPhyTag::WifiPhyTag() [constructor]
+    cls.add_constructor([])
+    ## wifi-phy-tag.h (module 'wifi'): ns3::WifiPhyTag::WifiPhyTag(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduType mpdutype) [constructor]
+    cls.add_constructor([param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduType', 'mpdutype')])
+    ## wifi-phy-tag.h (module 'wifi'): void ns3::WifiPhyTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## wifi-phy-tag.h (module 'wifi'): ns3::TypeId ns3::WifiPhyTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-phy-tag.h (module 'wifi'): ns3::mpduType ns3::WifiPhyTag::GetMpduType() const [member function]
+    cls.add_method('GetMpduType', 
+                   'ns3::mpduType', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy-tag.h (module 'wifi'): uint32_t ns3::WifiPhyTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-phy-tag.h (module 'wifi'): static ns3::TypeId ns3::WifiPhyTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy-tag.h (module 'wifi'): ns3::WifiPreamble ns3::WifiPhyTag::GetWifiPreamble() const [member function]
+    cls.add_method('GetWifiPreamble', 
+                   'ns3::WifiPreamble', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy-tag.h (module 'wifi'): ns3::WifiTxVector ns3::WifiPhyTag::GetWifiTxVector() const [member function]
+    cls.add_method('GetWifiTxVector', 
+                   'ns3::WifiTxVector', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy-tag.h (module 'wifi'): void ns3::WifiPhyTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## wifi-phy-tag.h (module 'wifi'): void ns3::WifiPhyTag::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_Ns3WifiRadioEnergyModelHelper_methods(root_module, cls):
     ## wifi-radio-energy-model-helper.h (module 'wifi'): ns3::WifiRadioEnergyModelHelper::WifiRadioEnergyModelHelper(ns3::WifiRadioEnergyModelHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiRadioEnergyModelHelper const &', 'arg0')])
@@ -5184,15 +5476,6 @@
                    'ns3::YansWifiPhyHelper', 
                    [], 
                    is_static=True)
-    ## yans-wifi-helper.h (module 'wifi'): uint32_t ns3::YansWifiPhyHelper::GetPcapDataLinkType() const [member function]
-    cls.add_method('GetPcapDataLinkType', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::Set(std::string name, ns3::AttributeValue const & v) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'v')])
     ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::SetChannel(ns3::Ptr<ns3::YansWifiChannel> channel) [member function]
     cls.add_method('SetChannel', 
                    'void', 
@@ -5201,29 +5484,11 @@
     cls.add_method('SetChannel', 
                    'void', 
                    [param('std::string', 'channelName')])
-    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::SetErrorRateModel(std::string name, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
-    cls.add_method('SetErrorRateModel', 
-                   'void', 
-                   [param('std::string', 'name'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
-    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::SetPcapDataLinkType(ns3::YansWifiPhyHelper::SupportedPcapDataLinkTypes dlt) [member function]
-    cls.add_method('SetPcapDataLinkType', 
-                   'void', 
-                   [param('ns3::YansWifiPhyHelper::SupportedPcapDataLinkTypes', 'dlt')])
     ## yans-wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::YansWifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('Create', 
                    'ns3::Ptr< ns3::WifiPhy >', 
                    [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
-    cls.add_method('EnableAsciiInternal', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
-                   visibility='private', is_virtual=True)
-    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
-    cls.add_method('EnablePcapInternal', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
-                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -5342,8 +5607,13 @@
                    'ns3::TypeId', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ampdu-tag.h (module 'wifi'): uint8_t ns3::AmpduTag::GetNoOfMpdus() const [member function]
-    cls.add_method('GetNoOfMpdus', 
+    ## ampdu-tag.h (module 'wifi'): ns3::Time ns3::AmpduTag::GetRemainingAmpduDuration() const [member function]
+    cls.add_method('GetRemainingAmpduDuration', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## ampdu-tag.h (module 'wifi'): uint8_t ns3::AmpduTag::GetRemainingNbOfMpdus() const [member function]
+    cls.add_method('GetRemainingNbOfMpdus', 
                    'uint8_t', 
                    [], 
                    is_const=True)
@@ -5371,10 +5641,14 @@
     cls.add_method('SetAmpdu', 
                    'void', 
                    [param('bool', 'supported')])
-    ## ampdu-tag.h (module 'wifi'): void ns3::AmpduTag::SetNoOfMpdus(uint8_t noofmpdus) [member function]
-    cls.add_method('SetNoOfMpdus', 
+    ## ampdu-tag.h (module 'wifi'): void ns3::AmpduTag::SetRemainingAmpduDuration(ns3::Time duration) [member function]
+    cls.add_method('SetRemainingAmpduDuration', 
+                   'void', 
+                   [param('ns3::Time', 'duration')])
+    ## ampdu-tag.h (module 'wifi'): void ns3::AmpduTag::SetRemainingNbOfMpdus(uint8_t nbofmpdus) [member function]
+    cls.add_method('SetRemainingNbOfMpdus', 
                    'void', 
-                   [param('uint8_t', 'noofmpdus')])
+                   [param('uint8_t', 'nbofmpdus')])
     return
 
 def register_Ns3Chunk_methods(root_module, cls):
@@ -5728,6 +6002,11 @@
                    'ns3::CapabilityInformation', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::EdcaParameterSet ns3::MgtAssocResponseHeader::GetEdcaParameterSet() const [member function]
+    cls.add_method('GetEdcaParameterSet', 
+                   'ns3::EdcaParameterSet', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::ErpInformation ns3::MgtAssocResponseHeader::GetErpInformation() const [member function]
     cls.add_method('GetErpInformation', 
                    'ns3::ErpInformation', 
@@ -5785,6 +6064,10 @@
     cls.add_method('SetCapabilities', 
                    'void', 
                    [param('ns3::CapabilityInformation', 'capabilities')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetEdcaParameterSet(ns3::EdcaParameterSet edcaParameterSet) [member function]
+    cls.add_method('SetEdcaParameterSet', 
+                   'void', 
+                   [param('ns3::EdcaParameterSet', 'edcaParameterSet')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetErpInformation(ns3::ErpInformation erpInformation) [member function]
     cls.add_method('SetErpInformation', 
                    'void', 
@@ -5963,6 +6246,16 @@
                    'ns3::CapabilityInformation', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::DsssParameterSet ns3::MgtProbeResponseHeader::GetDsssParameterSet() const [member function]
+    cls.add_method('GetDsssParameterSet', 
+                   'ns3::DsssParameterSet', 
+                   [], 
+                   is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::EdcaParameterSet ns3::MgtProbeResponseHeader::GetEdcaParameterSet() const [member function]
+    cls.add_method('GetEdcaParameterSet', 
+                   'ns3::EdcaParameterSet', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::ErpInformation ns3::MgtProbeResponseHeader::GetErpInformation() const [member function]
     cls.add_method('GetErpInformation', 
                    'ns3::ErpInformation', 
@@ -6030,6 +6323,14 @@
     cls.add_method('SetCapabilities', 
                    'void', 
                    [param('ns3::CapabilityInformation', 'capabilities')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetDsssParameterSet(ns3::DsssParameterSet dsssParameterSet) [member function]
+    cls.add_method('SetDsssParameterSet', 
+                   'void', 
+                   [param('ns3::DsssParameterSet', 'dsssParameterSet')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetEdcaParameterSet(ns3::EdcaParameterSet edcaParameterSet) [member function]
+    cls.add_method('SetEdcaParameterSet', 
+                   'void', 
+                   [param('ns3::EdcaParameterSet', 'edcaParameterSet')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetErpInformation(ns3::ErpInformation erpInformation) [member function]
     cls.add_method('SetErpInformation', 
                    'void', 
@@ -6155,6 +6456,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -6334,58 +6640,6 @@
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
-def register_Ns3QosTag_methods(root_module, cls):
-    ## qos-tag.h (module 'wifi'): ns3::QosTag::QosTag(ns3::QosTag const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::QosTag const &', 'arg0')])
-    ## qos-tag.h (module 'wifi'): ns3::QosTag::QosTag() [constructor]
-    cls.add_constructor([])
-    ## qos-tag.h (module 'wifi'): ns3::QosTag::QosTag(uint8_t tid) [constructor]
-    cls.add_constructor([param('uint8_t', 'tid')])
-    ## qos-tag.h (module 'wifi'): void ns3::QosTag::Deserialize(ns3::TagBuffer i) [member function]
-    cls.add_method('Deserialize', 
-                   'void', 
-                   [param('ns3::TagBuffer', 'i')], 
-                   is_virtual=True)
-    ## qos-tag.h (module 'wifi'): ns3::TypeId ns3::QosTag::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## qos-tag.h (module 'wifi'): uint32_t ns3::QosTag::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## qos-tag.h (module 'wifi'): uint8_t ns3::QosTag::GetTid() const [member function]
-    cls.add_method('GetTid', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## qos-tag.h (module 'wifi'): static ns3::TypeId ns3::QosTag::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## qos-tag.h (module 'wifi'): void ns3::QosTag::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True, is_virtual=True)
-    ## qos-tag.h (module 'wifi'): void ns3::QosTag::Serialize(ns3::TagBuffer i) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::TagBuffer', 'i')], 
-                   is_const=True, is_virtual=True)
-    ## qos-tag.h (module 'wifi'): void ns3::QosTag::SetTid(uint8_t tid) [member function]
-    cls.add_method('SetTid', 
-                   'void', 
-                   [param('uint8_t', 'tid')])
-    ## qos-tag.h (module 'wifi'): void ns3::QosTag::SetUserPriority(ns3::UserPriority up) [member function]
-    cls.add_method('SetUserPriority', 
-                   'void', 
-                   [param('ns3::UserPriority', 'up')])
-    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')])
@@ -6713,6 +6967,42 @@
                    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([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SpectrumModel, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumModel> >::SimpleRefCount(ns3::SimpleRefCount<ns3::SpectrumModel, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumModel> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::SpectrumModel, ns3::empty, ns3::DefaultDeleter< ns3::SpectrumModel > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::SpectrumModel, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumModel> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3SpectrumSignalParameters_Ns3Empty_Ns3DefaultDeleter__lt__ns3SpectrumSignalParameters__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> >::SimpleRefCount(ns3::SimpleRefCount<ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter< ns3::SpectrumSignalParameters > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3SpectrumValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3SpectrumValue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SpectrumValue, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumValue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SpectrumValue, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumValue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::SpectrumValue, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumValue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::SpectrumValue, ns3::empty, ns3::DefaultDeleter< ns3::SpectrumValue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::SpectrumValue, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumValue> >::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([])
@@ -6785,42 +7075,278 @@
                    [param('double', 'snr')])
     return
 
-def register_Ns3ThreeLogDistancePropagationLossModel_methods(root_module, cls):
-    ## propagation-loss-model.h (module 'propagation'): static ns3::TypeId ns3::ThreeLogDistancePropagationLossModel::GetTypeId() [member function]
+def register_Ns3SpectrumInterference_methods(root_module, cls):
+    ## spectrum-interference.h (module 'spectrum'): ns3::SpectrumInterference::SpectrumInterference(ns3::SpectrumInterference const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SpectrumInterference const &', 'arg0')])
+    ## spectrum-interference.h (module 'spectrum'): ns3::SpectrumInterference::SpectrumInterference() [constructor]
+    cls.add_constructor([])
+    ## spectrum-interference.h (module 'spectrum'): void ns3::SpectrumInterference::AbortRx() [member function]
+    cls.add_method('AbortRx', 
+                   'void', 
+                   [])
+    ## spectrum-interference.h (module 'spectrum'): void ns3::SpectrumInterference::AddSignal(ns3::Ptr<ns3::SpectrumValue const> spd, ns3::Time const duration) [member function]
+    cls.add_method('AddSignal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumValue const >', 'spd'), param('ns3::Time const', 'duration')])
+    ## spectrum-interference.h (module 'spectrum'): bool ns3::SpectrumInterference::EndRx() [member function]
+    cls.add_method('EndRx', 
+                   'bool', 
+                   [])
+    ## spectrum-interference.h (module 'spectrum'): static ns3::TypeId ns3::SpectrumInterference::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## propagation-loss-model.h (module 'propagation'): ns3::ThreeLogDistancePropagationLossModel::ThreeLogDistancePropagationLossModel() [constructor]
-    cls.add_constructor([])
-    ## propagation-loss-model.h (module 'propagation'): double ns3::ThreeLogDistancePropagationLossModel::DoCalcRxPower(double txPowerDbm, ns3::Ptr<ns3::MobilityModel> a, ns3::Ptr<ns3::MobilityModel> b) const [member function]
-    cls.add_method('DoCalcRxPower', 
-                   'double', 
-                   [param('double', 'txPowerDbm'), param('ns3::Ptr< ns3::MobilityModel >', 'a'), param('ns3::Ptr< ns3::MobilityModel >', 'b')], 
-                   is_const=True, visibility='private', is_virtual=True)
-    ## propagation-loss-model.h (module 'propagation'): int64_t ns3::ThreeLogDistancePropagationLossModel::DoAssignStreams(int64_t stream) [member function]
-    cls.add_method('DoAssignStreams', 
-                   'int64_t', 
-                   [param('int64_t', 'stream')], 
-                   visibility='private', is_virtual=True)
+    ## spectrum-interference.h (module 'spectrum'): void ns3::SpectrumInterference::SetErrorModel(ns3::Ptr<ns3::SpectrumErrorModel> e) [member function]
+    cls.add_method('SetErrorModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumErrorModel >', 'e')])
+    ## spectrum-interference.h (module 'spectrum'): void ns3::SpectrumInterference::SetNoisePowerSpectralDensity(ns3::Ptr<ns3::SpectrumValue const> noisePsd) [member function]
+    cls.add_method('SetNoisePowerSpectralDensity', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumValue const >', 'noisePsd')])
+    ## spectrum-interference.h (module 'spectrum'): void ns3::SpectrumInterference::StartRx(ns3::Ptr<ns3::Packet const> p, ns3::Ptr<ns3::SpectrumValue const> rxPsd) [member function]
+    cls.add_method('StartRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ptr< ns3::SpectrumValue const >', 'rxPsd')])
+    ## spectrum-interference.h (module 'spectrum'): void ns3::SpectrumInterference::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
     return
 
-def register_Ns3Time_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<=')
-    cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', u'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('>')
-    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', u'right'))
-    cls.add_output_stream_operator()
+def register_Ns3SpectrumModel_methods(root_module, cls):
     cls.add_binary_comparison_operator('==')
-    cls.add_binary_comparison_operator('>=')
-    ## nstime.h (module 'core'): ns3::Time::Time() [constructor]
-    cls.add_constructor([])
+    ## spectrum-model.h (module 'spectrum'): ns3::SpectrumModel::SpectrumModel(ns3::SpectrumModel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SpectrumModel const &', 'arg0')])
+    ## spectrum-model.h (module 'spectrum'): ns3::SpectrumModel::SpectrumModel(std::vector<double, std::allocator<double> > centerFreqs) [constructor]
+    cls.add_constructor([param('std::vector< double >', 'centerFreqs')])
+    ## spectrum-model.h (module 'spectrum'): ns3::SpectrumModel::SpectrumModel(ns3::Bands bands) [constructor]
+    cls.add_constructor([param('ns3::Bands', 'bands')])
+    ## spectrum-model.h (module 'spectrum'): __gnu_cxx::__normal_iterator<const ns3::BandInfo*,std::vector<ns3::BandInfo, std::allocator<ns3::BandInfo> > > ns3::SpectrumModel::Begin() const [member function]
+    cls.add_method('Begin', 
+                   '__gnu_cxx::__normal_iterator< ns3::BandInfo const *, std::vector< ns3::BandInfo > >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-model.h (module 'spectrum'): __gnu_cxx::__normal_iterator<const ns3::BandInfo*,std::vector<ns3::BandInfo, std::allocator<ns3::BandInfo> > > ns3::SpectrumModel::End() const [member function]
+    cls.add_method('End', 
+                   '__gnu_cxx::__normal_iterator< ns3::BandInfo const *, std::vector< ns3::BandInfo > >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-model.h (module 'spectrum'): size_t ns3::SpectrumModel::GetNumBands() const [member function]
+    cls.add_method('GetNumBands', 
+                   'size_t', 
+                   [], 
+                   is_const=True)
+    ## spectrum-model.h (module 'spectrum'): ns3::SpectrumModelUid_t ns3::SpectrumModel::GetUid() const [member function]
+    cls.add_method('GetUid', 
+                   'ns3::SpectrumModelUid_t', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3SpectrumPhy_methods(root_module, cls):
+    ## spectrum-phy.h (module 'spectrum'): ns3::SpectrumPhy::SpectrumPhy() [constructor]
+    cls.add_constructor([])
+    ## spectrum-phy.h (module 'spectrum'): static ns3::TypeId ns3::SpectrumPhy::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## spectrum-phy.h (module 'spectrum'): void ns3::SpectrumPhy::SetDevice(ns3::Ptr<ns3::NetDevice> d) [member function]
+    cls.add_method('SetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'd')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::SpectrumPhy::GetDevice() const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): void ns3::SpectrumPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> m) [member function]
+    cls.add_method('SetMobility', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MobilityModel >', 'm')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::MobilityModel> ns3::SpectrumPhy::GetMobility() [member function]
+    cls.add_method('GetMobility', 
+                   'ns3::Ptr< ns3::MobilityModel >', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): void ns3::SpectrumPhy::SetChannel(ns3::Ptr<ns3::SpectrumChannel> c) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumChannel >', 'c')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumModel const> ns3::SpectrumPhy::GetRxSpectrumModel() const [member function]
+    cls.add_method('GetRxSpectrumModel', 
+                   'ns3::Ptr< ns3::SpectrumModel const >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::AntennaModel> ns3::SpectrumPhy::GetRxAntenna() [member function]
+    cls.add_method('GetRxAntenna', 
+                   'ns3::Ptr< ns3::AntennaModel >', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): void ns3::SpectrumPhy::StartRx(ns3::Ptr<ns3::SpectrumSignalParameters> params) [member function]
+    cls.add_method('StartRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumSignalParameters >', 'params')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3SpectrumSignalParameters_methods(root_module, cls):
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::SpectrumSignalParameters() [constructor]
+    cls.add_constructor([])
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::SpectrumSignalParameters(ns3::SpectrumSignalParameters const & p) [copy constructor]
+    cls.add_constructor([param('ns3::SpectrumSignalParameters const &', 'p')])
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumSignalParameters> ns3::SpectrumSignalParameters::Copy() [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::SpectrumSignalParameters >', 
+                   [], 
+                   is_virtual=True)
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::duration [variable]
+    cls.add_instance_attribute('duration', 'ns3::Time', is_const=False)
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::psd [variable]
+    cls.add_instance_attribute('psd', 'ns3::Ptr< ns3::SpectrumValue >', is_const=False)
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::txAntenna [variable]
+    cls.add_instance_attribute('txAntenna', 'ns3::Ptr< ns3::AntennaModel >', is_const=False)
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::txPhy [variable]
+    cls.add_instance_attribute('txPhy', 'ns3::Ptr< ns3::SpectrumPhy >', is_const=False)
+    return
+
+def register_Ns3SpectrumValue_methods(root_module, cls):
+    cls.add_binary_numeric_operator('*', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', u'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', u'right'))
+    cls.add_unary_numeric_operator('-')
+    cls.add_binary_numeric_operator('-', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', u'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', u'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', u'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', u'right'))
+    cls.add_output_stream_operator()
+    cls.add_inplace_numeric_operator('*=', param('ns3::SpectrumValue const &', u'right'))
+    cls.add_inplace_numeric_operator('*=', param('double', u'right'))
+    cls.add_inplace_numeric_operator('+=', param('ns3::SpectrumValue const &', u'right'))
+    cls.add_inplace_numeric_operator('+=', param('double', u'right'))
+    cls.add_inplace_numeric_operator('-=', param('ns3::SpectrumValue const &', u'right'))
+    cls.add_inplace_numeric_operator('-=', param('double', u'right'))
+    cls.add_inplace_numeric_operator('/=', param('ns3::SpectrumValue const &', u'right'))
+    cls.add_inplace_numeric_operator('/=', param('double', u'right'))
+    ## spectrum-value.h (module 'spectrum'): ns3::SpectrumValue::SpectrumValue(ns3::SpectrumValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SpectrumValue const &', 'arg0')])
+    ## spectrum-value.h (module 'spectrum'): ns3::SpectrumValue::SpectrumValue(ns3::Ptr<ns3::SpectrumModel const> sm) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::SpectrumModel const >', 'sm')])
+    ## spectrum-value.h (module 'spectrum'): ns3::SpectrumValue::SpectrumValue() [constructor]
+    cls.add_constructor([])
+    ## spectrum-value.h (module 'spectrum'): __gnu_cxx::__normal_iterator<const ns3::BandInfo*,std::vector<ns3::BandInfo, std::allocator<ns3::BandInfo> > > ns3::SpectrumValue::ConstBandsBegin() const [member function]
+    cls.add_method('ConstBandsBegin', 
+                   '__gnu_cxx::__normal_iterator< ns3::BandInfo const *, std::vector< ns3::BandInfo > >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-value.h (module 'spectrum'): __gnu_cxx::__normal_iterator<const ns3::BandInfo*,std::vector<ns3::BandInfo, std::allocator<ns3::BandInfo> > > ns3::SpectrumValue::ConstBandsEnd() const [member function]
+    cls.add_method('ConstBandsEnd', 
+                   '__gnu_cxx::__normal_iterator< ns3::BandInfo const *, std::vector< ns3::BandInfo > >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-value.h (module 'spectrum'): __gnu_cxx::__normal_iterator<const double*,std::vector<double, std::allocator<double> > > ns3::SpectrumValue::ConstValuesBegin() const [member function]
+    cls.add_method('ConstValuesBegin', 
+                   '__gnu_cxx::__normal_iterator< double const *, std::vector< double > >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-value.h (module 'spectrum'): __gnu_cxx::__normal_iterator<const double*,std::vector<double, std::allocator<double> > > ns3::SpectrumValue::ConstValuesEnd() const [member function]
+    cls.add_method('ConstValuesEnd', 
+                   '__gnu_cxx::__normal_iterator< double const *, std::vector< double > >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-value.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumValue> ns3::SpectrumValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-value.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumModel const> ns3::SpectrumValue::GetSpectrumModel() const [member function]
+    cls.add_method('GetSpectrumModel', 
+                   'ns3::Ptr< ns3::SpectrumModel const >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-value.h (module 'spectrum'): ns3::SpectrumModelUid_t ns3::SpectrumValue::GetSpectrumModelUid() const [member function]
+    cls.add_method('GetSpectrumModelUid', 
+                   'ns3::SpectrumModelUid_t', 
+                   [], 
+                   is_const=True)
+    ## spectrum-value.h (module 'spectrum'): __gnu_cxx::__normal_iterator<double*,std::vector<double, std::allocator<double> > > ns3::SpectrumValue::ValuesBegin() [member function]
+    cls.add_method('ValuesBegin', 
+                   '__gnu_cxx::__normal_iterator< double *, std::vector< double > >', 
+                   [])
+    ## spectrum-value.h (module 'spectrum'): __gnu_cxx::__normal_iterator<double*,std::vector<double, std::allocator<double> > > ns3::SpectrumValue::ValuesEnd() [member function]
+    cls.add_method('ValuesEnd', 
+                   '__gnu_cxx::__normal_iterator< double *, std::vector< double > >', 
+                   [])
+    return
+
+def register_Ns3SpectrumWifiPhyHelper_methods(root_module, cls):
+    ## spectrum-wifi-helper.h (module 'wifi'): ns3::SpectrumWifiPhyHelper::SpectrumWifiPhyHelper(ns3::SpectrumWifiPhyHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SpectrumWifiPhyHelper const &', 'arg0')])
+    ## spectrum-wifi-helper.h (module 'wifi'): ns3::SpectrumWifiPhyHelper::SpectrumWifiPhyHelper() [constructor]
+    cls.add_constructor([])
+    ## spectrum-wifi-helper.h (module 'wifi'): static ns3::SpectrumWifiPhyHelper ns3::SpectrumWifiPhyHelper::Default() [member function]
+    cls.add_method('Default', 
+                   'ns3::SpectrumWifiPhyHelper', 
+                   [], 
+                   is_static=True)
+    ## spectrum-wifi-helper.h (module 'wifi'): void ns3::SpectrumWifiPhyHelper::SetChannel(ns3::Ptr<ns3::SpectrumChannel> channel) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumChannel >', 'channel')])
+    ## spectrum-wifi-helper.h (module 'wifi'): void ns3::SpectrumWifiPhyHelper::SetChannel(std::string channelName) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('std::string', 'channelName')])
+    ## spectrum-wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::SpectrumWifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3ThreeLogDistancePropagationLossModel_methods(root_module, cls):
+    ## propagation-loss-model.h (module 'propagation'): static ns3::TypeId ns3::ThreeLogDistancePropagationLossModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## propagation-loss-model.h (module 'propagation'): ns3::ThreeLogDistancePropagationLossModel::ThreeLogDistancePropagationLossModel() [constructor]
+    cls.add_constructor([])
+    ## propagation-loss-model.h (module 'propagation'): double ns3::ThreeLogDistancePropagationLossModel::DoCalcRxPower(double txPowerDbm, ns3::Ptr<ns3::MobilityModel> a, ns3::Ptr<ns3::MobilityModel> b) const [member function]
+    cls.add_method('DoCalcRxPower', 
+                   'double', 
+                   [param('double', 'txPowerDbm'), param('ns3::Ptr< ns3::MobilityModel >', 'a'), param('ns3::Ptr< ns3::MobilityModel >', 'b')], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## propagation-loss-model.h (module 'propagation'): int64_t ns3::ThreeLogDistancePropagationLossModel::DoAssignStreams(int64_t stream) [member function]
+    cls.add_method('DoAssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3Time_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<=')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', u'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('>')
+    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', 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]
+    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]
@@ -7673,10 +8199,10 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureDcf(ns3::Ptr<ns3::Dcf> dcf, uint32_t cwmin, uint32_t cwmax, ns3::AcIndex ac) [member function]
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureDcf(ns3::Ptr<ns3::Dcf> dcf, uint32_t cwmin, uint32_t cwmax, bool isDsss, ns3::AcIndex ac) [member function]
     cls.add_method('ConfigureDcf', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Dcf >', 'dcf'), param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('ns3::AcIndex', 'ac')], 
+                   [param('ns3::Ptr< ns3::Dcf >', 'dcf'), param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('bool', 'isDsss'), param('ns3::AcIndex', 'ac')], 
                    visibility='protected')
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('FinishConfigureStandard', 
@@ -8254,16 +8780,16 @@
     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]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::AddSupportedChannelWidth(uint32_t channelwidth) [member function]
     cls.add_method('AddSupportedChannelWidth', 
                    'void', 
-                   [param('uint32_t', 'width')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   [param('uint32_t', 'channelwidth')], 
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): int64_t ns3::WifiPhy::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
                    [param('int64_t', 'stream')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculatePlcpPreambleAndHeaderDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('CalculatePlcpPreambleAndHeaderDuration', 
                    'ns3::Time', 
@@ -8272,7 +8798,7 @@
     cls.add_method('CalculateSnr', 
                    'double', 
                    [param('ns3::WifiTxVector', 'txVector'), param('double', 'ber')], 
-                   is_pure_virtual=True, is_const=True, is_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) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
@@ -8285,12 +8811,31 @@
     cls.add_method('ConfigureStandard', 
                    'void', 
                    [param('ns3::WifiPhyStandard', 'standard')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::DbToRatio(double db) const [member function]
+    cls.add_method('DbToRatio', 
+                   'double', 
+                   [param('double', 'db')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::DbmToW(double dbm) const [member function]
+    cls.add_method('DbmToW', 
+                   'double', 
+                   [param('double', 'dbm')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DefineChannelNumber(uint16_t channelNumber, ns3::WifiPhyStandard standard, uint32_t frequency, uint32_t channelWidth) [member function]
+    cls.add_method('DefineChannelNumber', 
+                   'bool', 
+                   [param('uint16_t', 'channelNumber'), param('ns3::WifiPhyStandard', 'standard'), param('uint32_t', 'frequency'), param('uint32_t', 'channelWidth')])
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
     cls.add_method('GetBssMembershipSelector', 
                    'uint32_t', 
                    [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetCcaMode1Threshold() const [member function]
+    cls.add_method('GetCcaMode1Threshold', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::WifiPhy::GetChannel() const [member function]
     cls.add_method('GetChannel', 
                    'ns3::Ptr< ns3::WifiChannel >', 
@@ -8300,22 +8845,27 @@
     cls.add_method('GetChannelNumber', 
                    'uint16_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetChannelSwitchDelay() const [member function]
     cls.add_method('GetChannelSwitchDelay', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetChannelWidth() const [member function]
     cls.add_method('GetChannelWidth', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::NetDevice> ns3::WifiPhy::GetDevice() const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate11Mbps() [member function]
     cls.add_method('GetDsssRate11Mbps', 
                    'ns3::WifiMode', 
@@ -8336,6 +8886,16 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetEdThreshold() const [member function]
+    cls.add_method('GetEdThreshold', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetEdThresholdW() const [member function]
+    cls.add_method('GetEdThresholdW', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate12Mbps() [member function]
     cls.add_method('GetErpOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -8376,21 +8936,26 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::ErrorRateModel> ns3::WifiPhy::GetErrorRateModel() const [member function]
+    cls.add_method('GetErrorRateModel', 
+                   'ns3::Ptr< ns3::ErrorRateModel >', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetFrequency() const [member function]
     cls.add_method('GetFrequency', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGreenfield() const [member function]
     cls.add_method('GetGreenfield', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGuardInterval() const [member function]
     cls.add_method('GetGuardInterval', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs0() [member function]
     cls.add_method('GetHtMcs0', 
                    'ns3::WifiMode', 
@@ -8560,57 +9125,61 @@
     cls.add_method('GetLastRxStartTime', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
     cls.add_method('GetLdpc', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
     cls.add_method('GetMcs', 
                    'ns3::WifiMode', 
                    [param('uint8_t', 'mcs')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
     cls.add_method('GetMembershipSelectorModes', 
                    'ns3::WifiModeList', 
                    [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::MobilityModel> ns3::WifiPhy::GetMobility() [member function]
+    cls.add_method('GetMobility', 
+                   'ns3::Ptr< ns3::MobilityModel >', 
+                   [])
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
     cls.add_method('GetNBssMembershipSelectors', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
     cls.add_method('GetNMcs', 
                    'uint8_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
     cls.add_method('GetNModes', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNTxPower() const [member function]
     cls.add_method('GetNTxPower', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
     cls.add_method('GetNumberOfReceiveAntennas', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
     cls.add_method('GetNumberOfTransmitAntennas', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
     cls.add_method('GetOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -8779,46 +9348,66 @@
                    'ns3::Time', 
                    [param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetRxGain() const [member function]
+    cls.add_method('GetRxGain', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetRxNoiseFigure() const [member function]
+    cls.add_method('GetRxNoiseFigure', 
+                   'double', 
+                   [], 
+                   is_const=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)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiPhyStandard ns3::WifiPhy::GetStandard() const [member function]
+    cls.add_method('GetStandard', 
+                   'ns3::WifiPhyStandard', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
     cls.add_method('GetStateDuration', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetStbc() const [member function]
     cls.add_method('GetStbc', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   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)
+                   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)
+                   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)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxGain() const [member function]
+    cls.add_method('GetTxGain', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
     cls.add_method('GetTxPowerEnd', 
                    'double', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerStart() const [member function]
     cls.add_method('GetTxPowerStart', 
                    'double', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::WifiPhy::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -8879,46 +9468,51 @@
                    'ns3::WifiMode', 
                    [param('ns3::WifiMode', 'payloadMode')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsMcsSupported(ns3::WifiMode mcs) const [member function]
+    cls.add_method('IsMcsSupported', 
+                   'bool', 
+                   [param('ns3::WifiMode', 'mcs')], 
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
     cls.add_method('IsModeSupported', 
                    'bool', 
                    [param('ns3::WifiMode', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateBusy() [member function]
     cls.add_method('IsStateBusy', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateCcaBusy() [member function]
     cls.add_method('IsStateCcaBusy', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateIdle() [member function]
     cls.add_method('IsStateIdle', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateRx() [member function]
     cls.add_method('IsStateRx', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSleep() [member function]
     cls.add_method('IsStateSleep', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSwitching() [member function]
     cls.add_method('IsStateSwitching', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateTx() [member function]
     cls.add_method('IsStateTx', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static bool ns3::WifiPhy::IsValidTxVector(ns3::WifiTxVector txVector) [member function]
     cls.add_method('IsValidTxVector', 
                    'bool', 
@@ -8956,6 +9550,11 @@
     cls.add_method('NotifyTxEnd', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::RatioToDb(double ratio) const [member function]
+    cls.add_method('RatioToDb', 
+                   'double', 
+                   [param('double', 'ratio')], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('RegisterListener', 
                    'void', 
@@ -8976,61 +9575,93 @@
                    '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::SetCcaMode1Threshold(double threshold) [member function]
+    cls.add_method('SetCcaMode1Threshold', 
+                   'void', 
+                   [param('double', 'threshold')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
                    'void', 
                    [param('uint16_t', 'id')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelWidth(uint32_t channelwidth) [member function]
     cls.add_method('SetChannelWidth', 
                    'void', 
                    [param('uint32_t', 'channelwidth')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetEdThreshold(double threshold) [member function]
+    cls.add_method('SetEdThreshold', 
+                   'void', 
+                   [param('double', 'threshold')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetErrorRateModel(ns3::Ptr<ns3::ErrorRateModel> rate) [member function]
+    cls.add_method('SetErrorRateModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::ErrorRateModel >', 'rate')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
     cls.add_method('SetFrequency', 
                    'void', 
                    [param('uint32_t', 'freq')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGreenfield(bool greenfield) [member function]
     cls.add_method('SetGreenfield', 
                    'void', 
                    [param('bool', 'greenfield')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool guardInterval) [member function]
     cls.add_method('SetGuardInterval', 
                    'void', 
                    [param('bool', 'guardInterval')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool ldpc) [member function]
     cls.add_method('SetLdpc', 
                    'void', 
                    [param('bool', 'ldpc')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> mobility) [member function]
+    cls.add_method('SetMobility', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MobilityModel >', 'mobility')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNTxPower(uint32_t n) [member function]
+    cls.add_method('SetNTxPower', 
+                   'void', 
+                   [param('uint32_t', 'n')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
     cls.add_method('SetNumberOfReceiveAntennas', 
                    'void', 
                    [param('uint32_t', 'rx')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
     cls.add_method('SetNumberOfTransmitAntennas', 
                    'void', 
                    [param('uint32_t', 'tx')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, double, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveOkCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, double, ns3::WifiTxVector, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetReceiveOkCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiTxVector, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetRxGain(double gain) [member function]
+    cls.add_method('SetRxGain', 
+                   'void', 
+                   [param('double', 'gain')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetRxNoiseFigure(double noiseFigureDb) [member function]
+    cls.add_method('SetRxNoiseFigure', 
+                   'void', 
+                   [param('double', 'noiseFigureDb')])
     ## 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)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetSleepMode() [member function]
     cls.add_method('SetSleepMode', 
                    'void', 
@@ -9040,12 +9671,64 @@
     cls.add_method('SetStbc', 
                    'void', 
                    [param('bool', 'stbc')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxGain(double gain) [member function]
+    cls.add_method('SetTxGain', 
+                   'void', 
+                   [param('double', 'gain')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxPowerEnd(double end) [member function]
+    cls.add_method('SetTxPowerEnd', 
+                   'void', 
+                   [param('double', 'end')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxPowerStart(double start) [member function]
+    cls.add_method('SetTxPowerStart', 
+                   'void', 
+                   [param('double', 'start')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('UnregisterListener', 
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::WToDbm(double w) const [member function]
+    cls.add_method('WToDbm', 
+                   'double', 
+                   [param('double', 'w')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DoChannelSwitch(uint16_t id) [member function]
+    cls.add_method('DoChannelSwitch', 
+                   'bool', 
+                   [param('uint16_t', 'id')], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DoFrequencySwitch(uint32_t frequency) [member function]
+    cls.add_method('DoFrequencySwitch', 
+                   'bool', 
+                   [param('uint32_t', 'frequency')], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetPowerDbm(uint8_t power) const [member function]
+    cls.add_method('GetPowerDbm', 
+                   'double', 
+                   [param('uint8_t', 'power')], 
+                   is_const=True, visibility='protected')
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureChannelForStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('ConfigureChannelForStandard', 
+                   'void', 
+                   [param('ns3::WifiPhyStandard', 'standard')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureDefaultsForStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('ConfigureDefaultsForStandard', 
+                   'void', 
+                   [param('ns3::WifiPhyStandard', 'standard')], 
+                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3WifiPhyStateHelper_methods(root_module, cls):
@@ -9107,18 +9790,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>, double, bool, 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, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::empty, 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> packet, double snr, bool isEndOfFrame) [member function]
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SwitchFromRxEndError(ns3::Ptr<ns3::Packet> packet, double snr) [member function]
     cls.add_method('SwitchFromRxEndError', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'snr'), param('bool', 'isEndOfFrame')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'snr')])
     ## 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', 
@@ -9474,7 +10157,8 @@
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetHtSupported(bool enable) [member function]
     cls.add_method('SetHtSupported', 
                    'void', 
-                   [param('bool', 'enable')])
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetMaxSlrc(uint32_t maxSlrc) [member function]
     cls.add_method('SetMaxSlrc', 
                    'void', 
@@ -9506,7 +10190,8 @@
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetVhtSupported(bool enable) [member function]
     cls.add_method('SetVhtSupported', 
                    'void', 
-                   [param('bool', 'enable')])
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
     cls.add_method('SetupMac', 
                    'void', 
@@ -9793,6 +10478,79 @@
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3WifiSpectrumPhyInterface_methods(root_module, cls):
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): static ns3::TypeId ns3::WifiSpectrumPhyInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): ns3::WifiSpectrumPhyInterface::WifiSpectrumPhyInterface() [constructor]
+    cls.add_constructor([])
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): void ns3::WifiSpectrumPhyInterface::SetSpectrumWifiPhy(ns3::Ptr<ns3::SpectrumWifiPhy> phy) [member function]
+    cls.add_method('SetSpectrumWifiPhy', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumWifiPhy >', 'phy')])
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): ns3::Ptr<ns3::NetDevice> ns3::WifiSpectrumPhyInterface::GetDevice() const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): void ns3::WifiSpectrumPhyInterface::SetDevice(ns3::Ptr<ns3::NetDevice> d) [member function]
+    cls.add_method('SetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'd')], 
+                   is_virtual=True)
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): void ns3::WifiSpectrumPhyInterface::SetMobility(ns3::Ptr<ns3::MobilityModel> m) [member function]
+    cls.add_method('SetMobility', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MobilityModel >', 'm')], 
+                   is_virtual=True)
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): ns3::Ptr<ns3::MobilityModel> ns3::WifiSpectrumPhyInterface::GetMobility() [member function]
+    cls.add_method('GetMobility', 
+                   'ns3::Ptr< ns3::MobilityModel >', 
+                   [], 
+                   is_virtual=True)
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): void ns3::WifiSpectrumPhyInterface::SetChannel(ns3::Ptr<ns3::SpectrumChannel> c) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumChannel >', 'c')], 
+                   is_virtual=True)
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): ns3::Ptr<ns3::SpectrumModel const> ns3::WifiSpectrumPhyInterface::GetRxSpectrumModel() const [member function]
+    cls.add_method('GetRxSpectrumModel', 
+                   'ns3::Ptr< ns3::SpectrumModel const >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): ns3::Ptr<ns3::AntennaModel> ns3::WifiSpectrumPhyInterface::GetRxAntenna() [member function]
+    cls.add_method('GetRxAntenna', 
+                   'ns3::Ptr< ns3::AntennaModel >', 
+                   [], 
+                   is_virtual=True)
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): void ns3::WifiSpectrumPhyInterface::StartRx(ns3::Ptr<ns3::SpectrumSignalParameters> params) [member function]
+    cls.add_method('StartRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumSignalParameters >', 'params')], 
+                   is_virtual=True)
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): void ns3::WifiSpectrumPhyInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3WifiSpectrumSignalParameters_methods(root_module, cls):
+    ## wifi-spectrum-signal-parameters.h (module 'wifi'): ns3::WifiSpectrumSignalParameters::WifiSpectrumSignalParameters() [constructor]
+    cls.add_constructor([])
+    ## wifi-spectrum-signal-parameters.h (module 'wifi'): ns3::WifiSpectrumSignalParameters::WifiSpectrumSignalParameters(ns3::WifiSpectrumSignalParameters const & p) [copy constructor]
+    cls.add_constructor([param('ns3::WifiSpectrumSignalParameters const &', 'p')])
+    ## wifi-spectrum-signal-parameters.h (module 'wifi'): ns3::Ptr<ns3::SpectrumSignalParameters> ns3::WifiSpectrumSignalParameters::Copy() [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::SpectrumSignalParameters >', 
+                   [], 
+                   is_virtual=True)
+    ## wifi-spectrum-signal-parameters.h (module 'wifi'): ns3::WifiSpectrumSignalParameters::packet [variable]
+    cls.add_instance_attribute('packet', 'ns3::Ptr< ns3::Packet >', is_const=False)
+    return
+
 def register_Ns3WifiTxCurrentModel_methods(root_module, cls):
     ## wifi-tx-current-model.h (module 'wifi'): ns3::WifiTxCurrentModel::WifiTxCurrentModel(ns3::WifiTxCurrentModel const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiTxCurrentModel const &', 'arg0')])
@@ -9820,260 +10578,16 @@
     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::WifiTxVector txVector, double ber) const [member function]
-    cls.add_method('CalculateSnr', 
-                   'double', 
-                   [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', 
-                   'void', 
-                   [param('ns3::WifiPhyStandard', 'standard')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
-    cls.add_method('GetBssMembershipSelector', 
-                   'uint32_t', 
-                   [param('uint32_t', 'selector')], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetCcaMode1Threshold() const [member function]
-    cls.add_method('GetCcaMode1Threshold', 
-                   'double', 
-                   [], 
-                   is_const=True)
     ## yans-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::YansWifiPhy::GetChannel() const [member function]
     cls.add_method('GetChannel', 
                    'ns3::Ptr< ns3::WifiChannel >', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetChannelFrequencyMhz() const [member function]
-    cls.add_method('GetChannelFrequencyMhz', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint16_t ns3::YansWifiPhy::GetChannelNumber() const [member function]
-    cls.add_method('GetChannelNumber', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Time ns3::YansWifiPhy::GetChannelSwitchDelay() const [member function]
-    cls.add_method('GetChannelSwitchDelay', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetChannelWidth() const [member function]
-    cls.add_method('GetChannelWidth', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Time ns3::YansWifiPhy::GetDelayUntilIdle() [member function]
-    cls.add_method('GetDelayUntilIdle', 
-                   'ns3::Time', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::NetDevice> ns3::YansWifiPhy::GetDevice() const [member function]
-    cls.add_method('GetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetEdThreshold() const [member function]
-    cls.add_method('GetEdThreshold', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::ErrorRateModel> ns3::YansWifiPhy::GetErrorRateModel() const [member function]
-    cls.add_method('GetErrorRateModel', 
-                   'ns3::Ptr< ns3::ErrorRateModel >', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetFrequency() const [member function]
-    cls.add_method('GetFrequency', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetGreenfield() const [member function]
-    cls.add_method('GetGreenfield', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetGuardInterval() const [member function]
-    cls.add_method('GetGuardInterval', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Time ns3::YansWifiPhy::GetLastRxStartTime() const [member function]
-    cls.add_method('GetLastRxStartTime', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetLdpc() const [member function]
-    cls.add_method('GetLdpc', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::YansWifiPhy::GetMcs(uint8_t mcs) const [member function]
-    cls.add_method('GetMcs', 
-                   'ns3::WifiMode', 
-                   [param('uint8_t', 'mcs')], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::YansWifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
-    cls.add_method('GetMembershipSelectorModes', 
-                   'ns3::WifiModeList', 
-                   [param('uint32_t', 'selector')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::MobilityModel> ns3::YansWifiPhy::GetMobility() [member function]
-    cls.add_method('GetMobility', 
-                   'ns3::Ptr< ns3::MobilityModel >', 
-                   [])
-    ## yans-wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::YansWifiPhy::GetMode(uint32_t mode) const [member function]
-    cls.add_method('GetMode', 
-                   'ns3::WifiMode', 
-                   [param('uint32_t', 'mode')], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNBssMembershipSelectors() const [member function]
-    cls.add_method('GetNBssMembershipSelectors', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint8_t ns3::YansWifiPhy::GetNMcs() const [member function]
-    cls.add_method('GetNMcs', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNModes() const [member function]
-    cls.add_method('GetNModes', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNTxPower() const [member function]
-    cls.add_method('GetNTxPower', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNumberOfReceiveAntennas() const [member function]
-    cls.add_method('GetNumberOfReceiveAntennas', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNumberOfTransmitAntennas() const [member function]
-    cls.add_method('GetNumberOfTransmitAntennas', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetRxGain() const [member function]
-    cls.add_method('GetRxGain', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetRxNoiseFigure() const [member function]
-    cls.add_method('GetRxNoiseFigure', 
-                   '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', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetStbc() const [member function]
-    cls.add_method('GetStbc', 
-                   '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', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetTxPowerEnd() const [member function]
-    cls.add_method('GetTxPowerEnd', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetTxPowerStart() const [member function]
-    cls.add_method('GetTxPowerStart', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::YansWifiPhy::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsMcsSupported(ns3::WifiMode mcs) [member function]
-    cls.add_method('IsMcsSupported', 
-                   'bool', 
-                   [param('ns3::WifiMode', 'mcs')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
-    cls.add_method('IsModeSupported', 
-                   'bool', 
-                   [param('ns3::WifiMode', 'mode')], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateBusy() [member function]
-    cls.add_method('IsStateBusy', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateCcaBusy() [member function]
-    cls.add_method('IsStateCcaBusy', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateIdle() [member function]
-    cls.add_method('IsStateIdle', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateRx() [member function]
-    cls.add_method('IsStateRx', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateSleep() [member function]
-    cls.add_method('IsStateSleep', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateSwitching() [member function]
-    cls.add_method('IsStateSwitching', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateTx() [member function]
-    cls.add_method('IsStateTx', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('RegisterListener', 
                    'void', 
@@ -10094,119 +10608,25 @@
                    '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', 
-                   'void', 
-                   [param('double', 'threshold')])
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetChannel(ns3::Ptr<ns3::YansWifiChannel> channel) [member function]
     cls.add_method('SetChannel', 
                    'void', 
                    [param('ns3::Ptr< ns3::YansWifiChannel >', 'channel')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetChannelNumber(uint16_t id) [member function]
-    cls.add_method('SetChannelNumber', 
-                   'void', 
-                   [param('uint16_t', 'id')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetChannelWidth(uint32_t channelwidth) [member function]
-    cls.add_method('SetChannelWidth', 
-                   'void', 
-                   [param('uint32_t', 'channelwidth')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('SetDevice', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetEdThreshold(double threshold) [member function]
-    cls.add_method('SetEdThreshold', 
-                   'void', 
-                   [param('double', 'threshold')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetErrorRateModel(ns3::Ptr<ns3::ErrorRateModel> rate) [member function]
-    cls.add_method('SetErrorRateModel', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::ErrorRateModel >', 'rate')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetFrequency(uint32_t freq) [member function]
-    cls.add_method('SetFrequency', 
-                   'void', 
-                   [param('uint32_t', 'freq')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetGreenfield(bool greenfield) [member function]
-    cls.add_method('SetGreenfield', 
-                   'void', 
-                   [param('bool', 'greenfield')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetGuardInterval(bool guardInterval) [member function]
-    cls.add_method('SetGuardInterval', 
-                   'void', 
-                   [param('bool', 'guardInterval')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetLdpc(bool ldpc) [member function]
-    cls.add_method('SetLdpc', 
-                   'void', 
-                   [param('bool', 'ldpc')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> mobility) [member function]
-    cls.add_method('SetMobility', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::MobilityModel >', 'mobility')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetNTxPower(uint32_t n) [member function]
-    cls.add_method('SetNTxPower', 
-                   'void', 
-                   [param('uint32_t', 'n')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
-    cls.add_method('SetNumberOfReceiveAntennas', 
-                   'void', 
-                   [param('uint32_t', 'rx')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
-    cls.add_method('SetNumberOfTransmitAntennas', 
-                   '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>, double, bool, 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, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::empty, 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', 
                    '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_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetRxGain(double gain) [member function]
-    cls.add_method('SetRxGain', 
-                   'void', 
-                   [param('double', 'gain')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetRxNoiseFigure(double noiseFigureDb) [member function]
-    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', 
                    [], 
                    is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetStbc(bool stbc) [member function]
-    cls.add_method('SetStbc', 
-                   'void', 
-                   [param('bool', 'stbc')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetTxGain(double gain) [member function]
-    cls.add_method('SetTxGain', 
-                   'void', 
-                   [param('double', 'gain')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetTxPowerEnd(double end) [member function]
-    cls.add_method('SetTxPowerEnd', 
-                   'void', 
-                   [param('double', 'end')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetTxPowerStart(double start) [member function]
-    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::mpduType mpdutype, ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
     cls.add_method('StartReceivePacket', 
                    'void', 
@@ -10220,16 +10640,21 @@
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::DoChannelSwitch(uint16_t id) [member function]
+    cls.add_method('DoChannelSwitch', 
+                   'bool', 
+                   [param('uint16_t', 'id')], 
+                   visibility='protected', is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
                    [], 
-                   visibility='private', is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::DoInitialize() [member function]
-    cls.add_method('DoInitialize', 
-                   'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
+                   visibility='protected', is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::DoFrequencySwitch(uint32_t frequency) [member function]
+    cls.add_method('DoFrequencySwitch', 
+                   'bool', 
+                   [param('uint32_t', 'frequency')], 
+                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3ZetaRandomVariable_methods(root_module, cls):
@@ -10313,6 +10738,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## aarf-wifi-manager.h (module 'wifi'): void ns3::AarfWifiManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## aarf-wifi-manager.h (module 'wifi'): void ns3::AarfWifiManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## aarf-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::AarfWifiManager::DoCreateStation() const [member function]
     cls.add_method('DoCreateStation', 
                    'ns3::WifiRemoteStation *', 
@@ -10380,6 +10815,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## aarfcd-wifi-manager.h (module 'wifi'): void ns3::AarfcdWifiManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## aarfcd-wifi-manager.h (module 'wifi'): void ns3::AarfcdWifiManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## aarfcd-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::AarfcdWifiManager::DoCreateStation() const [member function]
     cls.add_method('DoCreateStation', 
                    'ns3::WifiRemoteStation *', 
@@ -10525,6 +10970,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## amrr-wifi-manager.h (module 'wifi'): void ns3::AmrrWifiManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## amrr-wifi-manager.h (module 'wifi'): void ns3::AmrrWifiManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## amrr-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::AmrrWifiManager::DoCreateStation() const [member function]
     cls.add_method('DoCreateStation', 
                    'ns3::WifiRemoteStation *', 
@@ -10646,6 +11101,23 @@
                    [param('ns3::Mac48Address', 'to')])
     return
 
+def register_Ns3AntennaModel_methods(root_module, cls):
+    ## antenna-model.h (module 'antenna'): ns3::AntennaModel::AntennaModel(ns3::AntennaModel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AntennaModel const &', 'arg0')])
+    ## antenna-model.h (module 'antenna'): ns3::AntennaModel::AntennaModel() [constructor]
+    cls.add_constructor([])
+    ## antenna-model.h (module 'antenna'): double ns3::AntennaModel::GetGainDb(ns3::Angles a) [member function]
+    cls.add_method('GetGainDb', 
+                   'double', 
+                   [param('ns3::Angles', 'a')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## antenna-model.h (module 'antenna'): static ns3::TypeId ns3::AntennaModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3AparfWifiManager_methods(root_module, cls):
     ## aparf-wifi-manager.h (module 'wifi'): ns3::AparfWifiManager::AparfWifiManager(ns3::AparfWifiManager const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::AparfWifiManager const &', 'arg0')])
@@ -10656,6 +11128,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetupPhy', 
                    'void', 
@@ -10728,6 +11210,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## arf-wifi-manager.h (module 'wifi'): void ns3::ArfWifiManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## arf-wifi-manager.h (module 'wifi'): void ns3::ArfWifiManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## arf-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::ArfWifiManager::DoCreateStation() const [member function]
     cls.add_method('DoCreateStation', 
                    'ns3::WifiRemoteStation *', 
@@ -11040,6 +11532,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## cara-wifi-manager.h (module 'wifi'): void ns3::CaraWifiManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## cara-wifi-manager.h (module 'wifi'): void ns3::CaraWifiManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## cara-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::CaraWifiManager::DoCreateStation() const [member function]
     cls.add_method('DoCreateStation', 
                    'ns3::WifiRemoteStation *', 
@@ -11565,6 +12067,11 @@
                    'uint32_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): ns3::Time ns3::Dcf::GetTxopLimit() const [member function]
+    cls.add_method('GetTxopLimit', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## dcf.h (module 'wifi'): static ns3::TypeId ns3::Dcf::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -11585,6 +12092,11 @@
                    'void', 
                    [param('uint32_t', 'minCw')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): void ns3::Dcf::SetTxopLimit(ns3::Time txopLimit) [member function]
+    cls.add_method('SetTxopLimit', 
+                   'void', 
+                   [param('ns3::Time', 'txopLimit')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3DeterministicRandomVariable_methods(root_module, cls):
@@ -11658,37 +12170,435 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
-def register_Ns3DoubleValue_methods(root_module, cls):
-    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue() [constructor]
+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_Ns3DsssParameterSet_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet::DsssParameterSet(ns3::DsssParameterSet const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DsssParameterSet const &', 'arg0')])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet::DsssParameterSet() [constructor]
+    cls.add_constructor([])
+    ## dsss-parameter-set.h (module 'wifi'): uint8_t ns3::DsssParameterSet::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)
+    ## dsss-parameter-set.h (module 'wifi'): ns3::WifiInformationElementId ns3::DsssParameterSet::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): uint8_t ns3::DsssParameterSet::GetCurrentChannel() const [member function]
+    cls.add_method('GetCurrentChannel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): uint8_t ns3::DsssParameterSet::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): uint16_t ns3::DsssParameterSet::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): ns3::Buffer::Iterator ns3::DsssParameterSet::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSet::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSet::SetCurrentChannel(uint8_t currentChannel) [member function]
+    cls.add_method('SetCurrentChannel', 
+                   'void', 
+                   [param('uint8_t', 'currentChannel')])
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSet::SetDsssSupported(uint8_t DsssSupported) [member function]
+    cls.add_method('SetDsssSupported', 
+                   'void', 
+                   [param('uint8_t', 'DsssSupported')])
+    return
+
+def register_Ns3DsssParameterSetChecker_methods(root_module, cls):
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetChecker::DsssParameterSetChecker() [constructor]
+    cls.add_constructor([])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetChecker::DsssParameterSetChecker(ns3::DsssParameterSetChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DsssParameterSetChecker const &', 'arg0')])
+    return
+
+def register_Ns3DsssParameterSetValue_methods(root_module, cls):
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue::DsssParameterSetValue() [constructor]
+    cls.add_constructor([])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue::DsssParameterSetValue(ns3::DsssParameterSetValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DsssParameterSetValue const &', 'arg0')])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue::DsssParameterSetValue(ns3::DsssParameterSet const & value) [constructor]
+    cls.add_constructor([param('ns3::DsssParameterSet const &', 'value')])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::DsssParameterSetValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): bool ns3::DsssParameterSetValue::DeserializeFromString(std::string value, ns3::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)
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet ns3::DsssParameterSetValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::DsssParameterSet', 
+                   [], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): std::string ns3::DsssParameterSetValue::SerializeToString(ns3::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)
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSetValue::Set(ns3::DsssParameterSet const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::DsssParameterSet const &', 'value')])
+    return
+
+def register_Ns3EdcaParameterSet_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet::EdcaParameterSet(ns3::EdcaParameterSet const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSet const &', 'arg0')])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet::EdcaParameterSet() [constructor]
+    cls.add_constructor([])
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::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)
+    ## edca-parameter-set.h (module 'wifi'): ns3::WifiInformationElementId ns3::EdcaParameterSet::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeAci() const [member function]
+    cls.add_method('GetBeAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeAcm() const [member function]
+    cls.add_method('GetBeAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeAifsn() const [member function]
+    cls.add_method('GetBeAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeCWmax() const [member function]
+    cls.add_method('GetBeCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeCWmin() const [member function]
+    cls.add_method('GetBeCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetBeTXOPLimit() const [member function]
+    cls.add_method('GetBeTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkAci() const [member function]
+    cls.add_method('GetBkAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkAcm() const [member function]
+    cls.add_method('GetBkAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkAifsn() const [member function]
+    cls.add_method('GetBkAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkCWmax() const [member function]
+    cls.add_method('GetBkCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkCWmin() const [member function]
+    cls.add_method('GetBkCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetBkTXOPLimit() const [member function]
+    cls.add_method('GetBkTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetQosInfo() const [member function]
+    cls.add_method('GetQosInfo', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViAci() const [member function]
+    cls.add_method('GetViAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViAcm() const [member function]
+    cls.add_method('GetViAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViAifsn() const [member function]
+    cls.add_method('GetViAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViCWmax() const [member function]
+    cls.add_method('GetViCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViCWmin() const [member function]
+    cls.add_method('GetViCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetViTXOPLimit() const [member function]
+    cls.add_method('GetViTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoAci() const [member function]
+    cls.add_method('GetVoAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoAcm() const [member function]
+    cls.add_method('GetVoAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoAifsn() const [member function]
+    cls.add_method('GetVoAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoCWmax() const [member function]
+    cls.add_method('GetVoCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoCWmin() const [member function]
+    cls.add_method('GetVoCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetVoTXOPLimit() const [member function]
+    cls.add_method('GetVoTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): ns3::Buffer::Iterator ns3::EdcaParameterSet::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeAci(uint8_t aci) [member function]
+    cls.add_method('SetBeAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeAcm(uint8_t acm) [member function]
+    cls.add_method('SetBeAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetBeAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetBeCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetBeCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetBeTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkAci(uint8_t aci) [member function]
+    cls.add_method('SetBkAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkAcm(uint8_t acm) [member function]
+    cls.add_method('SetBkAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetBkAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetBkCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetBkCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetBkTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetQosInfo(uint8_t qosInfo) [member function]
+    cls.add_method('SetQosInfo', 
+                   'void', 
+                   [param('uint8_t', 'qosInfo')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetQosSupported(uint8_t qosSupported) [member function]
+    cls.add_method('SetQosSupported', 
+                   'void', 
+                   [param('uint8_t', 'qosSupported')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViAci(uint8_t aci) [member function]
+    cls.add_method('SetViAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViAcm(uint8_t acm) [member function]
+    cls.add_method('SetViAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetViAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetViCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetViCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetViTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoAci(uint8_t aci) [member function]
+    cls.add_method('SetVoAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoAcm(uint8_t acm) [member function]
+    cls.add_method('SetVoAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetVoAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetVoCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetVoCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetVoTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    return
+
+def register_Ns3EdcaParameterSetChecker_methods(root_module, cls):
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetChecker::EdcaParameterSetChecker() [constructor]
+    cls.add_constructor([])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetChecker::EdcaParameterSetChecker(ns3::EdcaParameterSetChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSetChecker const &', 'arg0')])
+    return
+
+def register_Ns3EdcaParameterSetValue_methods(root_module, cls):
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue::EdcaParameterSetValue() [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]
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue::EdcaParameterSetValue(ns3::EdcaParameterSetValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSetValue const &', 'arg0')])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue::EdcaParameterSetValue(ns3::EdcaParameterSet const & value) [constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSet const &', 'value')])
+    ## edca-parameter-set.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::EdcaParameterSetValue::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]
+    ## edca-parameter-set.h (module 'wifi'): bool ns3::EdcaParameterSetValue::DeserializeFromString(std::string value, ns3::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]
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet ns3::EdcaParameterSetValue::Get() const [member function]
     cls.add_method('Get', 
-                   'double', 
+                   'ns3::EdcaParameterSet', 
                    [], 
                    is_const=True)
-    ## double.h (module 'core'): std::string ns3::DoubleValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    ## edca-parameter-set.h (module 'wifi'): std::string ns3::EdcaParameterSetValue::SerializeToString(ns3::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]
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSetValue::Set(ns3::EdcaParameterSet const & value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('double const &', 'value')])
+                   [param('ns3::EdcaParameterSet const &', 'value')])
     return
 
 def register_Ns3EdcaTxopN_methods(root_module, cls):
@@ -11759,6 +12669,11 @@
                    'void', 
                    [param('uint32_t', 'aifsn')], 
                    is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTxopLimit(ns3::Time txopLimit) [member function]
+    cls.add_method('SetTxopLimit', 
+                   'void', 
+                   [param('ns3::Time', 'txopLimit')], 
+                   is_virtual=True)
     ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetMinCw() const [member function]
     cls.add_method('GetMinCw', 
                    'uint32_t', 
@@ -11774,6 +12689,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): ns3::Time ns3::EdcaTxopN::GetTxopLimit() const [member function]
+    cls.add_method('GetTxopLimit', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::MacLow> ns3::EdcaTxopN::Low() [member function]
     cls.add_method('Low', 
                    'ns3::Ptr< ns3::MacLow >', 
@@ -11788,10 +12708,11 @@
                    '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]
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetBaAgreementExists(ns3::Mac48Address address, uint8_t tid) const [member function]
     cls.add_method('GetBaAgreementExists', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')])
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')], 
+                   is_const=True)
     ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNOutstandingPacketsInBa(ns3::Mac48Address address, uint8_t tid) [member function]
     cls.add_method('GetNOutstandingPacketsInBa', 
                    'uint32_t', 
@@ -11866,6 +12787,10 @@
     cls.add_method('MissedAck', 
                    'void', 
                    [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::StartNextFragment() [member function]
+    cls.add_method('StartNextFragment', 
+                   'void', 
+                   [])
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::StartNext() [member function]
     cls.add_method('StartNext', 
                    'void', 
@@ -11886,14 +12811,14 @@
     cls.add_method('StartAccessIfNeeded', 
                    'void', 
                    [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRtsRetransmission() [member function]
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRtsRetransmission(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
     cls.add_method('NeedRtsRetransmission', 
                    'bool', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedDataRetransmission() [member function]
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedDataRetransmission(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
     cls.add_method('NeedDataRetransmission', 
                    'bool', 
-                   [])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
     ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedBarRetransmission() [member function]
     cls.add_method('NeedBarRetransmission', 
                    'bool', 
@@ -11973,10 +12898,11 @@
     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(ns3::Mac48Address dest) [member function]
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetAmpduExist(ns3::Mac48Address dest) const [member function]
     cls.add_method('GetAmpduExist', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'dest')])
+                   [param('ns3::Mac48Address', 'dest')], 
+                   is_const=True)
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAmpduExist(ns3::Mac48Address dest, bool enableAmpdu) [member function]
     cls.add_method('SetAmpduExist', 
                    'void', 
@@ -12050,6 +12976,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -13892,6 +14882,11 @@
     cls.add_method('AggregateToAmpdu', 
                    'ns3::Ptr< ns3::Packet >', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const', 'hdr')])
+    ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::CalculateOverallTxTime(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr, ns3::MacLowTransmissionParameters const & params) const [member function]
+    cls.add_method('CalculateOverallTxTime', 
+                   'ns3::Time', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr'), param('ns3::MacLowTransmissionParameters const &', 'params')], 
+                   is_const=True)
     ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::CalculateTransmissionTime(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr, ns3::MacLowTransmissionParameters const & parameters) const [member function]
     cls.add_method('CalculateTransmissionTime', 
                    'ns3::Time', 
@@ -13948,6 +14943,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## mac-low.h (module 'wifi'): ns3::WifiTxVector ns3::MacLow::GetDataTxVector(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr) const [member function]
+    cls.add_method('GetDataTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr')], 
+                   is_const=True, is_virtual=True)
     ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::MacLow::GetPhy() const [member function]
     cls.add_method('GetPhy', 
                    'ns3::Ptr< ns3::WifiPhy >', 
@@ -13991,10 +14991,10 @@
     cls.add_method('NotifySwitchingStartNow', 
                    'void', 
                    [param('ns3::Time', 'duration')])
-    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveError(ns3::Ptr<ns3::Packet> packet, double rxSnr, bool isEndOfFrame) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveError(ns3::Ptr<ns3::Packet> packet, double rxSnr) [member function]
     cls.add_method('ReceiveError', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxSnr'), param('bool', 'isEndOfFrame')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxSnr')])
     ## 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', 
@@ -14081,11 +15081,6 @@
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet const >', 'peekedPacket'), param('ns3::WifiMacHeader', 'peekedHdr'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('uint16_t', 'size')], 
                    is_const=True)
-    ## mac-low.h (module 'wifi'): ns3::WifiTxVector ns3::MacLow::GetDataTxVector(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr) const [member function]
-    cls.add_method('GetDataTxVector', 
-                   'ns3::WifiTxVector', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr')], 
-                   is_const=True, visibility='protected', is_virtual=True)
     ## mac-low.h (module 'wifi'): void ns3::MacLow::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -14272,6 +15267,16 @@
     cls.add_method('InitSampleTable', 
                    'void', 
                    [param('ns3::MinstrelWifiRemoteStation *', 'station')])
+    ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
     cls.add_method('SetupMac', 
                    'void', 
@@ -14740,16 +15745,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -14777,35 +15797,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -15090,6 +16105,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## onoe-wifi-manager.h (module 'wifi'): void ns3::OnoeWifiManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## onoe-wifi-manager.h (module 'wifi'): void ns3::OnoeWifiManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## onoe-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::OnoeWifiManager::DoCreateStation() const [member function]
     cls.add_method('DoCreateStation', 
                    'ns3::WifiRemoteStation *', 
@@ -15398,6 +16423,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetupPhy', 
                    'void', 
@@ -15474,6 +16509,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
@@ -15818,6 +16858,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetDsssSupported(bool enable) [member function]
+    cls.add_method('SetDsssSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): bool ns3::RegularWifiMac::GetDsssSupported() const [member function]
+    cls.add_method('GetDsssSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
     return
 
 def register_Ns3RraaWifiManager_methods(root_module, cls):
@@ -15830,6 +16880,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## rraa-wifi-manager.h (module 'wifi'): void ns3::RraaWifiManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## rraa-wifi-manager.h (module 'wifi'): void ns3::RraaWifiManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## rraa-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::RraaWifiManager::DoCreateStation() const [member function]
     cls.add_method('DoCreateStation', 
                    'ns3::WifiRemoteStation *', 
@@ -15892,6 +16952,172 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3SpectrumChannel_methods(root_module, cls):
+    ## spectrum-channel.h (module 'spectrum'): ns3::SpectrumChannel::SpectrumChannel() [constructor]
+    cls.add_constructor([])
+    ## spectrum-channel.h (module 'spectrum'): ns3::SpectrumChannel::SpectrumChannel(ns3::SpectrumChannel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SpectrumChannel const &', 'arg0')])
+    ## spectrum-channel.h (module 'spectrum'): void ns3::SpectrumChannel::AddPropagationLossModel(ns3::Ptr<ns3::PropagationLossModel> loss) [member function]
+    cls.add_method('AddPropagationLossModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PropagationLossModel >', 'loss')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-channel.h (module 'spectrum'): void ns3::SpectrumChannel::AddRx(ns3::Ptr<ns3::SpectrumPhy> phy) [member function]
+    cls.add_method('AddRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumPhy >', 'phy')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-channel.h (module 'spectrum'): void ns3::SpectrumChannel::AddSpectrumPropagationLossModel(ns3::Ptr<ns3::SpectrumPropagationLossModel> loss) [member function]
+    cls.add_method('AddSpectrumPropagationLossModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumPropagationLossModel >', 'loss')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-channel.h (module 'spectrum'): static ns3::TypeId ns3::SpectrumChannel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## spectrum-channel.h (module 'spectrum'): void ns3::SpectrumChannel::SetPropagationDelayModel(ns3::Ptr<ns3::PropagationDelayModel> delay) [member function]
+    cls.add_method('SetPropagationDelayModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PropagationDelayModel >', 'delay')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-channel.h (module 'spectrum'): void ns3::SpectrumChannel::StartTx(ns3::Ptr<ns3::SpectrumSignalParameters> params) [member function]
+    cls.add_method('StartTx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumSignalParameters >', 'params')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3SpectrumWifiPhy_methods(root_module, cls):
+    ## spectrum-wifi-phy.h (module 'wifi'): ns3::SpectrumWifiPhy::SpectrumWifiPhy(ns3::SpectrumWifiPhy const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SpectrumWifiPhy const &', 'arg0')])
+    ## spectrum-wifi-phy.h (module 'wifi'): ns3::SpectrumWifiPhy::SpectrumWifiPhy() [constructor]
+    cls.add_constructor([])
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::AddOperationalChannel(uint16_t channelNumber) [member function]
+    cls.add_method('AddOperationalChannel', 
+                   'void', 
+                   [param('uint16_t', 'channelNumber')])
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::ClearOperationalChannelList() [member function]
+    cls.add_method('ClearOperationalChannelList', 
+                   'void', 
+                   [])
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::CreateWifiSpectrumPhyInterface(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('CreateWifiSpectrumPhyInterface', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## spectrum-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::SpectrumWifiPhy::GetChannel() const [member function]
+    cls.add_method('GetChannel', 
+                   'ns3::Ptr< ns3::WifiChannel >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): std::vector<unsigned short, std::allocator<unsigned short> > ns3::SpectrumWifiPhy::GetOperationalChannelList() const [member function]
+    cls.add_method('GetOperationalChannelList', 
+                   'std::vector< unsigned short >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::AntennaModel> ns3::SpectrumWifiPhy::GetRxAntenna() const [member function]
+    cls.add_method('GetRxAntenna', 
+                   'ns3::Ptr< ns3::AntennaModel >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::SpectrumModel const> ns3::SpectrumWifiPhy::GetRxSpectrumModel() const [member function]
+    cls.add_method('GetRxSpectrumModel', 
+                   'ns3::Ptr< ns3::SpectrumModel const >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiSpectrumPhyInterface> ns3::SpectrumWifiPhy::GetSpectrumPhy() const [member function]
+    cls.add_method('GetSpectrumPhy', 
+                   'ns3::Ptr< ns3::WifiSpectrumPhyInterface >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::SpectrumWifiPhy::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('RegisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')], 
+                   is_virtual=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::ResumeFromSleep() [member function]
+    cls.add_method('ResumeFromSleep', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::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)
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::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)
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::SetAntenna(ns3::Ptr<ns3::AntennaModel> antenna) [member function]
+    cls.add_method('SetAntenna', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::AntennaModel >', 'antenna')])
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::SetChannel(ns3::Ptr<ns3::SpectrumChannel> channel) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumChannel >', 'channel')])
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::SetPacketReceivedCallback(ns3::Callback<void, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetPacketReceivedCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::SetReceiveErrorCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetReceiveErrorCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
+                   is_virtual=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::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_virtual=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::SetSleepMode() [member function]
+    cls.add_method('SetSleepMode', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::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::mpduType', 'mpdutype'), param('ns3::Ptr< ns3::InterferenceHelper::Event >', 'event')])
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::StartRx(ns3::Ptr<ns3::SpectrumSignalParameters> rxParams) [member function]
+    cls.add_method('StartRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumSignalParameters >', 'rxParams')])
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('UnregisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')], 
+                   is_virtual=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): bool ns3::SpectrumWifiPhy::DoChannelSwitch(uint16_t id) [member function]
+    cls.add_method('DoChannelSwitch', 
+                   'bool', 
+                   [param('uint16_t', 'id')], 
+                   visibility='protected', is_virtual=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): bool ns3::SpectrumWifiPhy::DoFrequencySwitch(uint32_t frequency) [member function]
+    cls.add_method('DoFrequencySwitch', 
+                   'bool', 
+                   [param('uint32_t', 'frequency')], 
+                   visibility='protected', is_virtual=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -16061,6 +17287,10 @@
     cls.add_constructor([])
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates(ns3::SupportedRates const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SupportedRates const &', 'arg0')])
+    ## supported-rates.h (module 'wifi'): void ns3::SupportedRates::AddBssMembershipSelectorRate(uint32_t bs) [member function]
+    cls.add_method('AddBssMembershipSelectorRate', 
+                   'void', 
+                   [param('uint32_t', 'bs')])
     ## supported-rates.h (module 'wifi'): void ns3::SupportedRates::AddSupportedRate(uint32_t bs) [member function]
     cls.add_method('AddSupportedRate', 
                    'void', 
@@ -16095,6 +17325,11 @@
                    'bool', 
                    [param('uint32_t', 'bs')], 
                    is_const=True)
+    ## supported-rates.h (module 'wifi'): bool ns3::SupportedRates::IsBssMembershipSelectorRate(uint32_t bs) const [member function]
+    cls.add_method('IsBssMembershipSelectorRate', 
+                   'bool', 
+                   [param('uint32_t', 'bs')], 
+                   is_const=True)
     ## supported-rates.h (module 'wifi'): bool ns3::SupportedRates::IsSupportedRate(uint32_t bs) const [member function]
     cls.add_method('IsSupportedRate', 
                    'bool', 
@@ -16756,6 +17991,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Mac48Address', 'from'), param('ns3::Mac48Address', 'to')], 
                    visibility='protected')
+    ## wifi-net-device.h (module 'wifi'): void ns3::WifiNetDevice::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3WifiRadioEnergyModel_methods(root_module, cls):
@@ -17163,6 +18403,11 @@
                    'void', 
                    [param('uint32_t', 'aifsn')], 
                    is_virtual=True)
+    ## dca-txop.h (module 'wifi'): void ns3::DcaTxop::SetTxopLimit(ns3::Time txopLimit) [member function]
+    cls.add_method('SetTxopLimit', 
+                   'void', 
+                   [param('ns3::Time', 'txopLimit')], 
+                   is_virtual=True)
     ## dca-txop.h (module 'wifi'): uint32_t ns3::DcaTxop::GetMinCw() const [member function]
     cls.add_method('GetMinCw', 
                    'uint32_t', 
@@ -17178,6 +18423,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## dca-txop.h (module 'wifi'): ns3::Time ns3::DcaTxop::GetTxopLimit() const [member function]
+    cls.add_method('GetTxopLimit', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## dca-txop.h (module 'wifi'): void ns3::DcaTxop::Queue(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
     cls.add_method('Queue', 
                    'void', 
@@ -17305,6 +18555,14 @@
 
 def register_functions(root_module):
     module = root_module
+    ## dsss-parameter-set.h (module 'wifi'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeDsssParameterSetChecker() [free function]
+    module.add_function('MakeDsssParameterSetChecker', 
+                        'ns3::Ptr< ns3::AttributeChecker const >', 
+                        [])
+    ## edca-parameter-set.h (module 'wifi'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeEdcaParameterSetChecker() [free function]
+    module.add_function('MakeEdcaParameterSetChecker', 
+                        'ns3::Ptr< ns3::AttributeChecker const >', 
+                        [])
     ## erp-information.h (module 'wifi'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeErpInformationChecker() [free function]
     module.add_function('MakeErpInformationChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
diff -Naur ns-3.25/src/wifi/bindings/modulegen__gcc_LP64.py ns-3.26/src/wifi/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/wifi/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.455246017 -0700
+++ ns-3.26/src/wifi/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.745386923 -0700
@@ -20,12 +20,8 @@
 def register_types(module):
     root_module = module.get_root()
     
-    ## 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_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]
@@ -35,21 +31,25 @@
     ## 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]
-    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'])
-    ## qos-tag.h (module 'wifi'): ns3::UserPriority [enumeration]
-    module.add_enum('UserPriority', ['UP_BK', 'UP_BE', 'UP_EE', 'UP_CL', 'UP_VI', 'UP_VO', 'UP_NC'])
+    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', 'WIFI_PHY_STANDARD_UNSPECIFIED'])
+    ## 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-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'])
     ## edca-txop-n.h (module 'wifi'): ns3::TypeOfStation [enumeration]
     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::EnvironmentType [enumeration]
+    module.add_enum('EnvironmentType', ['UrbanEnvironment', 'SubUrbanEnvironment', 'OpenAreasEnvironment'], import_from_module='ns.propagation')
     ## 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]
     module.add_enum('MaxSize_e', ['MAX_SIZE'], outer_class=root_module['ns3::Address'], import_from_module='ns.network')
+    ## angles.h (module 'antenna'): ns3::Angles [struct]
+    module.add_class('Angles', import_from_module='ns.antenna')
     ## trace-helper.h (module 'network'): ns3::AsciiTraceHelper [class]
     module.add_class('AsciiTraceHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::AsciiTraceHelperForDevice [class]
@@ -60,6 +60,8 @@
     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'])
+    ## spectrum-model.h (module 'spectrum'): ns3::BandInfo [struct]
+    module.add_class('BandInfo', import_from_module='ns.spectrum')
     ## block-ack-manager.h (module 'wifi'): ns3::Bar [struct]
     module.add_class('Bar')
     ## block-ack-agreement.h (module 'wifi'): ns3::BlockAckAgreement [class]
@@ -178,8 +180,8 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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 +192,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], import_from_module='ns.core')
     ## status-code.h (module 'wifi'): ns3::StatusCode [class]
     module.add_class('StatusCode')
     ## tag.h (module 'network'): ns3::Tag [class]
@@ -200,12 +204,16 @@
     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 int> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned int'])
     ## 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]
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -223,9 +231,13 @@
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeFactory [class]
     module.add_class('WifiModeFactory')
     ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper [class]
-    module.add_class('WifiPhyHelper', allow_subclassing=True)
+    module.add_class('WifiPhyHelper', parent=[root_module['ns3::PcapHelperForDevice'], root_module['ns3::AsciiTraceHelperForDevice']])
+    ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::SupportedPcapDataLinkTypes [enumeration]
+    module.add_enum('SupportedPcapDataLinkTypes', ['DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO'], outer_class=root_module['ns3::WifiPhyHelper'])
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhyListener [class]
     module.add_class('WifiPhyListener', allow_subclassing=True)
+    ## wifi-phy-tag.h (module 'wifi'): ns3::WifiPhyTag [class]
+    module.add_class('WifiPhyTag', parent=root_module['ns3::Tag'])
     ## wifi-radio-energy-model-helper.h (module 'wifi'): ns3::WifiRadioEnergyModelHelper [class]
     module.add_class('WifiRadioEnergyModelHelper', parent=root_module['ns3::DeviceEnergyModelHelper'])
     ## wifi-radio-energy-model.h (module 'wifi'): ns3::WifiRadioEnergyModelPhyListener [class]
@@ -243,9 +255,7 @@
     ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiChannelHelper [class]
     module.add_class('YansWifiChannelHelper')
     ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiPhyHelper [class]
-    module.add_class('YansWifiPhyHelper', parent=[root_module['ns3::WifiPhyHelper'], root_module['ns3::PcapHelperForDevice'], root_module['ns3::AsciiTraceHelperForDevice']])
-    ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiPhyHelper::SupportedPcapDataLinkTypes [enumeration]
-    module.add_enum('SupportedPcapDataLinkTypes', ['DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO'], outer_class=root_module['ns3::YansWifiPhyHelper'])
+    module.add_class('YansWifiPhyHelper', parent=root_module['ns3::WifiPhyHelper'])
     ## 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]
@@ -290,8 +300,6 @@
     module.add_class('PropagationDelayModel', import_from_module='ns.propagation', parent=root_module['ns3::Object'])
     ## propagation-loss-model.h (module 'propagation'): ns3::PropagationLossModel [class]
     module.add_class('PropagationLossModel', import_from_module='ns.propagation', parent=root_module['ns3::Object'])
-    ## qos-tag.h (module 'wifi'): ns3::QosTag [class]
-    module.add_class('QosTag', parent=root_module['ns3::Tag'])
     ## qos-wifi-mac-helper.h (module 'wifi'): ns3::QosWifiMacHelper [class]
     module.add_class('QosWifiMacHelper', parent=root_module['ns3::WifiMacHelper'])
     ## propagation-delay-model.h (module 'propagation'): ns3::RandomPropagationDelayModel [class]
@@ -328,12 +336,30 @@
     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]
+    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::SpectrumValue, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumValue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::SpectrumValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::SpectrumValue>'], parent=root_module['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]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::WifiInformationElement', 'ns3::empty', 'ns3::DefaultDeleter<ns3::WifiInformationElement>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## snr-tag.h (module 'wifi'): ns3::SnrTag [class]
     module.add_class('SnrTag', parent=root_module['ns3::Tag'])
+    ## spectrum-interference.h (module 'spectrum'): ns3::SpectrumInterference [class]
+    module.add_class('SpectrumInterference', import_from_module='ns.spectrum', parent=root_module['ns3::Object'])
+    ## spectrum-model.h (module 'spectrum'): ns3::SpectrumModel [class]
+    module.add_class('SpectrumModel', import_from_module='ns.spectrum', parent=root_module['ns3::SimpleRefCount< ns3::SpectrumModel, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumModel> >'])
+    ## spectrum-phy.h (module 'spectrum'): ns3::SpectrumPhy [class]
+    module.add_class('SpectrumPhy', import_from_module='ns.spectrum', parent=root_module['ns3::Object'])
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters [struct]
+    module.add_class('SpectrumSignalParameters', import_from_module='ns.spectrum', parent=root_module['ns3::SimpleRefCount< ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> >'])
+    ## spectrum-value.h (module 'spectrum'): ns3::SpectrumValue [class]
+    module.add_class('SpectrumValue', import_from_module='ns.spectrum', parent=root_module['ns3::SimpleRefCount< ns3::SpectrumValue, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumValue> >'])
+    ## spectrum-wifi-helper.h (module 'wifi'): ns3::SpectrumWifiPhyHelper [class]
+    module.add_class('SpectrumWifiPhyHelper', parent=root_module['ns3::WifiPhyHelper'])
     ## propagation-loss-model.h (module 'propagation'): ns3::ThreeLogDistancePropagationLossModel [class]
     module.add_class('ThreeLogDistancePropagationLossModel', import_from_module='ns.propagation', parent=root_module['ns3::PropagationLossModel'])
     ## nstime.h (module 'core'): ns3::Time [class]
@@ -384,6 +410,8 @@
     module.add_enum('AddressType', ['ADDR1', 'ADDR2', 'ADDR3', 'ADDR4'], outer_class=root_module['ns3::WifiMacHeader'])
     ## wifi-mac-queue.h (module 'wifi'): ns3::WifiMacQueue [class]
     module.add_class('WifiMacQueue', parent=root_module['ns3::Object'])
+    ## wifi-mac-queue.h (module 'wifi'): ns3::WifiMacQueue::DropPolicy [enumeration]
+    module.add_enum('DropPolicy', ['DROP_NEWEST', 'DROP_OLDEST'], outer_class=root_module['ns3::WifiMacQueue'])
     ## wifi-mac-trailer.h (module 'wifi'): ns3::WifiMacTrailer [class]
     module.add_class('WifiMacTrailer', parent=root_module['ns3::Trailer'])
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhy [class]
@@ -396,6 +424,10 @@
     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-spectrum-phy-interface.h (module 'wifi'): ns3::WifiSpectrumPhyInterface [class]
+    module.add_class('WifiSpectrumPhyInterface', parent=root_module['ns3::SpectrumPhy'])
+    ## wifi-spectrum-signal-parameters.h (module 'wifi'): ns3::WifiSpectrumSignalParameters [struct]
+    module.add_class('WifiSpectrumSignalParameters', parent=root_module['ns3::SpectrumSignalParameters'])
     ## 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]
@@ -414,6 +446,8 @@
     module.add_class('AmrrWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
     ## amsdu-subframe-header.h (module 'wifi'): ns3::AmsduSubframeHeader [class]
     module.add_class('AmsduSubframeHeader', parent=root_module['ns3::Header'])
+    ## antenna-model.h (module 'antenna'): ns3::AntennaModel [class]
+    module.add_class('AntennaModel', import_from_module='ns.antenna', parent=root_module['ns3::Object'])
     ## aparf-wifi-manager.h (module 'wifi'): ns3::AparfWifiManager [class]
     module.add_class('AparfWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
     ## aparf-wifi-manager.h (module 'wifi'): ns3::AparfWifiManager::State [enumeration]
@@ -462,10 +496,26 @@
     module.add_class('DeviceEnergyModel', import_from_module='ns.energy', parent=root_module['ns3::Object'])
     ## double.h (module 'core'): ns3::DoubleValue [class]
     module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet [class]
+    module.add_class('DsssParameterSet', parent=root_module['ns3::WifiInformationElement'])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetChecker [class]
+    module.add_class('DsssParameterSetChecker', parent=root_module['ns3::AttributeChecker'])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue [class]
+    module.add_class('DsssParameterSetValue', parent=root_module['ns3::AttributeValue'])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet [class]
+    module.add_class('EdcaParameterSet', parent=root_module['ns3::WifiInformationElement'])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetChecker [class]
+    module.add_class('EdcaParameterSetChecker', parent=root_module['ns3::AttributeChecker'])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue [class]
+    module.add_class('EdcaParameterSetValue', parent=root_module['ns3::AttributeValue'])
     ## edca-txop-n.h (module 'wifi'): ns3::EdcaTxopN [class]
     module.add_class('EdcaTxopN', parent=root_module['ns3::Dcf'])
     ## 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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## energy-harvester.h (module 'energy'): ns3::EnergyHarvester [class]
@@ -610,10 +660,16 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
     module.add_class('RraaWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
+    ## spectrum-channel.h (module 'spectrum'): ns3::SpectrumChannel [class]
+    module.add_class('SpectrumChannel', import_from_module='ns.spectrum', parent=root_module['ns3::Channel'])
+    ## spectrum-wifi-phy.h (module 'wifi'): ns3::SpectrumWifiPhy [class]
+    module.add_class('SpectrumWifiPhy', parent=root_module['ns3::WifiPhy'])
     ## ssid.h (module 'wifi'): ns3::Ssid [class]
     module.add_class('Ssid', parent=root_module['ns3::WifiInformationElement'])
     ## ssid.h (module 'wifi'): ns3::SsidChecker [class]
@@ -679,10 +735,13 @@
     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< double >', 'double', container_type=u'vector')
+    module.add_container('ns3::Bands', 'ns3::BandInfo', 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')
+    module.add_container('std::vector< unsigned short >', 'short unsigned int', container_type=u'vector')
     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&')
@@ -692,6 +751,12 @@
     typehandlers.add_type_alias(u'uint8_t', u'ns3::WifiInformationElementId')
     typehandlers.add_type_alias(u'uint8_t*', u'ns3::WifiInformationElementId*')
     typehandlers.add_type_alias(u'uint8_t&', u'ns3::WifiInformationElementId&')
+    typehandlers.add_type_alias(u'std::vector< double, std::allocator< double > >', u'ns3::Values')
+    typehandlers.add_type_alias(u'std::vector< double, std::allocator< double > >*', u'ns3::Values*')
+    typehandlers.add_type_alias(u'std::vector< double, std::allocator< double > >&', u'ns3::Values&')
+    typehandlers.add_type_alias(u'std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >', u'ns3::Bands')
+    typehandlers.add_type_alias(u'std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >*', u'ns3::Bands*')
+    typehandlers.add_type_alias(u'std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >&', u'ns3::Bands&')
     typehandlers.add_type_alias(u'ns3::Vector3D', u'ns3::Vector')
     typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
     typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
@@ -706,15 +771,18 @@
     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'uint32_t', u'ns3::SpectrumModelUid_t')
+    typehandlers.add_type_alias(u'uint32_t*', u'ns3::SpectrumModelUid_t*')
+    typehandlers.add_type_alias(u'uint32_t&', u'ns3::SpectrumModelUid_t&')
     typehandlers.add_type_alias(u'std::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'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'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&')
@@ -808,12 +876,15 @@
     typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
     typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
     typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
     typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
     typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
     typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::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 ( * ) (  ) *', u'ns3::TracedValueCallback::Void')
+    typehandlers.add_type_alias(u'void ( * ) (  ) **', u'ns3::TracedValueCallback::Void*')
+    typehandlers.add_type_alias(u'void ( * ) (  ) *&', u'ns3::TracedValueCallback::Void&')
 
 def register_types_ns3_internal(module):
     root_module = module.get_root()
@@ -821,11 +892,13 @@
 
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
+    register_Ns3Angles_methods(root_module, root_module['ns3::Angles'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
     register_Ns3AsciiTraceHelperForDevice_methods(root_module, root_module['ns3::AsciiTraceHelperForDevice'])
     register_Ns3AthstatsHelper_methods(root_module, root_module['ns3::AthstatsHelper'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
+    register_Ns3BandInfo_methods(root_module, root_module['ns3::BandInfo'])
     register_Ns3Bar_methods(root_module, root_module['ns3::Bar'])
     register_Ns3BlockAckAgreement_methods(root_module, root_module['ns3::BlockAckAgreement'])
     register_Ns3BlockAckCache_methods(root_module, root_module['ns3::BlockAckCache'])
@@ -889,6 +962,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_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
     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'])
@@ -901,6 +975,7 @@
     register_Ns3WifiModeFactory_methods(root_module, root_module['ns3::WifiModeFactory'])
     register_Ns3WifiPhyHelper_methods(root_module, root_module['ns3::WifiPhyHelper'])
     register_Ns3WifiPhyListener_methods(root_module, root_module['ns3::WifiPhyListener'])
+    register_Ns3WifiPhyTag_methods(root_module, root_module['ns3::WifiPhyTag'])
     register_Ns3WifiRadioEnergyModelHelper_methods(root_module, root_module['ns3::WifiRadioEnergyModelHelper'])
     register_Ns3WifiRadioEnergyModelPhyListener_methods(root_module, root_module['ns3::WifiRadioEnergyModelPhyListener'])
     register_Ns3WifiRemoteStation_methods(root_module, root_module['ns3::WifiRemoteStation'])
@@ -930,7 +1005,6 @@
     register_Ns3PcapFileWrapper_methods(root_module, root_module['ns3::PcapFileWrapper'])
     register_Ns3PropagationDelayModel_methods(root_module, root_module['ns3::PropagationDelayModel'])
     register_Ns3PropagationLossModel_methods(root_module, root_module['ns3::PropagationLossModel'])
-    register_Ns3QosTag_methods(root_module, root_module['ns3::QosTag'])
     register_Ns3QosWifiMacHelper_methods(root_module, root_module['ns3::QosWifiMacHelper'])
     register_Ns3RandomPropagationDelayModel_methods(root_module, root_module['ns3::RandomPropagationDelayModel'])
     register_Ns3RandomPropagationLossModel_methods(root_module, root_module['ns3::RandomPropagationLossModel'])
@@ -949,9 +1023,18 @@
     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__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> >'])
     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'])
+    register_Ns3SpectrumInterference_methods(root_module, root_module['ns3::SpectrumInterference'])
+    register_Ns3SpectrumModel_methods(root_module, root_module['ns3::SpectrumModel'])
+    register_Ns3SpectrumPhy_methods(root_module, root_module['ns3::SpectrumPhy'])
+    register_Ns3SpectrumSignalParameters_methods(root_module, root_module['ns3::SpectrumSignalParameters'])
+    register_Ns3SpectrumValue_methods(root_module, root_module['ns3::SpectrumValue'])
+    register_Ns3SpectrumWifiPhyHelper_methods(root_module, root_module['ns3::SpectrumWifiPhyHelper'])
     register_Ns3ThreeLogDistancePropagationLossModel_methods(root_module, root_module['ns3::ThreeLogDistancePropagationLossModel'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
@@ -972,6 +1055,8 @@
     register_Ns3WifiPhy_methods(root_module, root_module['ns3::WifiPhy'])
     register_Ns3WifiPhyStateHelper_methods(root_module, root_module['ns3::WifiPhyStateHelper'])
     register_Ns3WifiRemoteStationManager_methods(root_module, root_module['ns3::WifiRemoteStationManager'])
+    register_Ns3WifiSpectrumPhyInterface_methods(root_module, root_module['ns3::WifiSpectrumPhyInterface'])
+    register_Ns3WifiSpectrumSignalParameters_methods(root_module, root_module['ns3::WifiSpectrumSignalParameters'])
     register_Ns3WifiTxCurrentModel_methods(root_module, root_module['ns3::WifiTxCurrentModel'])
     register_Ns3YansWifiPhy_methods(root_module, root_module['ns3::YansWifiPhy'])
     register_Ns3ZetaRandomVariable_methods(root_module, root_module['ns3::ZetaRandomVariable'])
@@ -981,6 +1066,7 @@
     register_Ns3AmpduSubframeHeader_methods(root_module, root_module['ns3::AmpduSubframeHeader'])
     register_Ns3AmrrWifiManager_methods(root_module, root_module['ns3::AmrrWifiManager'])
     register_Ns3AmsduSubframeHeader_methods(root_module, root_module['ns3::AmsduSubframeHeader'])
+    register_Ns3AntennaModel_methods(root_module, root_module['ns3::AntennaModel'])
     register_Ns3AparfWifiManager_methods(root_module, root_module['ns3::AparfWifiManager'])
     register_Ns3ArfWifiManager_methods(root_module, root_module['ns3::ArfWifiManager'])
     register_Ns3AthstatsWifiTraceSink_methods(root_module, root_module['ns3::AthstatsWifiTraceSink'])
@@ -1004,8 +1090,16 @@
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3DeviceEnergyModel_methods(root_module, root_module['ns3::DeviceEnergyModel'])
     register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
+    register_Ns3DsssParameterSet_methods(root_module, root_module['ns3::DsssParameterSet'])
+    register_Ns3DsssParameterSetChecker_methods(root_module, root_module['ns3::DsssParameterSetChecker'])
+    register_Ns3DsssParameterSetValue_methods(root_module, root_module['ns3::DsssParameterSetValue'])
+    register_Ns3EdcaParameterSet_methods(root_module, root_module['ns3::EdcaParameterSet'])
+    register_Ns3EdcaParameterSetChecker_methods(root_module, root_module['ns3::EdcaParameterSetChecker'])
+    register_Ns3EdcaParameterSetValue_methods(root_module, root_module['ns3::EdcaParameterSetValue'])
     register_Ns3EdcaTxopN_methods(root_module, root_module['ns3::EdcaTxopN'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EnergyHarvester_methods(root_module, root_module['ns3::EnergyHarvester'])
     register_Ns3EnergySource_methods(root_module, root_module['ns3::EnergySource'])
@@ -1079,6 +1173,8 @@
     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_Ns3SpectrumChannel_methods(root_module, root_module['ns3::SpectrumChannel'])
+    register_Ns3SpectrumWifiPhy_methods(root_module, root_module['ns3::SpectrumWifiPhy'])
     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'])
@@ -1186,6 +1282,24 @@
                    is_const=True)
     return
 
+def register_Ns3Angles_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## angles.h (module 'antenna'): ns3::Angles::Angles(ns3::Angles const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Angles const &', 'arg0')])
+    ## angles.h (module 'antenna'): ns3::Angles::Angles() [constructor]
+    cls.add_constructor([])
+    ## angles.h (module 'antenna'): ns3::Angles::Angles(double phi, double theta) [constructor]
+    cls.add_constructor([param('double', 'phi'), param('double', 'theta')])
+    ## angles.h (module 'antenna'): ns3::Angles::Angles(ns3::Vector v) [constructor]
+    cls.add_constructor([param('ns3::Vector', 'v')])
+    ## angles.h (module 'antenna'): ns3::Angles::Angles(ns3::Vector v, ns3::Vector o) [constructor]
+    cls.add_constructor([param('ns3::Vector', 'v'), param('ns3::Vector', 'o')])
+    ## angles.h (module 'antenna'): ns3::Angles::phi [variable]
+    cls.add_instance_attribute('phi', 'double', is_const=False)
+    ## angles.h (module 'antenna'): ns3::Angles::theta [variable]
+    cls.add_instance_attribute('theta', 'double', is_const=False)
+    return
+
 def register_Ns3AsciiTraceHelper_methods(root_module, cls):
     ## trace-helper.h (module 'network'): ns3::AsciiTraceHelper::AsciiTraceHelper(ns3::AsciiTraceHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::AsciiTraceHelper const &', 'arg0')])
@@ -1367,6 +1481,19 @@
     cls.add_instance_attribute('value', 'ns3::Ptr< ns3::AttributeValue >', is_const=False)
     return
 
+def register_Ns3BandInfo_methods(root_module, cls):
+    ## spectrum-model.h (module 'spectrum'): ns3::BandInfo::BandInfo() [constructor]
+    cls.add_constructor([])
+    ## spectrum-model.h (module 'spectrum'): ns3::BandInfo::BandInfo(ns3::BandInfo const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BandInfo const &', 'arg0')])
+    ## spectrum-model.h (module 'spectrum'): ns3::BandInfo::fc [variable]
+    cls.add_instance_attribute('fc', 'double', is_const=False)
+    ## spectrum-model.h (module 'spectrum'): ns3::BandInfo::fh [variable]
+    cls.add_instance_attribute('fh', 'double', is_const=False)
+    ## spectrum-model.h (module 'spectrum'): ns3::BandInfo::fl [variable]
+    cls.add_instance_attribute('fl', 'double', is_const=False)
+    return
+
 def register_Ns3Bar_methods(root_module, cls):
     ## block-ack-manager.h (module 'wifi'): ns3::Bar::Bar(ns3::Bar const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Bar const &', 'arg0')])
@@ -1593,9 +1720,13 @@
     cls.add_method('NotifyMpduTransmission', 
                    'void', 
                    [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('uint16_t', 'nextSeqNumber'), param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
-    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacket(ns3::WifiMacHeader & hdr, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacket(ns3::WifiMacHeader & hdr) [member function]
     cls.add_method('PeekNextPacket', 
                    'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'hdr')])
+    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacketByTidAndAddress(ns3::WifiMacHeader & hdr, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextPacketByTidAndAddress', 
+                   'ns3::Ptr< ns3::Packet const >', 
                    [param('ns3::WifiMacHeader &', 'hdr'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')])
     ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::RemovePacket(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
     cls.add_method('RemovePacket', 
@@ -1761,6 +1892,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -2206,6 +2342,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## dcf-manager.h (module 'wifi'): ns3::Time ns3::DcfState::GetTxopLimit() const [member function]
+    cls.add_method('GetTxopLimit', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## dcf-manager.h (module 'wifi'): bool ns3::DcfState::IsAccessRequested() const [member function]
     cls.add_method('IsAccessRequested', 
                    'bool', 
@@ -2232,6 +2373,10 @@
     cls.add_method('SetCwMin', 
                    'void', 
                    [param('uint32_t', 'minCw')])
+    ## dcf-manager.h (module 'wifi'): void ns3::DcfState::SetTxopLimit(ns3::Time txopLimit) [member function]
+    cls.add_method('SetTxopLimit', 
+                   'void', 
+                   [param('ns3::Time', 'txopLimit')])
     ## dcf-manager.h (module 'wifi'): void ns3::DcfState::StartBackoffNow(uint32_t nSlots) [member function]
     cls.add_method('StartBackoffNow', 
                    'void', 
@@ -2562,6 +2707,10 @@
     cls.add_method('Add', 
                    'ns3::Ptr< ns3::InterferenceHelper::Event >', 
                    [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::Time', 'duration'), param('double', 'rxPower')])
+    ## interference-helper.h (module 'wifi'): void ns3::InterferenceHelper::AddForeignSignal(ns3::Time duration, double rxPower) [member function]
+    cls.add_method('AddForeignSignal', 
+                   'void', 
+                   [param('ns3::Time', 'duration'), param('double', 'rxPower')])
     ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer ns3::InterferenceHelper::CalculatePlcpHeaderSnrPer(ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
     cls.add_method('CalculatePlcpHeaderSnrPer', 
                    'ns3::InterferenceHelper::SnrPer', 
@@ -3301,6 +3450,11 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::StartNextFragment() [member function]
+    cls.add_method('StartNextFragment', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3MacLowTransmissionParameters_methods(root_module, cls):
@@ -4048,10 +4202,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -4412,6 +4566,40 @@
                    [param('double 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_Ns3TracedValue__Unsigned_long_methods(root_module, cls):
     ## traced-value.h (module 'core'): ns3::TracedValue<unsigned long>::TracedValue() [constructor]
     cls.add_constructor([])
@@ -4457,23 +4645,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -4588,6 +4776,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -4609,10 +4802,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -4634,6 +4827,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -4649,6 +4846,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3Vector2D_methods(root_module, cls):
@@ -4840,15 +5041,52 @@
     return
 
 def register_Ns3WifiPhyHelper_methods(root_module, cls):
-    ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper() [constructor]
-    cls.add_constructor([])
     ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper(ns3::WifiPhyHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiPhyHelper const &', 'arg0')])
+    ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper() [constructor]
+    cls.add_constructor([])
     ## wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('Create', 
                    'ns3::Ptr< ns3::WifiPhy >', 
                    [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-helper.h (module 'wifi'): ns3::PcapHelper::DataLinkType ns3::WifiPhyHelper::GetPcapDataLinkType() const [member function]
+    cls.add_method('GetPcapDataLinkType', 
+                   'ns3::PcapHelper::DataLinkType', 
+                   [], 
+                   is_const=True)
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::Set(std::string name, ns3::AttributeValue const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'v')])
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::SetErrorRateModel(std::string name, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetErrorRateModel', 
+                   'void', 
+                   [param('std::string', 'name'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::SetPcapDataLinkType(ns3::WifiPhyHelper::SupportedPcapDataLinkTypes dlt) [member function]
+    cls.add_method('SetPcapDataLinkType', 
+                   'void', 
+                   [param('ns3::WifiPhyHelper::SupportedPcapDataLinkTypes', 'dlt')])
+    ## wifi-helper.h (module 'wifi'): static void ns3::WifiPhyHelper::PcapSniffRxEvent(ns3::Ptr<ns3::PcapFileWrapper> file, 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('PcapSniffRxEvent', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PcapFileWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::signalNoiseDbm', 'signalNoise')], 
+                   is_static=True, visibility='protected')
+    ## wifi-helper.h (module 'wifi'): static void ns3::WifiPhyHelper::PcapSniffTxEvent(ns3::Ptr<ns3::PcapFileWrapper> file, ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector, ns3::mpduInfo aMpdu) [member function]
+    cls.add_method('PcapSniffTxEvent', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PcapFileWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector'), param('ns3::mpduInfo', 'aMpdu')], 
+                   is_static=True, visibility='protected')
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiInternal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-helper.h (module 'wifi'): void ns3::WifiPhyHelper::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapInternal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3WifiPhyListener_methods(root_module, cls):
@@ -4898,6 +5136,60 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3WifiPhyTag_methods(root_module, cls):
+    ## wifi-phy-tag.h (module 'wifi'): ns3::WifiPhyTag::WifiPhyTag(ns3::WifiPhyTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiPhyTag const &', 'arg0')])
+    ## wifi-phy-tag.h (module 'wifi'): ns3::WifiPhyTag::WifiPhyTag() [constructor]
+    cls.add_constructor([])
+    ## wifi-phy-tag.h (module 'wifi'): ns3::WifiPhyTag::WifiPhyTag(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduType mpdutype) [constructor]
+    cls.add_constructor([param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduType', 'mpdutype')])
+    ## wifi-phy-tag.h (module 'wifi'): void ns3::WifiPhyTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## wifi-phy-tag.h (module 'wifi'): ns3::TypeId ns3::WifiPhyTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-phy-tag.h (module 'wifi'): ns3::mpduType ns3::WifiPhyTag::GetMpduType() const [member function]
+    cls.add_method('GetMpduType', 
+                   'ns3::mpduType', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy-tag.h (module 'wifi'): uint32_t ns3::WifiPhyTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-phy-tag.h (module 'wifi'): static ns3::TypeId ns3::WifiPhyTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy-tag.h (module 'wifi'): ns3::WifiPreamble ns3::WifiPhyTag::GetWifiPreamble() const [member function]
+    cls.add_method('GetWifiPreamble', 
+                   'ns3::WifiPreamble', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy-tag.h (module 'wifi'): ns3::WifiTxVector ns3::WifiPhyTag::GetWifiTxVector() const [member function]
+    cls.add_method('GetWifiTxVector', 
+                   'ns3::WifiTxVector', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy-tag.h (module 'wifi'): void ns3::WifiPhyTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## wifi-phy-tag.h (module 'wifi'): void ns3::WifiPhyTag::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_Ns3WifiRadioEnergyModelHelper_methods(root_module, cls):
     ## wifi-radio-energy-model-helper.h (module 'wifi'): ns3::WifiRadioEnergyModelHelper::WifiRadioEnergyModelHelper(ns3::WifiRadioEnergyModelHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiRadioEnergyModelHelper const &', 'arg0')])
@@ -5184,15 +5476,6 @@
                    'ns3::YansWifiPhyHelper', 
                    [], 
                    is_static=True)
-    ## yans-wifi-helper.h (module 'wifi'): uint32_t ns3::YansWifiPhyHelper::GetPcapDataLinkType() const [member function]
-    cls.add_method('GetPcapDataLinkType', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::Set(std::string name, ns3::AttributeValue const & v) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'v')])
     ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::SetChannel(ns3::Ptr<ns3::YansWifiChannel> channel) [member function]
     cls.add_method('SetChannel', 
                    'void', 
@@ -5201,29 +5484,11 @@
     cls.add_method('SetChannel', 
                    'void', 
                    [param('std::string', 'channelName')])
-    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::SetErrorRateModel(std::string name, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
-    cls.add_method('SetErrorRateModel', 
-                   'void', 
-                   [param('std::string', 'name'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
-    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::SetPcapDataLinkType(ns3::YansWifiPhyHelper::SupportedPcapDataLinkTypes dlt) [member function]
-    cls.add_method('SetPcapDataLinkType', 
-                   'void', 
-                   [param('ns3::YansWifiPhyHelper::SupportedPcapDataLinkTypes', 'dlt')])
     ## yans-wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::YansWifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('Create', 
                    'ns3::Ptr< ns3::WifiPhy >', 
                    [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
-    cls.add_method('EnableAsciiInternal', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
-                   visibility='private', is_virtual=True)
-    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
-    cls.add_method('EnablePcapInternal', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
-                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -5342,8 +5607,13 @@
                    'ns3::TypeId', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ampdu-tag.h (module 'wifi'): uint8_t ns3::AmpduTag::GetNoOfMpdus() const [member function]
-    cls.add_method('GetNoOfMpdus', 
+    ## ampdu-tag.h (module 'wifi'): ns3::Time ns3::AmpduTag::GetRemainingAmpduDuration() const [member function]
+    cls.add_method('GetRemainingAmpduDuration', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## ampdu-tag.h (module 'wifi'): uint8_t ns3::AmpduTag::GetRemainingNbOfMpdus() const [member function]
+    cls.add_method('GetRemainingNbOfMpdus', 
                    'uint8_t', 
                    [], 
                    is_const=True)
@@ -5371,10 +5641,14 @@
     cls.add_method('SetAmpdu', 
                    'void', 
                    [param('bool', 'supported')])
-    ## ampdu-tag.h (module 'wifi'): void ns3::AmpduTag::SetNoOfMpdus(uint8_t noofmpdus) [member function]
-    cls.add_method('SetNoOfMpdus', 
+    ## ampdu-tag.h (module 'wifi'): void ns3::AmpduTag::SetRemainingAmpduDuration(ns3::Time duration) [member function]
+    cls.add_method('SetRemainingAmpduDuration', 
+                   'void', 
+                   [param('ns3::Time', 'duration')])
+    ## ampdu-tag.h (module 'wifi'): void ns3::AmpduTag::SetRemainingNbOfMpdus(uint8_t nbofmpdus) [member function]
+    cls.add_method('SetRemainingNbOfMpdus', 
                    'void', 
-                   [param('uint8_t', 'noofmpdus')])
+                   [param('uint8_t', 'nbofmpdus')])
     return
 
 def register_Ns3Chunk_methods(root_module, cls):
@@ -5728,6 +6002,11 @@
                    'ns3::CapabilityInformation', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::EdcaParameterSet ns3::MgtAssocResponseHeader::GetEdcaParameterSet() const [member function]
+    cls.add_method('GetEdcaParameterSet', 
+                   'ns3::EdcaParameterSet', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::ErpInformation ns3::MgtAssocResponseHeader::GetErpInformation() const [member function]
     cls.add_method('GetErpInformation', 
                    'ns3::ErpInformation', 
@@ -5785,6 +6064,10 @@
     cls.add_method('SetCapabilities', 
                    'void', 
                    [param('ns3::CapabilityInformation', 'capabilities')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetEdcaParameterSet(ns3::EdcaParameterSet edcaParameterSet) [member function]
+    cls.add_method('SetEdcaParameterSet', 
+                   'void', 
+                   [param('ns3::EdcaParameterSet', 'edcaParameterSet')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetErpInformation(ns3::ErpInformation erpInformation) [member function]
     cls.add_method('SetErpInformation', 
                    'void', 
@@ -5963,6 +6246,16 @@
                    'ns3::CapabilityInformation', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::DsssParameterSet ns3::MgtProbeResponseHeader::GetDsssParameterSet() const [member function]
+    cls.add_method('GetDsssParameterSet', 
+                   'ns3::DsssParameterSet', 
+                   [], 
+                   is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::EdcaParameterSet ns3::MgtProbeResponseHeader::GetEdcaParameterSet() const [member function]
+    cls.add_method('GetEdcaParameterSet', 
+                   'ns3::EdcaParameterSet', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::ErpInformation ns3::MgtProbeResponseHeader::GetErpInformation() const [member function]
     cls.add_method('GetErpInformation', 
                    'ns3::ErpInformation', 
@@ -6030,6 +6323,14 @@
     cls.add_method('SetCapabilities', 
                    'void', 
                    [param('ns3::CapabilityInformation', 'capabilities')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetDsssParameterSet(ns3::DsssParameterSet dsssParameterSet) [member function]
+    cls.add_method('SetDsssParameterSet', 
+                   'void', 
+                   [param('ns3::DsssParameterSet', 'dsssParameterSet')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetEdcaParameterSet(ns3::EdcaParameterSet edcaParameterSet) [member function]
+    cls.add_method('SetEdcaParameterSet', 
+                   'void', 
+                   [param('ns3::EdcaParameterSet', 'edcaParameterSet')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetErpInformation(ns3::ErpInformation erpInformation) [member function]
     cls.add_method('SetErpInformation', 
                    'void', 
@@ -6155,6 +6456,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -6334,58 +6640,6 @@
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
-def register_Ns3QosTag_methods(root_module, cls):
-    ## qos-tag.h (module 'wifi'): ns3::QosTag::QosTag(ns3::QosTag const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::QosTag const &', 'arg0')])
-    ## qos-tag.h (module 'wifi'): ns3::QosTag::QosTag() [constructor]
-    cls.add_constructor([])
-    ## qos-tag.h (module 'wifi'): ns3::QosTag::QosTag(uint8_t tid) [constructor]
-    cls.add_constructor([param('uint8_t', 'tid')])
-    ## qos-tag.h (module 'wifi'): void ns3::QosTag::Deserialize(ns3::TagBuffer i) [member function]
-    cls.add_method('Deserialize', 
-                   'void', 
-                   [param('ns3::TagBuffer', 'i')], 
-                   is_virtual=True)
-    ## qos-tag.h (module 'wifi'): ns3::TypeId ns3::QosTag::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## qos-tag.h (module 'wifi'): uint32_t ns3::QosTag::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## qos-tag.h (module 'wifi'): uint8_t ns3::QosTag::GetTid() const [member function]
-    cls.add_method('GetTid', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## qos-tag.h (module 'wifi'): static ns3::TypeId ns3::QosTag::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## qos-tag.h (module 'wifi'): void ns3::QosTag::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True, is_virtual=True)
-    ## qos-tag.h (module 'wifi'): void ns3::QosTag::Serialize(ns3::TagBuffer i) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::TagBuffer', 'i')], 
-                   is_const=True, is_virtual=True)
-    ## qos-tag.h (module 'wifi'): void ns3::QosTag::SetTid(uint8_t tid) [member function]
-    cls.add_method('SetTid', 
-                   'void', 
-                   [param('uint8_t', 'tid')])
-    ## qos-tag.h (module 'wifi'): void ns3::QosTag::SetUserPriority(ns3::UserPriority up) [member function]
-    cls.add_method('SetUserPriority', 
-                   'void', 
-                   [param('ns3::UserPriority', 'up')])
-    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')])
@@ -6713,6 +6967,42 @@
                    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([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SpectrumModel, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumModel> >::SimpleRefCount(ns3::SimpleRefCount<ns3::SpectrumModel, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumModel> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::SpectrumModel, ns3::empty, ns3::DefaultDeleter< ns3::SpectrumModel > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::SpectrumModel, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumModel> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3SpectrumSignalParameters_Ns3Empty_Ns3DefaultDeleter__lt__ns3SpectrumSignalParameters__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> >::SimpleRefCount(ns3::SimpleRefCount<ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter< ns3::SpectrumSignalParameters > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3SpectrumValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3SpectrumValue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SpectrumValue, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumValue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SpectrumValue, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumValue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::SpectrumValue, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumValue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::SpectrumValue, ns3::empty, ns3::DefaultDeleter< ns3::SpectrumValue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::SpectrumValue, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumValue> >::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([])
@@ -6785,42 +7075,278 @@
                    [param('double', 'snr')])
     return
 
-def register_Ns3ThreeLogDistancePropagationLossModel_methods(root_module, cls):
-    ## propagation-loss-model.h (module 'propagation'): static ns3::TypeId ns3::ThreeLogDistancePropagationLossModel::GetTypeId() [member function]
+def register_Ns3SpectrumInterference_methods(root_module, cls):
+    ## spectrum-interference.h (module 'spectrum'): ns3::SpectrumInterference::SpectrumInterference(ns3::SpectrumInterference const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SpectrumInterference const &', 'arg0')])
+    ## spectrum-interference.h (module 'spectrum'): ns3::SpectrumInterference::SpectrumInterference() [constructor]
+    cls.add_constructor([])
+    ## spectrum-interference.h (module 'spectrum'): void ns3::SpectrumInterference::AbortRx() [member function]
+    cls.add_method('AbortRx', 
+                   'void', 
+                   [])
+    ## spectrum-interference.h (module 'spectrum'): void ns3::SpectrumInterference::AddSignal(ns3::Ptr<ns3::SpectrumValue const> spd, ns3::Time const duration) [member function]
+    cls.add_method('AddSignal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumValue const >', 'spd'), param('ns3::Time const', 'duration')])
+    ## spectrum-interference.h (module 'spectrum'): bool ns3::SpectrumInterference::EndRx() [member function]
+    cls.add_method('EndRx', 
+                   'bool', 
+                   [])
+    ## spectrum-interference.h (module 'spectrum'): static ns3::TypeId ns3::SpectrumInterference::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## propagation-loss-model.h (module 'propagation'): ns3::ThreeLogDistancePropagationLossModel::ThreeLogDistancePropagationLossModel() [constructor]
-    cls.add_constructor([])
-    ## propagation-loss-model.h (module 'propagation'): double ns3::ThreeLogDistancePropagationLossModel::DoCalcRxPower(double txPowerDbm, ns3::Ptr<ns3::MobilityModel> a, ns3::Ptr<ns3::MobilityModel> b) const [member function]
-    cls.add_method('DoCalcRxPower', 
-                   'double', 
-                   [param('double', 'txPowerDbm'), param('ns3::Ptr< ns3::MobilityModel >', 'a'), param('ns3::Ptr< ns3::MobilityModel >', 'b')], 
-                   is_const=True, visibility='private', is_virtual=True)
-    ## propagation-loss-model.h (module 'propagation'): int64_t ns3::ThreeLogDistancePropagationLossModel::DoAssignStreams(int64_t stream) [member function]
-    cls.add_method('DoAssignStreams', 
-                   'int64_t', 
-                   [param('int64_t', 'stream')], 
-                   visibility='private', is_virtual=True)
+    ## spectrum-interference.h (module 'spectrum'): void ns3::SpectrumInterference::SetErrorModel(ns3::Ptr<ns3::SpectrumErrorModel> e) [member function]
+    cls.add_method('SetErrorModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumErrorModel >', 'e')])
+    ## spectrum-interference.h (module 'spectrum'): void ns3::SpectrumInterference::SetNoisePowerSpectralDensity(ns3::Ptr<ns3::SpectrumValue const> noisePsd) [member function]
+    cls.add_method('SetNoisePowerSpectralDensity', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumValue const >', 'noisePsd')])
+    ## spectrum-interference.h (module 'spectrum'): void ns3::SpectrumInterference::StartRx(ns3::Ptr<ns3::Packet const> p, ns3::Ptr<ns3::SpectrumValue const> rxPsd) [member function]
+    cls.add_method('StartRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ptr< ns3::SpectrumValue const >', 'rxPsd')])
+    ## spectrum-interference.h (module 'spectrum'): void ns3::SpectrumInterference::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
     return
 
-def register_Ns3Time_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<=')
-    cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', u'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('>')
-    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', u'right'))
-    cls.add_output_stream_operator()
+def register_Ns3SpectrumModel_methods(root_module, cls):
     cls.add_binary_comparison_operator('==')
-    cls.add_binary_comparison_operator('>=')
-    ## nstime.h (module 'core'): ns3::Time::Time() [constructor]
-    cls.add_constructor([])
+    ## spectrum-model.h (module 'spectrum'): ns3::SpectrumModel::SpectrumModel(ns3::SpectrumModel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SpectrumModel const &', 'arg0')])
+    ## spectrum-model.h (module 'spectrum'): ns3::SpectrumModel::SpectrumModel(std::vector<double, std::allocator<double> > centerFreqs) [constructor]
+    cls.add_constructor([param('std::vector< double >', 'centerFreqs')])
+    ## spectrum-model.h (module 'spectrum'): ns3::SpectrumModel::SpectrumModel(ns3::Bands bands) [constructor]
+    cls.add_constructor([param('ns3::Bands', 'bands')])
+    ## spectrum-model.h (module 'spectrum'): __gnu_cxx::__normal_iterator<const ns3::BandInfo*,std::vector<ns3::BandInfo, std::allocator<ns3::BandInfo> > > ns3::SpectrumModel::Begin() const [member function]
+    cls.add_method('Begin', 
+                   '__gnu_cxx::__normal_iterator< ns3::BandInfo const *, std::vector< ns3::BandInfo > >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-model.h (module 'spectrum'): __gnu_cxx::__normal_iterator<const ns3::BandInfo*,std::vector<ns3::BandInfo, std::allocator<ns3::BandInfo> > > ns3::SpectrumModel::End() const [member function]
+    cls.add_method('End', 
+                   '__gnu_cxx::__normal_iterator< ns3::BandInfo const *, std::vector< ns3::BandInfo > >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-model.h (module 'spectrum'): size_t ns3::SpectrumModel::GetNumBands() const [member function]
+    cls.add_method('GetNumBands', 
+                   'size_t', 
+                   [], 
+                   is_const=True)
+    ## spectrum-model.h (module 'spectrum'): ns3::SpectrumModelUid_t ns3::SpectrumModel::GetUid() const [member function]
+    cls.add_method('GetUid', 
+                   'ns3::SpectrumModelUid_t', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3SpectrumPhy_methods(root_module, cls):
+    ## spectrum-phy.h (module 'spectrum'): ns3::SpectrumPhy::SpectrumPhy() [constructor]
+    cls.add_constructor([])
+    ## spectrum-phy.h (module 'spectrum'): static ns3::TypeId ns3::SpectrumPhy::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## spectrum-phy.h (module 'spectrum'): void ns3::SpectrumPhy::SetDevice(ns3::Ptr<ns3::NetDevice> d) [member function]
+    cls.add_method('SetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'd')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::SpectrumPhy::GetDevice() const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): void ns3::SpectrumPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> m) [member function]
+    cls.add_method('SetMobility', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MobilityModel >', 'm')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::MobilityModel> ns3::SpectrumPhy::GetMobility() [member function]
+    cls.add_method('GetMobility', 
+                   'ns3::Ptr< ns3::MobilityModel >', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): void ns3::SpectrumPhy::SetChannel(ns3::Ptr<ns3::SpectrumChannel> c) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumChannel >', 'c')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumModel const> ns3::SpectrumPhy::GetRxSpectrumModel() const [member function]
+    cls.add_method('GetRxSpectrumModel', 
+                   'ns3::Ptr< ns3::SpectrumModel const >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::AntennaModel> ns3::SpectrumPhy::GetRxAntenna() [member function]
+    cls.add_method('GetRxAntenna', 
+                   'ns3::Ptr< ns3::AntennaModel >', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): void ns3::SpectrumPhy::StartRx(ns3::Ptr<ns3::SpectrumSignalParameters> params) [member function]
+    cls.add_method('StartRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumSignalParameters >', 'params')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3SpectrumSignalParameters_methods(root_module, cls):
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::SpectrumSignalParameters() [constructor]
+    cls.add_constructor([])
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::SpectrumSignalParameters(ns3::SpectrumSignalParameters const & p) [copy constructor]
+    cls.add_constructor([param('ns3::SpectrumSignalParameters const &', 'p')])
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumSignalParameters> ns3::SpectrumSignalParameters::Copy() [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::SpectrumSignalParameters >', 
+                   [], 
+                   is_virtual=True)
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::duration [variable]
+    cls.add_instance_attribute('duration', 'ns3::Time', is_const=False)
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::psd [variable]
+    cls.add_instance_attribute('psd', 'ns3::Ptr< ns3::SpectrumValue >', is_const=False)
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::txAntenna [variable]
+    cls.add_instance_attribute('txAntenna', 'ns3::Ptr< ns3::AntennaModel >', is_const=False)
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::txPhy [variable]
+    cls.add_instance_attribute('txPhy', 'ns3::Ptr< ns3::SpectrumPhy >', is_const=False)
+    return
+
+def register_Ns3SpectrumValue_methods(root_module, cls):
+    cls.add_binary_numeric_operator('*', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', u'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', u'right'))
+    cls.add_unary_numeric_operator('-')
+    cls.add_binary_numeric_operator('-', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', u'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', u'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', u'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', u'right'))
+    cls.add_output_stream_operator()
+    cls.add_inplace_numeric_operator('*=', param('ns3::SpectrumValue const &', u'right'))
+    cls.add_inplace_numeric_operator('*=', param('double', u'right'))
+    cls.add_inplace_numeric_operator('+=', param('ns3::SpectrumValue const &', u'right'))
+    cls.add_inplace_numeric_operator('+=', param('double', u'right'))
+    cls.add_inplace_numeric_operator('-=', param('ns3::SpectrumValue const &', u'right'))
+    cls.add_inplace_numeric_operator('-=', param('double', u'right'))
+    cls.add_inplace_numeric_operator('/=', param('ns3::SpectrumValue const &', u'right'))
+    cls.add_inplace_numeric_operator('/=', param('double', u'right'))
+    ## spectrum-value.h (module 'spectrum'): ns3::SpectrumValue::SpectrumValue(ns3::SpectrumValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SpectrumValue const &', 'arg0')])
+    ## spectrum-value.h (module 'spectrum'): ns3::SpectrumValue::SpectrumValue(ns3::Ptr<ns3::SpectrumModel const> sm) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::SpectrumModel const >', 'sm')])
+    ## spectrum-value.h (module 'spectrum'): ns3::SpectrumValue::SpectrumValue() [constructor]
+    cls.add_constructor([])
+    ## spectrum-value.h (module 'spectrum'): __gnu_cxx::__normal_iterator<const ns3::BandInfo*,std::vector<ns3::BandInfo, std::allocator<ns3::BandInfo> > > ns3::SpectrumValue::ConstBandsBegin() const [member function]
+    cls.add_method('ConstBandsBegin', 
+                   '__gnu_cxx::__normal_iterator< ns3::BandInfo const *, std::vector< ns3::BandInfo > >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-value.h (module 'spectrum'): __gnu_cxx::__normal_iterator<const ns3::BandInfo*,std::vector<ns3::BandInfo, std::allocator<ns3::BandInfo> > > ns3::SpectrumValue::ConstBandsEnd() const [member function]
+    cls.add_method('ConstBandsEnd', 
+                   '__gnu_cxx::__normal_iterator< ns3::BandInfo const *, std::vector< ns3::BandInfo > >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-value.h (module 'spectrum'): __gnu_cxx::__normal_iterator<const double*,std::vector<double, std::allocator<double> > > ns3::SpectrumValue::ConstValuesBegin() const [member function]
+    cls.add_method('ConstValuesBegin', 
+                   '__gnu_cxx::__normal_iterator< double const *, std::vector< double > >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-value.h (module 'spectrum'): __gnu_cxx::__normal_iterator<const double*,std::vector<double, std::allocator<double> > > ns3::SpectrumValue::ConstValuesEnd() const [member function]
+    cls.add_method('ConstValuesEnd', 
+                   '__gnu_cxx::__normal_iterator< double const *, std::vector< double > >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-value.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumValue> ns3::SpectrumValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-value.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumModel const> ns3::SpectrumValue::GetSpectrumModel() const [member function]
+    cls.add_method('GetSpectrumModel', 
+                   'ns3::Ptr< ns3::SpectrumModel const >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-value.h (module 'spectrum'): ns3::SpectrumModelUid_t ns3::SpectrumValue::GetSpectrumModelUid() const [member function]
+    cls.add_method('GetSpectrumModelUid', 
+                   'ns3::SpectrumModelUid_t', 
+                   [], 
+                   is_const=True)
+    ## spectrum-value.h (module 'spectrum'): __gnu_cxx::__normal_iterator<double*,std::vector<double, std::allocator<double> > > ns3::SpectrumValue::ValuesBegin() [member function]
+    cls.add_method('ValuesBegin', 
+                   '__gnu_cxx::__normal_iterator< double *, std::vector< double > >', 
+                   [])
+    ## spectrum-value.h (module 'spectrum'): __gnu_cxx::__normal_iterator<double*,std::vector<double, std::allocator<double> > > ns3::SpectrumValue::ValuesEnd() [member function]
+    cls.add_method('ValuesEnd', 
+                   '__gnu_cxx::__normal_iterator< double *, std::vector< double > >', 
+                   [])
+    return
+
+def register_Ns3SpectrumWifiPhyHelper_methods(root_module, cls):
+    ## spectrum-wifi-helper.h (module 'wifi'): ns3::SpectrumWifiPhyHelper::SpectrumWifiPhyHelper(ns3::SpectrumWifiPhyHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SpectrumWifiPhyHelper const &', 'arg0')])
+    ## spectrum-wifi-helper.h (module 'wifi'): ns3::SpectrumWifiPhyHelper::SpectrumWifiPhyHelper() [constructor]
+    cls.add_constructor([])
+    ## spectrum-wifi-helper.h (module 'wifi'): static ns3::SpectrumWifiPhyHelper ns3::SpectrumWifiPhyHelper::Default() [member function]
+    cls.add_method('Default', 
+                   'ns3::SpectrumWifiPhyHelper', 
+                   [], 
+                   is_static=True)
+    ## spectrum-wifi-helper.h (module 'wifi'): void ns3::SpectrumWifiPhyHelper::SetChannel(ns3::Ptr<ns3::SpectrumChannel> channel) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumChannel >', 'channel')])
+    ## spectrum-wifi-helper.h (module 'wifi'): void ns3::SpectrumWifiPhyHelper::SetChannel(std::string channelName) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('std::string', 'channelName')])
+    ## spectrum-wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::SpectrumWifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3ThreeLogDistancePropagationLossModel_methods(root_module, cls):
+    ## propagation-loss-model.h (module 'propagation'): static ns3::TypeId ns3::ThreeLogDistancePropagationLossModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## propagation-loss-model.h (module 'propagation'): ns3::ThreeLogDistancePropagationLossModel::ThreeLogDistancePropagationLossModel() [constructor]
+    cls.add_constructor([])
+    ## propagation-loss-model.h (module 'propagation'): double ns3::ThreeLogDistancePropagationLossModel::DoCalcRxPower(double txPowerDbm, ns3::Ptr<ns3::MobilityModel> a, ns3::Ptr<ns3::MobilityModel> b) const [member function]
+    cls.add_method('DoCalcRxPower', 
+                   'double', 
+                   [param('double', 'txPowerDbm'), param('ns3::Ptr< ns3::MobilityModel >', 'a'), param('ns3::Ptr< ns3::MobilityModel >', 'b')], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## propagation-loss-model.h (module 'propagation'): int64_t ns3::ThreeLogDistancePropagationLossModel::DoAssignStreams(int64_t stream) [member function]
+    cls.add_method('DoAssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3Time_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<=')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', u'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('>')
+    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', 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]
+    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]
@@ -7673,10 +8199,10 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureDcf(ns3::Ptr<ns3::Dcf> dcf, uint32_t cwmin, uint32_t cwmax, ns3::AcIndex ac) [member function]
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureDcf(ns3::Ptr<ns3::Dcf> dcf, uint32_t cwmin, uint32_t cwmax, bool isDsss, ns3::AcIndex ac) [member function]
     cls.add_method('ConfigureDcf', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Dcf >', 'dcf'), param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('ns3::AcIndex', 'ac')], 
+                   [param('ns3::Ptr< ns3::Dcf >', 'dcf'), param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('bool', 'isDsss'), param('ns3::AcIndex', 'ac')], 
                    visibility='protected')
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('FinishConfigureStandard', 
@@ -8254,16 +8780,16 @@
     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]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::AddSupportedChannelWidth(uint32_t channelwidth) [member function]
     cls.add_method('AddSupportedChannelWidth', 
                    'void', 
-                   [param('uint32_t', 'width')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   [param('uint32_t', 'channelwidth')], 
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): int64_t ns3::WifiPhy::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
                    [param('int64_t', 'stream')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculatePlcpPreambleAndHeaderDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('CalculatePlcpPreambleAndHeaderDuration', 
                    'ns3::Time', 
@@ -8272,7 +8798,7 @@
     cls.add_method('CalculateSnr', 
                    'double', 
                    [param('ns3::WifiTxVector', 'txVector'), param('double', 'ber')], 
-                   is_pure_virtual=True, is_const=True, is_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) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
@@ -8285,12 +8811,31 @@
     cls.add_method('ConfigureStandard', 
                    'void', 
                    [param('ns3::WifiPhyStandard', 'standard')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::DbToRatio(double db) const [member function]
+    cls.add_method('DbToRatio', 
+                   'double', 
+                   [param('double', 'db')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::DbmToW(double dbm) const [member function]
+    cls.add_method('DbmToW', 
+                   'double', 
+                   [param('double', 'dbm')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DefineChannelNumber(uint16_t channelNumber, ns3::WifiPhyStandard standard, uint32_t frequency, uint32_t channelWidth) [member function]
+    cls.add_method('DefineChannelNumber', 
+                   'bool', 
+                   [param('uint16_t', 'channelNumber'), param('ns3::WifiPhyStandard', 'standard'), param('uint32_t', 'frequency'), param('uint32_t', 'channelWidth')])
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
     cls.add_method('GetBssMembershipSelector', 
                    'uint32_t', 
                    [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetCcaMode1Threshold() const [member function]
+    cls.add_method('GetCcaMode1Threshold', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::WifiPhy::GetChannel() const [member function]
     cls.add_method('GetChannel', 
                    'ns3::Ptr< ns3::WifiChannel >', 
@@ -8300,22 +8845,27 @@
     cls.add_method('GetChannelNumber', 
                    'uint16_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetChannelSwitchDelay() const [member function]
     cls.add_method('GetChannelSwitchDelay', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetChannelWidth() const [member function]
     cls.add_method('GetChannelWidth', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::NetDevice> ns3::WifiPhy::GetDevice() const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate11Mbps() [member function]
     cls.add_method('GetDsssRate11Mbps', 
                    'ns3::WifiMode', 
@@ -8336,6 +8886,16 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetEdThreshold() const [member function]
+    cls.add_method('GetEdThreshold', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetEdThresholdW() const [member function]
+    cls.add_method('GetEdThresholdW', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate12Mbps() [member function]
     cls.add_method('GetErpOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -8376,21 +8936,26 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::ErrorRateModel> ns3::WifiPhy::GetErrorRateModel() const [member function]
+    cls.add_method('GetErrorRateModel', 
+                   'ns3::Ptr< ns3::ErrorRateModel >', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetFrequency() const [member function]
     cls.add_method('GetFrequency', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGreenfield() const [member function]
     cls.add_method('GetGreenfield', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGuardInterval() const [member function]
     cls.add_method('GetGuardInterval', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs0() [member function]
     cls.add_method('GetHtMcs0', 
                    'ns3::WifiMode', 
@@ -8560,57 +9125,61 @@
     cls.add_method('GetLastRxStartTime', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
     cls.add_method('GetLdpc', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
     cls.add_method('GetMcs', 
                    'ns3::WifiMode', 
                    [param('uint8_t', 'mcs')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
     cls.add_method('GetMembershipSelectorModes', 
                    'ns3::WifiModeList', 
                    [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::MobilityModel> ns3::WifiPhy::GetMobility() [member function]
+    cls.add_method('GetMobility', 
+                   'ns3::Ptr< ns3::MobilityModel >', 
+                   [])
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
     cls.add_method('GetNBssMembershipSelectors', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
     cls.add_method('GetNMcs', 
                    'uint8_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
     cls.add_method('GetNModes', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNTxPower() const [member function]
     cls.add_method('GetNTxPower', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
     cls.add_method('GetNumberOfReceiveAntennas', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
     cls.add_method('GetNumberOfTransmitAntennas', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
     cls.add_method('GetOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -8779,46 +9348,66 @@
                    'ns3::Time', 
                    [param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetRxGain() const [member function]
+    cls.add_method('GetRxGain', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetRxNoiseFigure() const [member function]
+    cls.add_method('GetRxNoiseFigure', 
+                   'double', 
+                   [], 
+                   is_const=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)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiPhyStandard ns3::WifiPhy::GetStandard() const [member function]
+    cls.add_method('GetStandard', 
+                   'ns3::WifiPhyStandard', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
     cls.add_method('GetStateDuration', 
                    'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetStbc() const [member function]
     cls.add_method('GetStbc', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   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)
+                   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)
+                   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)
+                   is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxGain() const [member function]
+    cls.add_method('GetTxGain', 
+                   'double', 
+                   [], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
     cls.add_method('GetTxPowerEnd', 
                    'double', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerStart() const [member function]
     cls.add_method('GetTxPowerStart', 
                    'double', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::WifiPhy::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -8879,46 +9468,51 @@
                    'ns3::WifiMode', 
                    [param('ns3::WifiMode', 'payloadMode')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsMcsSupported(ns3::WifiMode mcs) const [member function]
+    cls.add_method('IsMcsSupported', 
+                   'bool', 
+                   [param('ns3::WifiMode', 'mcs')], 
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
     cls.add_method('IsModeSupported', 
                    'bool', 
                    [param('ns3::WifiMode', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateBusy() [member function]
     cls.add_method('IsStateBusy', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateCcaBusy() [member function]
     cls.add_method('IsStateCcaBusy', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateIdle() [member function]
     cls.add_method('IsStateIdle', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateRx() [member function]
     cls.add_method('IsStateRx', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSleep() [member function]
     cls.add_method('IsStateSleep', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSwitching() [member function]
     cls.add_method('IsStateSwitching', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateTx() [member function]
     cls.add_method('IsStateTx', 
                    'bool', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): static bool ns3::WifiPhy::IsValidTxVector(ns3::WifiTxVector txVector) [member function]
     cls.add_method('IsValidTxVector', 
                    'bool', 
@@ -8956,6 +9550,11 @@
     cls.add_method('NotifyTxEnd', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::RatioToDb(double ratio) const [member function]
+    cls.add_method('RatioToDb', 
+                   'double', 
+                   [param('double', 'ratio')], 
+                   is_const=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('RegisterListener', 
                    'void', 
@@ -8976,61 +9575,93 @@
                    '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::SetCcaMode1Threshold(double threshold) [member function]
+    cls.add_method('SetCcaMode1Threshold', 
+                   'void', 
+                   [param('double', 'threshold')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
                    'void', 
                    [param('uint16_t', 'id')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelWidth(uint32_t channelwidth) [member function]
     cls.add_method('SetChannelWidth', 
                    'void', 
                    [param('uint32_t', 'channelwidth')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetEdThreshold(double threshold) [member function]
+    cls.add_method('SetEdThreshold', 
+                   'void', 
+                   [param('double', 'threshold')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetErrorRateModel(ns3::Ptr<ns3::ErrorRateModel> rate) [member function]
+    cls.add_method('SetErrorRateModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::ErrorRateModel >', 'rate')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
     cls.add_method('SetFrequency', 
                    'void', 
                    [param('uint32_t', 'freq')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGreenfield(bool greenfield) [member function]
     cls.add_method('SetGreenfield', 
                    'void', 
                    [param('bool', 'greenfield')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool guardInterval) [member function]
     cls.add_method('SetGuardInterval', 
                    'void', 
                    [param('bool', 'guardInterval')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool ldpc) [member function]
     cls.add_method('SetLdpc', 
                    'void', 
                    [param('bool', 'ldpc')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> mobility) [member function]
+    cls.add_method('SetMobility', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MobilityModel >', 'mobility')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNTxPower(uint32_t n) [member function]
+    cls.add_method('SetNTxPower', 
+                   'void', 
+                   [param('uint32_t', 'n')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
     cls.add_method('SetNumberOfReceiveAntennas', 
                    'void', 
                    [param('uint32_t', 'rx')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
     cls.add_method('SetNumberOfTransmitAntennas', 
                    'void', 
                    [param('uint32_t', 'tx')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, double, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveOkCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, double, ns3::WifiTxVector, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetReceiveOkCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiTxVector, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetRxGain(double gain) [member function]
+    cls.add_method('SetRxGain', 
+                   'void', 
+                   [param('double', 'gain')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetRxNoiseFigure(double noiseFigureDb) [member function]
+    cls.add_method('SetRxNoiseFigure', 
+                   'void', 
+                   [param('double', 'noiseFigureDb')])
     ## 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)
+                   is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetSleepMode() [member function]
     cls.add_method('SetSleepMode', 
                    'void', 
@@ -9040,12 +9671,64 @@
     cls.add_method('SetStbc', 
                    'void', 
                    [param('bool', 'stbc')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxGain(double gain) [member function]
+    cls.add_method('SetTxGain', 
+                   'void', 
+                   [param('double', 'gain')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxPowerEnd(double end) [member function]
+    cls.add_method('SetTxPowerEnd', 
+                   'void', 
+                   [param('double', 'end')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetTxPowerStart(double start) [member function]
+    cls.add_method('SetTxPowerStart', 
+                   'void', 
+                   [param('double', 'start')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('UnregisterListener', 
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::WToDbm(double w) const [member function]
+    cls.add_method('WToDbm', 
+                   'double', 
+                   [param('double', 'w')], 
+                   is_const=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DoChannelSwitch(uint16_t id) [member function]
+    cls.add_method('DoChannelSwitch', 
+                   'bool', 
+                   [param('uint16_t', 'id')], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::DoFrequencySwitch(uint32_t frequency) [member function]
+    cls.add_method('DoFrequencySwitch', 
+                   'bool', 
+                   [param('uint32_t', 'frequency')], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetPowerDbm(uint8_t power) const [member function]
+    cls.add_method('GetPowerDbm', 
+                   'double', 
+                   [param('uint8_t', 'power')], 
+                   is_const=True, visibility='protected')
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureChannelForStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('ConfigureChannelForStandard', 
+                   'void', 
+                   [param('ns3::WifiPhyStandard', 'standard')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureDefaultsForStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('ConfigureDefaultsForStandard', 
+                   'void', 
+                   [param('ns3::WifiPhyStandard', 'standard')], 
+                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3WifiPhyStateHelper_methods(root_module, cls):
@@ -9107,18 +9790,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>, double, bool, 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, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::empty, 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> packet, double snr, bool isEndOfFrame) [member function]
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SwitchFromRxEndError(ns3::Ptr<ns3::Packet> packet, double snr) [member function]
     cls.add_method('SwitchFromRxEndError', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'snr'), param('bool', 'isEndOfFrame')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'snr')])
     ## 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', 
@@ -9474,7 +10157,8 @@
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetHtSupported(bool enable) [member function]
     cls.add_method('SetHtSupported', 
                    'void', 
-                   [param('bool', 'enable')])
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetMaxSlrc(uint32_t maxSlrc) [member function]
     cls.add_method('SetMaxSlrc', 
                    'void', 
@@ -9506,7 +10190,8 @@
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetVhtSupported(bool enable) [member function]
     cls.add_method('SetVhtSupported', 
                    'void', 
-                   [param('bool', 'enable')])
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
     cls.add_method('SetupMac', 
                    'void', 
@@ -9793,6 +10478,79 @@
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3WifiSpectrumPhyInterface_methods(root_module, cls):
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): static ns3::TypeId ns3::WifiSpectrumPhyInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): ns3::WifiSpectrumPhyInterface::WifiSpectrumPhyInterface() [constructor]
+    cls.add_constructor([])
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): void ns3::WifiSpectrumPhyInterface::SetSpectrumWifiPhy(ns3::Ptr<ns3::SpectrumWifiPhy> phy) [member function]
+    cls.add_method('SetSpectrumWifiPhy', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumWifiPhy >', 'phy')])
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): ns3::Ptr<ns3::NetDevice> ns3::WifiSpectrumPhyInterface::GetDevice() const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): void ns3::WifiSpectrumPhyInterface::SetDevice(ns3::Ptr<ns3::NetDevice> d) [member function]
+    cls.add_method('SetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'd')], 
+                   is_virtual=True)
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): void ns3::WifiSpectrumPhyInterface::SetMobility(ns3::Ptr<ns3::MobilityModel> m) [member function]
+    cls.add_method('SetMobility', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MobilityModel >', 'm')], 
+                   is_virtual=True)
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): ns3::Ptr<ns3::MobilityModel> ns3::WifiSpectrumPhyInterface::GetMobility() [member function]
+    cls.add_method('GetMobility', 
+                   'ns3::Ptr< ns3::MobilityModel >', 
+                   [], 
+                   is_virtual=True)
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): void ns3::WifiSpectrumPhyInterface::SetChannel(ns3::Ptr<ns3::SpectrumChannel> c) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumChannel >', 'c')], 
+                   is_virtual=True)
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): ns3::Ptr<ns3::SpectrumModel const> ns3::WifiSpectrumPhyInterface::GetRxSpectrumModel() const [member function]
+    cls.add_method('GetRxSpectrumModel', 
+                   'ns3::Ptr< ns3::SpectrumModel const >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): ns3::Ptr<ns3::AntennaModel> ns3::WifiSpectrumPhyInterface::GetRxAntenna() [member function]
+    cls.add_method('GetRxAntenna', 
+                   'ns3::Ptr< ns3::AntennaModel >', 
+                   [], 
+                   is_virtual=True)
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): void ns3::WifiSpectrumPhyInterface::StartRx(ns3::Ptr<ns3::SpectrumSignalParameters> params) [member function]
+    cls.add_method('StartRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumSignalParameters >', 'params')], 
+                   is_virtual=True)
+    ## wifi-spectrum-phy-interface.h (module 'wifi'): void ns3::WifiSpectrumPhyInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3WifiSpectrumSignalParameters_methods(root_module, cls):
+    ## wifi-spectrum-signal-parameters.h (module 'wifi'): ns3::WifiSpectrumSignalParameters::WifiSpectrumSignalParameters() [constructor]
+    cls.add_constructor([])
+    ## wifi-spectrum-signal-parameters.h (module 'wifi'): ns3::WifiSpectrumSignalParameters::WifiSpectrumSignalParameters(ns3::WifiSpectrumSignalParameters const & p) [copy constructor]
+    cls.add_constructor([param('ns3::WifiSpectrumSignalParameters const &', 'p')])
+    ## wifi-spectrum-signal-parameters.h (module 'wifi'): ns3::Ptr<ns3::SpectrumSignalParameters> ns3::WifiSpectrumSignalParameters::Copy() [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::SpectrumSignalParameters >', 
+                   [], 
+                   is_virtual=True)
+    ## wifi-spectrum-signal-parameters.h (module 'wifi'): ns3::WifiSpectrumSignalParameters::packet [variable]
+    cls.add_instance_attribute('packet', 'ns3::Ptr< ns3::Packet >', is_const=False)
+    return
+
 def register_Ns3WifiTxCurrentModel_methods(root_module, cls):
     ## wifi-tx-current-model.h (module 'wifi'): ns3::WifiTxCurrentModel::WifiTxCurrentModel(ns3::WifiTxCurrentModel const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiTxCurrentModel const &', 'arg0')])
@@ -9820,260 +10578,16 @@
     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::WifiTxVector txVector, double ber) const [member function]
-    cls.add_method('CalculateSnr', 
-                   'double', 
-                   [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', 
-                   'void', 
-                   [param('ns3::WifiPhyStandard', 'standard')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
-    cls.add_method('GetBssMembershipSelector', 
-                   'uint32_t', 
-                   [param('uint32_t', 'selector')], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetCcaMode1Threshold() const [member function]
-    cls.add_method('GetCcaMode1Threshold', 
-                   'double', 
-                   [], 
-                   is_const=True)
     ## yans-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::YansWifiPhy::GetChannel() const [member function]
     cls.add_method('GetChannel', 
                    'ns3::Ptr< ns3::WifiChannel >', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetChannelFrequencyMhz() const [member function]
-    cls.add_method('GetChannelFrequencyMhz', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint16_t ns3::YansWifiPhy::GetChannelNumber() const [member function]
-    cls.add_method('GetChannelNumber', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Time ns3::YansWifiPhy::GetChannelSwitchDelay() const [member function]
-    cls.add_method('GetChannelSwitchDelay', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetChannelWidth() const [member function]
-    cls.add_method('GetChannelWidth', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Time ns3::YansWifiPhy::GetDelayUntilIdle() [member function]
-    cls.add_method('GetDelayUntilIdle', 
-                   'ns3::Time', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::NetDevice> ns3::YansWifiPhy::GetDevice() const [member function]
-    cls.add_method('GetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetEdThreshold() const [member function]
-    cls.add_method('GetEdThreshold', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::ErrorRateModel> ns3::YansWifiPhy::GetErrorRateModel() const [member function]
-    cls.add_method('GetErrorRateModel', 
-                   'ns3::Ptr< ns3::ErrorRateModel >', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetFrequency() const [member function]
-    cls.add_method('GetFrequency', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetGreenfield() const [member function]
-    cls.add_method('GetGreenfield', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetGuardInterval() const [member function]
-    cls.add_method('GetGuardInterval', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Time ns3::YansWifiPhy::GetLastRxStartTime() const [member function]
-    cls.add_method('GetLastRxStartTime', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetLdpc() const [member function]
-    cls.add_method('GetLdpc', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::YansWifiPhy::GetMcs(uint8_t mcs) const [member function]
-    cls.add_method('GetMcs', 
-                   'ns3::WifiMode', 
-                   [param('uint8_t', 'mcs')], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::YansWifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
-    cls.add_method('GetMembershipSelectorModes', 
-                   'ns3::WifiModeList', 
-                   [param('uint32_t', 'selector')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::MobilityModel> ns3::YansWifiPhy::GetMobility() [member function]
-    cls.add_method('GetMobility', 
-                   'ns3::Ptr< ns3::MobilityModel >', 
-                   [])
-    ## yans-wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::YansWifiPhy::GetMode(uint32_t mode) const [member function]
-    cls.add_method('GetMode', 
-                   'ns3::WifiMode', 
-                   [param('uint32_t', 'mode')], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNBssMembershipSelectors() const [member function]
-    cls.add_method('GetNBssMembershipSelectors', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint8_t ns3::YansWifiPhy::GetNMcs() const [member function]
-    cls.add_method('GetNMcs', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNModes() const [member function]
-    cls.add_method('GetNModes', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNTxPower() const [member function]
-    cls.add_method('GetNTxPower', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNumberOfReceiveAntennas() const [member function]
-    cls.add_method('GetNumberOfReceiveAntennas', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNumberOfTransmitAntennas() const [member function]
-    cls.add_method('GetNumberOfTransmitAntennas', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetRxGain() const [member function]
-    cls.add_method('GetRxGain', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetRxNoiseFigure() const [member function]
-    cls.add_method('GetRxNoiseFigure', 
-                   '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', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetStbc() const [member function]
-    cls.add_method('GetStbc', 
-                   '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', 
-                   [], 
-                   is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetTxPowerEnd() const [member function]
-    cls.add_method('GetTxPowerEnd', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetTxPowerStart() const [member function]
-    cls.add_method('GetTxPowerStart', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::YansWifiPhy::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsMcsSupported(ns3::WifiMode mcs) [member function]
-    cls.add_method('IsMcsSupported', 
-                   'bool', 
-                   [param('ns3::WifiMode', 'mcs')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
-    cls.add_method('IsModeSupported', 
-                   'bool', 
-                   [param('ns3::WifiMode', 'mode')], 
-                   is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateBusy() [member function]
-    cls.add_method('IsStateBusy', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateCcaBusy() [member function]
-    cls.add_method('IsStateCcaBusy', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateIdle() [member function]
-    cls.add_method('IsStateIdle', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateRx() [member function]
-    cls.add_method('IsStateRx', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateSleep() [member function]
-    cls.add_method('IsStateSleep', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateSwitching() [member function]
-    cls.add_method('IsStateSwitching', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::IsStateTx() [member function]
-    cls.add_method('IsStateTx', 
-                   'bool', 
-                   [], 
-                   is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('RegisterListener', 
                    'void', 
@@ -10094,119 +10608,25 @@
                    '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', 
-                   'void', 
-                   [param('double', 'threshold')])
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetChannel(ns3::Ptr<ns3::YansWifiChannel> channel) [member function]
     cls.add_method('SetChannel', 
                    'void', 
                    [param('ns3::Ptr< ns3::YansWifiChannel >', 'channel')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetChannelNumber(uint16_t id) [member function]
-    cls.add_method('SetChannelNumber', 
-                   'void', 
-                   [param('uint16_t', 'id')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetChannelWidth(uint32_t channelwidth) [member function]
-    cls.add_method('SetChannelWidth', 
-                   'void', 
-                   [param('uint32_t', 'channelwidth')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('SetDevice', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetEdThreshold(double threshold) [member function]
-    cls.add_method('SetEdThreshold', 
-                   'void', 
-                   [param('double', 'threshold')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetErrorRateModel(ns3::Ptr<ns3::ErrorRateModel> rate) [member function]
-    cls.add_method('SetErrorRateModel', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::ErrorRateModel >', 'rate')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetFrequency(uint32_t freq) [member function]
-    cls.add_method('SetFrequency', 
-                   'void', 
-                   [param('uint32_t', 'freq')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetGreenfield(bool greenfield) [member function]
-    cls.add_method('SetGreenfield', 
-                   'void', 
-                   [param('bool', 'greenfield')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetGuardInterval(bool guardInterval) [member function]
-    cls.add_method('SetGuardInterval', 
-                   'void', 
-                   [param('bool', 'guardInterval')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetLdpc(bool ldpc) [member function]
-    cls.add_method('SetLdpc', 
-                   'void', 
-                   [param('bool', 'ldpc')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> mobility) [member function]
-    cls.add_method('SetMobility', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::MobilityModel >', 'mobility')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetNTxPower(uint32_t n) [member function]
-    cls.add_method('SetNTxPower', 
-                   'void', 
-                   [param('uint32_t', 'n')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
-    cls.add_method('SetNumberOfReceiveAntennas', 
-                   'void', 
-                   [param('uint32_t', 'rx')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
-    cls.add_method('SetNumberOfTransmitAntennas', 
-                   '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>, double, bool, 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, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::empty, 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', 
                    '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_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetRxGain(double gain) [member function]
-    cls.add_method('SetRxGain', 
-                   'void', 
-                   [param('double', 'gain')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetRxNoiseFigure(double noiseFigureDb) [member function]
-    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', 
                    [], 
                    is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetStbc(bool stbc) [member function]
-    cls.add_method('SetStbc', 
-                   'void', 
-                   [param('bool', 'stbc')], 
-                   is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetTxGain(double gain) [member function]
-    cls.add_method('SetTxGain', 
-                   'void', 
-                   [param('double', 'gain')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetTxPowerEnd(double end) [member function]
-    cls.add_method('SetTxPowerEnd', 
-                   'void', 
-                   [param('double', 'end')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetTxPowerStart(double start) [member function]
-    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::mpduType mpdutype, ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
     cls.add_method('StartReceivePacket', 
                    'void', 
@@ -10220,16 +10640,21 @@
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::DoChannelSwitch(uint16_t id) [member function]
+    cls.add_method('DoChannelSwitch', 
+                   'bool', 
+                   [param('uint16_t', 'id')], 
+                   visibility='protected', is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
                    [], 
-                   visibility='private', is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::DoInitialize() [member function]
-    cls.add_method('DoInitialize', 
-                   'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
+                   visibility='protected', is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::DoFrequencySwitch(uint32_t frequency) [member function]
+    cls.add_method('DoFrequencySwitch', 
+                   'bool', 
+                   [param('uint32_t', 'frequency')], 
+                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3ZetaRandomVariable_methods(root_module, cls):
@@ -10313,6 +10738,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## aarf-wifi-manager.h (module 'wifi'): void ns3::AarfWifiManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## aarf-wifi-manager.h (module 'wifi'): void ns3::AarfWifiManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## aarf-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::AarfWifiManager::DoCreateStation() const [member function]
     cls.add_method('DoCreateStation', 
                    'ns3::WifiRemoteStation *', 
@@ -10380,6 +10815,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## aarfcd-wifi-manager.h (module 'wifi'): void ns3::AarfcdWifiManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## aarfcd-wifi-manager.h (module 'wifi'): void ns3::AarfcdWifiManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## aarfcd-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::AarfcdWifiManager::DoCreateStation() const [member function]
     cls.add_method('DoCreateStation', 
                    'ns3::WifiRemoteStation *', 
@@ -10525,6 +10970,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## amrr-wifi-manager.h (module 'wifi'): void ns3::AmrrWifiManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## amrr-wifi-manager.h (module 'wifi'): void ns3::AmrrWifiManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## amrr-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::AmrrWifiManager::DoCreateStation() const [member function]
     cls.add_method('DoCreateStation', 
                    'ns3::WifiRemoteStation *', 
@@ -10646,6 +11101,23 @@
                    [param('ns3::Mac48Address', 'to')])
     return
 
+def register_Ns3AntennaModel_methods(root_module, cls):
+    ## antenna-model.h (module 'antenna'): ns3::AntennaModel::AntennaModel(ns3::AntennaModel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AntennaModel const &', 'arg0')])
+    ## antenna-model.h (module 'antenna'): ns3::AntennaModel::AntennaModel() [constructor]
+    cls.add_constructor([])
+    ## antenna-model.h (module 'antenna'): double ns3::AntennaModel::GetGainDb(ns3::Angles a) [member function]
+    cls.add_method('GetGainDb', 
+                   'double', 
+                   [param('ns3::Angles', 'a')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## antenna-model.h (module 'antenna'): static ns3::TypeId ns3::AntennaModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3AparfWifiManager_methods(root_module, cls):
     ## aparf-wifi-manager.h (module 'wifi'): ns3::AparfWifiManager::AparfWifiManager(ns3::AparfWifiManager const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::AparfWifiManager const &', 'arg0')])
@@ -10656,6 +11128,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetupPhy', 
                    'void', 
@@ -10728,6 +11210,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## arf-wifi-manager.h (module 'wifi'): void ns3::ArfWifiManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## arf-wifi-manager.h (module 'wifi'): void ns3::ArfWifiManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## arf-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::ArfWifiManager::DoCreateStation() const [member function]
     cls.add_method('DoCreateStation', 
                    'ns3::WifiRemoteStation *', 
@@ -11040,6 +11532,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## cara-wifi-manager.h (module 'wifi'): void ns3::CaraWifiManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## cara-wifi-manager.h (module 'wifi'): void ns3::CaraWifiManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## cara-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::CaraWifiManager::DoCreateStation() const [member function]
     cls.add_method('DoCreateStation', 
                    'ns3::WifiRemoteStation *', 
@@ -11565,6 +12067,11 @@
                    'uint32_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): ns3::Time ns3::Dcf::GetTxopLimit() const [member function]
+    cls.add_method('GetTxopLimit', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## dcf.h (module 'wifi'): static ns3::TypeId ns3::Dcf::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -11585,6 +12092,11 @@
                    'void', 
                    [param('uint32_t', 'minCw')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): void ns3::Dcf::SetTxopLimit(ns3::Time txopLimit) [member function]
+    cls.add_method('SetTxopLimit', 
+                   'void', 
+                   [param('ns3::Time', 'txopLimit')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3DeterministicRandomVariable_methods(root_module, cls):
@@ -11658,37 +12170,435 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
-def register_Ns3DoubleValue_methods(root_module, cls):
-    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue() [constructor]
+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_Ns3DsssParameterSet_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet::DsssParameterSet(ns3::DsssParameterSet const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DsssParameterSet const &', 'arg0')])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet::DsssParameterSet() [constructor]
+    cls.add_constructor([])
+    ## dsss-parameter-set.h (module 'wifi'): uint8_t ns3::DsssParameterSet::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)
+    ## dsss-parameter-set.h (module 'wifi'): ns3::WifiInformationElementId ns3::DsssParameterSet::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): uint8_t ns3::DsssParameterSet::GetCurrentChannel() const [member function]
+    cls.add_method('GetCurrentChannel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): uint8_t ns3::DsssParameterSet::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): uint16_t ns3::DsssParameterSet::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): ns3::Buffer::Iterator ns3::DsssParameterSet::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSet::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSet::SetCurrentChannel(uint8_t currentChannel) [member function]
+    cls.add_method('SetCurrentChannel', 
+                   'void', 
+                   [param('uint8_t', 'currentChannel')])
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSet::SetDsssSupported(uint8_t DsssSupported) [member function]
+    cls.add_method('SetDsssSupported', 
+                   'void', 
+                   [param('uint8_t', 'DsssSupported')])
+    return
+
+def register_Ns3DsssParameterSetChecker_methods(root_module, cls):
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetChecker::DsssParameterSetChecker() [constructor]
+    cls.add_constructor([])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetChecker::DsssParameterSetChecker(ns3::DsssParameterSetChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DsssParameterSetChecker const &', 'arg0')])
+    return
+
+def register_Ns3DsssParameterSetValue_methods(root_module, cls):
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue::DsssParameterSetValue() [constructor]
+    cls.add_constructor([])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue::DsssParameterSetValue(ns3::DsssParameterSetValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DsssParameterSetValue const &', 'arg0')])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSetValue::DsssParameterSetValue(ns3::DsssParameterSet const & value) [constructor]
+    cls.add_constructor([param('ns3::DsssParameterSet const &', 'value')])
+    ## dsss-parameter-set.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::DsssParameterSetValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## dsss-parameter-set.h (module 'wifi'): bool ns3::DsssParameterSetValue::DeserializeFromString(std::string value, ns3::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)
+    ## dsss-parameter-set.h (module 'wifi'): ns3::DsssParameterSet ns3::DsssParameterSetValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::DsssParameterSet', 
+                   [], 
+                   is_const=True)
+    ## dsss-parameter-set.h (module 'wifi'): std::string ns3::DsssParameterSetValue::SerializeToString(ns3::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)
+    ## dsss-parameter-set.h (module 'wifi'): void ns3::DsssParameterSetValue::Set(ns3::DsssParameterSet const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::DsssParameterSet const &', 'value')])
+    return
+
+def register_Ns3EdcaParameterSet_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet::EdcaParameterSet(ns3::EdcaParameterSet const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSet const &', 'arg0')])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet::EdcaParameterSet() [constructor]
+    cls.add_constructor([])
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::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)
+    ## edca-parameter-set.h (module 'wifi'): ns3::WifiInformationElementId ns3::EdcaParameterSet::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeAci() const [member function]
+    cls.add_method('GetBeAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeAcm() const [member function]
+    cls.add_method('GetBeAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeAifsn() const [member function]
+    cls.add_method('GetBeAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeCWmax() const [member function]
+    cls.add_method('GetBeCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBeCWmin() const [member function]
+    cls.add_method('GetBeCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetBeTXOPLimit() const [member function]
+    cls.add_method('GetBeTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkAci() const [member function]
+    cls.add_method('GetBkAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkAcm() const [member function]
+    cls.add_method('GetBkAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkAifsn() const [member function]
+    cls.add_method('GetBkAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkCWmax() const [member function]
+    cls.add_method('GetBkCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetBkCWmin() const [member function]
+    cls.add_method('GetBkCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetBkTXOPLimit() const [member function]
+    cls.add_method('GetBkTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetQosInfo() const [member function]
+    cls.add_method('GetQosInfo', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViAci() const [member function]
+    cls.add_method('GetViAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViAcm() const [member function]
+    cls.add_method('GetViAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViAifsn() const [member function]
+    cls.add_method('GetViAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViCWmax() const [member function]
+    cls.add_method('GetViCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetViCWmin() const [member function]
+    cls.add_method('GetViCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetViTXOPLimit() const [member function]
+    cls.add_method('GetViTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoAci() const [member function]
+    cls.add_method('GetVoAci', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoAcm() const [member function]
+    cls.add_method('GetVoAcm', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoAifsn() const [member function]
+    cls.add_method('GetVoAifsn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoCWmax() const [member function]
+    cls.add_method('GetVoCWmax', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint8_t ns3::EdcaParameterSet::GetVoCWmin() const [member function]
+    cls.add_method('GetVoCWmin', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): uint16_t ns3::EdcaParameterSet::GetVoTXOPLimit() const [member function]
+    cls.add_method('GetVoTXOPLimit', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): ns3::Buffer::Iterator ns3::EdcaParameterSet::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeAci(uint8_t aci) [member function]
+    cls.add_method('SetBeAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeAcm(uint8_t acm) [member function]
+    cls.add_method('SetBeAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetBeAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetBeCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetBeCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBeTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetBeTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkAci(uint8_t aci) [member function]
+    cls.add_method('SetBkAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkAcm(uint8_t acm) [member function]
+    cls.add_method('SetBkAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetBkAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetBkCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetBkCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetBkTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetBkTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetQosInfo(uint8_t qosInfo) [member function]
+    cls.add_method('SetQosInfo', 
+                   'void', 
+                   [param('uint8_t', 'qosInfo')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetQosSupported(uint8_t qosSupported) [member function]
+    cls.add_method('SetQosSupported', 
+                   'void', 
+                   [param('uint8_t', 'qosSupported')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViAci(uint8_t aci) [member function]
+    cls.add_method('SetViAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViAcm(uint8_t acm) [member function]
+    cls.add_method('SetViAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetViAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetViCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetViCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetViTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetViTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoAci(uint8_t aci) [member function]
+    cls.add_method('SetVoAci', 
+                   'void', 
+                   [param('uint8_t', 'aci')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoAcm(uint8_t acm) [member function]
+    cls.add_method('SetVoAcm', 
+                   'void', 
+                   [param('uint8_t', 'acm')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoAifsn(uint8_t aifsn) [member function]
+    cls.add_method('SetVoAifsn', 
+                   'void', 
+                   [param('uint8_t', 'aifsn')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoCWmax(uint8_t cwMax) [member function]
+    cls.add_method('SetVoCWmax', 
+                   'void', 
+                   [param('uint8_t', 'cwMax')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoCWmin(uint8_t cwMin) [member function]
+    cls.add_method('SetVoCWmin', 
+                   'void', 
+                   [param('uint8_t', 'cwMin')])
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSet::SetVoTXOPLimit(uint16_t txop) [member function]
+    cls.add_method('SetVoTXOPLimit', 
+                   'void', 
+                   [param('uint16_t', 'txop')])
+    return
+
+def register_Ns3EdcaParameterSetChecker_methods(root_module, cls):
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetChecker::EdcaParameterSetChecker() [constructor]
+    cls.add_constructor([])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetChecker::EdcaParameterSetChecker(ns3::EdcaParameterSetChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSetChecker const &', 'arg0')])
+    return
+
+def register_Ns3EdcaParameterSetValue_methods(root_module, cls):
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue::EdcaParameterSetValue() [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]
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue::EdcaParameterSetValue(ns3::EdcaParameterSetValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSetValue const &', 'arg0')])
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSetValue::EdcaParameterSetValue(ns3::EdcaParameterSet const & value) [constructor]
+    cls.add_constructor([param('ns3::EdcaParameterSet const &', 'value')])
+    ## edca-parameter-set.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::EdcaParameterSetValue::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]
+    ## edca-parameter-set.h (module 'wifi'): bool ns3::EdcaParameterSetValue::DeserializeFromString(std::string value, ns3::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]
+    ## edca-parameter-set.h (module 'wifi'): ns3::EdcaParameterSet ns3::EdcaParameterSetValue::Get() const [member function]
     cls.add_method('Get', 
-                   'double', 
+                   'ns3::EdcaParameterSet', 
                    [], 
                    is_const=True)
-    ## double.h (module 'core'): std::string ns3::DoubleValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    ## edca-parameter-set.h (module 'wifi'): std::string ns3::EdcaParameterSetValue::SerializeToString(ns3::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]
+    ## edca-parameter-set.h (module 'wifi'): void ns3::EdcaParameterSetValue::Set(ns3::EdcaParameterSet const & value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('double const &', 'value')])
+                   [param('ns3::EdcaParameterSet const &', 'value')])
     return
 
 def register_Ns3EdcaTxopN_methods(root_module, cls):
@@ -11759,6 +12669,11 @@
                    'void', 
                    [param('uint32_t', 'aifsn')], 
                    is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTxopLimit(ns3::Time txopLimit) [member function]
+    cls.add_method('SetTxopLimit', 
+                   'void', 
+                   [param('ns3::Time', 'txopLimit')], 
+                   is_virtual=True)
     ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetMinCw() const [member function]
     cls.add_method('GetMinCw', 
                    'uint32_t', 
@@ -11774,6 +12689,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): ns3::Time ns3::EdcaTxopN::GetTxopLimit() const [member function]
+    cls.add_method('GetTxopLimit', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::MacLow> ns3::EdcaTxopN::Low() [member function]
     cls.add_method('Low', 
                    'ns3::Ptr< ns3::MacLow >', 
@@ -11788,10 +12708,11 @@
                    '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]
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetBaAgreementExists(ns3::Mac48Address address, uint8_t tid) const [member function]
     cls.add_method('GetBaAgreementExists', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')])
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')], 
+                   is_const=True)
     ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNOutstandingPacketsInBa(ns3::Mac48Address address, uint8_t tid) [member function]
     cls.add_method('GetNOutstandingPacketsInBa', 
                    'uint32_t', 
@@ -11866,6 +12787,10 @@
     cls.add_method('MissedAck', 
                    'void', 
                    [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::StartNextFragment() [member function]
+    cls.add_method('StartNextFragment', 
+                   'void', 
+                   [])
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::StartNext() [member function]
     cls.add_method('StartNext', 
                    'void', 
@@ -11886,14 +12811,14 @@
     cls.add_method('StartAccessIfNeeded', 
                    'void', 
                    [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRtsRetransmission() [member function]
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRtsRetransmission(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
     cls.add_method('NeedRtsRetransmission', 
                    'bool', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedDataRetransmission() [member function]
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedDataRetransmission(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
     cls.add_method('NeedDataRetransmission', 
                    'bool', 
-                   [])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
     ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedBarRetransmission() [member function]
     cls.add_method('NeedBarRetransmission', 
                    'bool', 
@@ -11973,10 +12898,11 @@
     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(ns3::Mac48Address dest) [member function]
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetAmpduExist(ns3::Mac48Address dest) const [member function]
     cls.add_method('GetAmpduExist', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'dest')])
+                   [param('ns3::Mac48Address', 'dest')], 
+                   is_const=True)
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAmpduExist(ns3::Mac48Address dest, bool enableAmpdu) [member function]
     cls.add_method('SetAmpduExist', 
                    'void', 
@@ -12050,6 +12976,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -13892,6 +14882,11 @@
     cls.add_method('AggregateToAmpdu', 
                    'ns3::Ptr< ns3::Packet >', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const', 'hdr')])
+    ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::CalculateOverallTxTime(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr, ns3::MacLowTransmissionParameters const & params) const [member function]
+    cls.add_method('CalculateOverallTxTime', 
+                   'ns3::Time', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr'), param('ns3::MacLowTransmissionParameters const &', 'params')], 
+                   is_const=True)
     ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::CalculateTransmissionTime(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr, ns3::MacLowTransmissionParameters const & parameters) const [member function]
     cls.add_method('CalculateTransmissionTime', 
                    'ns3::Time', 
@@ -13948,6 +14943,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## mac-low.h (module 'wifi'): ns3::WifiTxVector ns3::MacLow::GetDataTxVector(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr) const [member function]
+    cls.add_method('GetDataTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr')], 
+                   is_const=True, is_virtual=True)
     ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::MacLow::GetPhy() const [member function]
     cls.add_method('GetPhy', 
                    'ns3::Ptr< ns3::WifiPhy >', 
@@ -13991,10 +14991,10 @@
     cls.add_method('NotifySwitchingStartNow', 
                    'void', 
                    [param('ns3::Time', 'duration')])
-    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveError(ns3::Ptr<ns3::Packet> packet, double rxSnr, bool isEndOfFrame) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveError(ns3::Ptr<ns3::Packet> packet, double rxSnr) [member function]
     cls.add_method('ReceiveError', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxSnr'), param('bool', 'isEndOfFrame')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxSnr')])
     ## 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', 
@@ -14081,11 +15081,6 @@
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet const >', 'peekedPacket'), param('ns3::WifiMacHeader', 'peekedHdr'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('uint16_t', 'size')], 
                    is_const=True)
-    ## mac-low.h (module 'wifi'): ns3::WifiTxVector ns3::MacLow::GetDataTxVector(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr) const [member function]
-    cls.add_method('GetDataTxVector', 
-                   'ns3::WifiTxVector', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr')], 
-                   is_const=True, visibility='protected', is_virtual=True)
     ## mac-low.h (module 'wifi'): void ns3::MacLow::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -14272,6 +15267,16 @@
     cls.add_method('InitSampleTable', 
                    'void', 
                    [param('ns3::MinstrelWifiRemoteStation *', 'station')])
+    ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
     cls.add_method('SetupMac', 
                    'void', 
@@ -14740,16 +15745,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -14777,35 +15797,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -15090,6 +16105,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## onoe-wifi-manager.h (module 'wifi'): void ns3::OnoeWifiManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## onoe-wifi-manager.h (module 'wifi'): void ns3::OnoeWifiManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## onoe-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::OnoeWifiManager::DoCreateStation() const [member function]
     cls.add_method('DoCreateStation', 
                    'ns3::WifiRemoteStation *', 
@@ -15398,6 +16423,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetupPhy', 
                    'void', 
@@ -15474,6 +16509,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
@@ -15818,6 +16858,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetDsssSupported(bool enable) [member function]
+    cls.add_method('SetDsssSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): bool ns3::RegularWifiMac::GetDsssSupported() const [member function]
+    cls.add_method('GetDsssSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
     return
 
 def register_Ns3RraaWifiManager_methods(root_module, cls):
@@ -15830,6 +16880,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## rraa-wifi-manager.h (module 'wifi'): void ns3::RraaWifiManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## rraa-wifi-manager.h (module 'wifi'): void ns3::RraaWifiManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
     ## rraa-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::RraaWifiManager::DoCreateStation() const [member function]
     cls.add_method('DoCreateStation', 
                    'ns3::WifiRemoteStation *', 
@@ -15892,6 +16952,172 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3SpectrumChannel_methods(root_module, cls):
+    ## spectrum-channel.h (module 'spectrum'): ns3::SpectrumChannel::SpectrumChannel() [constructor]
+    cls.add_constructor([])
+    ## spectrum-channel.h (module 'spectrum'): ns3::SpectrumChannel::SpectrumChannel(ns3::SpectrumChannel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SpectrumChannel const &', 'arg0')])
+    ## spectrum-channel.h (module 'spectrum'): void ns3::SpectrumChannel::AddPropagationLossModel(ns3::Ptr<ns3::PropagationLossModel> loss) [member function]
+    cls.add_method('AddPropagationLossModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PropagationLossModel >', 'loss')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-channel.h (module 'spectrum'): void ns3::SpectrumChannel::AddRx(ns3::Ptr<ns3::SpectrumPhy> phy) [member function]
+    cls.add_method('AddRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumPhy >', 'phy')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-channel.h (module 'spectrum'): void ns3::SpectrumChannel::AddSpectrumPropagationLossModel(ns3::Ptr<ns3::SpectrumPropagationLossModel> loss) [member function]
+    cls.add_method('AddSpectrumPropagationLossModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumPropagationLossModel >', 'loss')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-channel.h (module 'spectrum'): static ns3::TypeId ns3::SpectrumChannel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## spectrum-channel.h (module 'spectrum'): void ns3::SpectrumChannel::SetPropagationDelayModel(ns3::Ptr<ns3::PropagationDelayModel> delay) [member function]
+    cls.add_method('SetPropagationDelayModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PropagationDelayModel >', 'delay')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-channel.h (module 'spectrum'): void ns3::SpectrumChannel::StartTx(ns3::Ptr<ns3::SpectrumSignalParameters> params) [member function]
+    cls.add_method('StartTx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumSignalParameters >', 'params')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3SpectrumWifiPhy_methods(root_module, cls):
+    ## spectrum-wifi-phy.h (module 'wifi'): ns3::SpectrumWifiPhy::SpectrumWifiPhy(ns3::SpectrumWifiPhy const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SpectrumWifiPhy const &', 'arg0')])
+    ## spectrum-wifi-phy.h (module 'wifi'): ns3::SpectrumWifiPhy::SpectrumWifiPhy() [constructor]
+    cls.add_constructor([])
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::AddOperationalChannel(uint16_t channelNumber) [member function]
+    cls.add_method('AddOperationalChannel', 
+                   'void', 
+                   [param('uint16_t', 'channelNumber')])
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::ClearOperationalChannelList() [member function]
+    cls.add_method('ClearOperationalChannelList', 
+                   'void', 
+                   [])
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::CreateWifiSpectrumPhyInterface(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('CreateWifiSpectrumPhyInterface', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## spectrum-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::SpectrumWifiPhy::GetChannel() const [member function]
+    cls.add_method('GetChannel', 
+                   'ns3::Ptr< ns3::WifiChannel >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): std::vector<unsigned short, std::allocator<unsigned short> > ns3::SpectrumWifiPhy::GetOperationalChannelList() const [member function]
+    cls.add_method('GetOperationalChannelList', 
+                   'std::vector< unsigned short >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::AntennaModel> ns3::SpectrumWifiPhy::GetRxAntenna() const [member function]
+    cls.add_method('GetRxAntenna', 
+                   'ns3::Ptr< ns3::AntennaModel >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::SpectrumModel const> ns3::SpectrumWifiPhy::GetRxSpectrumModel() const [member function]
+    cls.add_method('GetRxSpectrumModel', 
+                   'ns3::Ptr< ns3::SpectrumModel const >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiSpectrumPhyInterface> ns3::SpectrumWifiPhy::GetSpectrumPhy() const [member function]
+    cls.add_method('GetSpectrumPhy', 
+                   'ns3::Ptr< ns3::WifiSpectrumPhyInterface >', 
+                   [], 
+                   is_const=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::SpectrumWifiPhy::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('RegisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')], 
+                   is_virtual=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::ResumeFromSleep() [member function]
+    cls.add_method('ResumeFromSleep', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::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)
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::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)
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::SetAntenna(ns3::Ptr<ns3::AntennaModel> antenna) [member function]
+    cls.add_method('SetAntenna', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::AntennaModel >', 'antenna')])
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::SetChannel(ns3::Ptr<ns3::SpectrumChannel> channel) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumChannel >', 'channel')])
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::SetPacketReceivedCallback(ns3::Callback<void, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetPacketReceivedCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::SetReceiveErrorCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetReceiveErrorCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
+                   is_virtual=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::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_virtual=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::SetSleepMode() [member function]
+    cls.add_method('SetSleepMode', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::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::mpduType', 'mpdutype'), param('ns3::Ptr< ns3::InterferenceHelper::Event >', 'event')])
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::StartRx(ns3::Ptr<ns3::SpectrumSignalParameters> rxParams) [member function]
+    cls.add_method('StartRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumSignalParameters >', 'rxParams')])
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('UnregisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')], 
+                   is_virtual=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): bool ns3::SpectrumWifiPhy::DoChannelSwitch(uint16_t id) [member function]
+    cls.add_method('DoChannelSwitch', 
+                   'bool', 
+                   [param('uint16_t', 'id')], 
+                   visibility='protected', is_virtual=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): bool ns3::SpectrumWifiPhy::DoFrequencySwitch(uint32_t frequency) [member function]
+    cls.add_method('DoFrequencySwitch', 
+                   'bool', 
+                   [param('uint32_t', 'frequency')], 
+                   visibility='protected', is_virtual=True)
+    ## spectrum-wifi-phy.h (module 'wifi'): void ns3::SpectrumWifiPhy::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -16061,6 +17287,10 @@
     cls.add_constructor([])
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates(ns3::SupportedRates const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SupportedRates const &', 'arg0')])
+    ## supported-rates.h (module 'wifi'): void ns3::SupportedRates::AddBssMembershipSelectorRate(uint32_t bs) [member function]
+    cls.add_method('AddBssMembershipSelectorRate', 
+                   'void', 
+                   [param('uint32_t', 'bs')])
     ## supported-rates.h (module 'wifi'): void ns3::SupportedRates::AddSupportedRate(uint32_t bs) [member function]
     cls.add_method('AddSupportedRate', 
                    'void', 
@@ -16095,6 +17325,11 @@
                    'bool', 
                    [param('uint32_t', 'bs')], 
                    is_const=True)
+    ## supported-rates.h (module 'wifi'): bool ns3::SupportedRates::IsBssMembershipSelectorRate(uint32_t bs) const [member function]
+    cls.add_method('IsBssMembershipSelectorRate', 
+                   'bool', 
+                   [param('uint32_t', 'bs')], 
+                   is_const=True)
     ## supported-rates.h (module 'wifi'): bool ns3::SupportedRates::IsSupportedRate(uint32_t bs) const [member function]
     cls.add_method('IsSupportedRate', 
                    'bool', 
@@ -16756,6 +17991,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Mac48Address', 'from'), param('ns3::Mac48Address', 'to')], 
                    visibility='protected')
+    ## wifi-net-device.h (module 'wifi'): void ns3::WifiNetDevice::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3WifiRadioEnergyModel_methods(root_module, cls):
@@ -17163,6 +18403,11 @@
                    'void', 
                    [param('uint32_t', 'aifsn')], 
                    is_virtual=True)
+    ## dca-txop.h (module 'wifi'): void ns3::DcaTxop::SetTxopLimit(ns3::Time txopLimit) [member function]
+    cls.add_method('SetTxopLimit', 
+                   'void', 
+                   [param('ns3::Time', 'txopLimit')], 
+                   is_virtual=True)
     ## dca-txop.h (module 'wifi'): uint32_t ns3::DcaTxop::GetMinCw() const [member function]
     cls.add_method('GetMinCw', 
                    'uint32_t', 
@@ -17178,6 +18423,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## dca-txop.h (module 'wifi'): ns3::Time ns3::DcaTxop::GetTxopLimit() const [member function]
+    cls.add_method('GetTxopLimit', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## dca-txop.h (module 'wifi'): void ns3::DcaTxop::Queue(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
     cls.add_method('Queue', 
                    'void', 
@@ -17305,6 +18555,14 @@
 
 def register_functions(root_module):
     module = root_module
+    ## dsss-parameter-set.h (module 'wifi'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeDsssParameterSetChecker() [free function]
+    module.add_function('MakeDsssParameterSetChecker', 
+                        'ns3::Ptr< ns3::AttributeChecker const >', 
+                        [])
+    ## edca-parameter-set.h (module 'wifi'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeEdcaParameterSetChecker() [free function]
+    module.add_function('MakeEdcaParameterSetChecker', 
+                        'ns3::Ptr< ns3::AttributeChecker const >', 
+                        [])
     ## erp-information.h (module 'wifi'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeErpInformationChecker() [free function]
     module.add_function('MakeErpInformationChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
diff -Naur ns-3.25/src/wifi/doc/source/wifi-design.rst ns-3.26/src/wifi/doc/source/wifi-design.rst
--- ns-3.25/src/wifi/doc/source/wifi-design.rst	2016-10-03 20:57:08.460245979 -0700
+++ ns-3.26/src/wifi/doc/source/wifi-design.rst	2016-10-03 19:49:01.749386893 -0700
@@ -36,9 +36,10 @@
 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 between channels.
+WifiNetDevice can coexist with other device types.
+With the use of the **SpectrumWifiPhy** framework, one can also build scenarios
+involving cross-channel interference or multiple wireless technologies on
+a single channel.
 
 The source code for the WifiNetDevice and its models lives in the directory
 ``src/wifi``.
@@ -115,14 +116,9 @@
 PHY layer models
 ================
 
-The PHY layer implements a single model in the ``ns3::WifiPhy`` class: the
-physical layer model implemented there is described in a paper entitled
-`Yet Another Network Simulator <http://cutebugs.net/files/wns2-yans.pdf>`_
-The acronym *Yans* derives from this paper title.
-
 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:
+are typically three main components to packet reception:
 
 * each packet received is probabilistically evaluated for successful or
   failed reception.  The probability depends on the modulation, on
@@ -135,6 +131,17 @@
 * one or more error models corresponding to the modulation and standard
   are used to look up probability of successful reception.
 
+|ns3| offers users a choice between two physical layer models, with a
+base interface defined in the ``ns3::WifiPhy`` class.  The YansWifiPhy
+class has been the only physical layer model until recently; the model
+implemented there is described in a paper entitled
+`Yet Another Network Simulator <http://cutebugs.net/files/wns2-yans.pdf>`_
+The acronym *Yans* derives from this paper title.  The SpectrumWifiPhy
+class is an alternative implementation based on the Spectrum framework
+used for other |ns3| wireless models.  Spectrum allows a fine-grained
+frequency decomposition of the signal, and permits scenarios to
+include multiple technologies coexisting on the same channel.
+
 Scope and Limitations
 *********************
 
@@ -145,9 +152,8 @@
 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
+no frequency-selective propagation or interference effects when using
+the default YansWifiPhy model.  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
@@ -186,14 +192,29 @@
 layering, by describing the channel and PHY models first, followed by
 the MAC models.
 
+We focus first on the choice between physical layer frameworks.  |ns3| 
+contains support for a Wi-Fi-only physical layer model called YansWifiPhy
+that offers no frequency-level decomposition of the signal.  For simulations
+that involve only Wi-Fi signals on the Wi-Fi channel, and that do not
+involve frequency-dependent propagation loss or fading models, the default
+YansWifiPhy framework is a suitable choice.  For simulations involving
+mixed technologies on the same channel, or frequency dependent effects,
+the SpectrumWifiPhy is more appropriate.  The two frameworks are very
+similarly configured.
+
+The YansWifiPhy framework uses the ``WifiChannel`` and ``YansWifiChannel``
+frameworks.  The SpectrumWifiPhy framework uses the ``Spectrum`` channel
+framework, which is not documented herein but in the Spectrum module
+documentation.
+
 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 ``ns3::YansWifiChannel``) since the SpectrumWifiPhy uses the
+base class ``ns3::SpectrumChannel``.  The class works in tandem with the 
+``ns3::WifiPhy`` class.
 
 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.
@@ -226,7 +247,7 @@
 
 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
+``SendPacket()`` method are sent over a channel 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
@@ -235,8 +256,9 @@
 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:
+There are currently two implementations of the ``WifiPhy``: the
+``ns3::YansWifiPhy`` and the ``ns3::SpectrumWifiPhy``.  They each work in 
+conjunction with three other objects:
 
 * **WifiPhyStateHelper**:  Maintains the PHY state machine
 * **InterferenceHelper**:  Tracks all packets observed on the channel
@@ -396,6 +418,70 @@
 Users should select either Nist or Yans models for OFDM (Nist is default), 
 and Dsss will be used in either case for 802.11b.
 
+SpectrumWifiPhy
+###############
+
+This section describes the implementation of the ``SpectrumWifiPhy``
+class that can be found in ``src/wifi/model/spectrum-wifi-phy.{cc,h}``.
+
+The implementation also makes use of additional classes found in the
+same directory:
+
+* ``wifi-spectrum-phy-interface.{cc,h}``
+* ``wifi-spectrum-signal-parameters.{cc,h}``
+
+and classes found in the spectrum module:
+
+* ``wifi-spectrum-value-helper.{cc,h}``
+
+The current ``SpectrumWifiPhy`` class 
+reuses the existing interference manager and error rate models originally
+built for YansWifiPhy, but allows, as a first step, foreign (non Wi-Fi)
+signals to be treated as additive noise.
+
+Two main changes were needed to adapt the Spectrum framework to Wi-Fi.
+First, the physical layer must send signals compatible with the
+Spectrum channel framework, and in particular, the
+``MultiModelSpectrumChannel`` that allows signals from different
+technologies to coexist.  Second, the InterferenceHelper must be
+extended to support the insertion of non-Wi-Fi signals and to
+add their received power to the noise, in the same way that
+unintended Wi-Fi signals (perhaps from a different SSID or arriving
+late from a hidden node) are added to the noise.
+
+Third, the default value for CcaMode1Threshold attribute is -62 dBm
+rather than the value of -99 dBm used for YansWifiPhy.  This is because,
+unlike YansWifiPhy, where there are no foreign signals, CCA BUSY state
+will be raised for foreign signals that are higher than this 'energy
+detection' threshold (see section 16.4.8.5 in the 802.11-2012 standard
+for definition of CCA Mode 1).  
+
+To support the Spectrum channel, the ``YansWifiPhy`` transmit and receive methods
+were adapted to use the Spectrum channel API.  This required developing
+a few ``SpectrumModel``-related classes.  The class
+``WifiSpectrumValueHelper`` is used to create Wi-Fi signals with the
+spectrum framework and spread their energy across the bands.  The 
+spectrum is sub-divided into 312.5 KHz sub-bands (the width of an OFDM
+subcarrier).  The power allocated to a particular channel
+is spread across the sub-bands roughly according to how power would 
+be allocated to sub-carriers using an even distribution of power and
+assuming perfect transmit filters.  This could be extended in the 
+future to place power outside of the
+channel according to the real spectral mask.  This should be
+done for future adjacent channel models but is not presently implemented.
+Similarly, on the receive side, a receiver filter mask can be defined; 
+for this initial implementation, we implemented a perfect brick wall 
+filter that is centered on the channel center frequency.
+
+To support an easier user configuration experience, the existing
+YansWifi helper classes (in ``src/wifi/helper``) were copied and
+adapted to provide equivalent SpectrumWifi helper classes.
+
+Finally, for reasons related to avoiding C++ multiple inheritance
+issues, a small forwarding class called ``WifiSpectrumPhyInterface``
+was inserted as a shim between the ``SpectrumWifiPhy`` and the
+Spectrum channel.
+
 The MAC model
 =============
 
diff -Naur ns-3.25/src/wifi/doc/source/wifi-testing.rst ns-3.26/src/wifi/doc/source/wifi-testing.rst
--- ns-3.25/src/wifi/doc/source/wifi-testing.rst	2016-10-03 20:57:08.461245971 -0700
+++ ns-3.26/src/wifi/doc/source/wifi-testing.rst	2016-10-03 19:49:01.750386885 -0700
@@ -52,7 +52,166 @@
 
    Frame error rate (NIST model) for OFDM Wi-Fi
 
-
 MAC validation
 **************
 Validation of the MAC layer has been performed in [baldo2010]_.
+
+SpectrumWiFiPhy
+***************
+
+The SpectrumWifiPhy implementation has been verified to produce equivalent
+results to the legacy YansWifiPhy by using the saturation and packet
+error rate programs (described below) and toggling the implementation 
+between the two physical layers.
+
+A basic unit test is provided using injection of hand-crafted packets to
+a receiving Phy object, controlling the timing and receive power of 
+each packet arrival and checking the reception results.  However, most of
+the testing of this Phy implementation has been performed using example
+programs described below, and during the course of a (separate) LTE/Wi-Fi
+coexistence study not documented herein.
+
+Saturation performance
+======================
+
+The program ``examples/wireless/wifi-spectrum-saturation-example.cc``
+allows user to select either the `SpectrumWifiPhy` or `YansWifiPhy` for
+saturation tests.  The wifiType can be toggled by the argument
+``'--wifiType=ns3::YansWifiPhy'`` or ``--wifiType=ns3::SpectrumWifiPhy'``
+
+There isn't any difference in the output, which is to be expected because
+this test is more of a test of the DCF than the physical layer.
+
+By default, the program will use the `SpectrumWifiPhy` and will run
+for 10 seconds of saturating UDP data, with 802.11n features enabled.
+It produces this output for the main 802.11n rates (with short and long guard
+intervals):
+
+::
+
+  wifiType: ns3::SpectrumWifiPhy distance: 1m
+  index   MCS   width Rate (Mb/s) Tput (Mb/s) Received 
+    0     0      20       6.5     5.96219    5063
+    1     1      20        13     11.9491   10147
+    2     2      20      19.5     17.9172   15215
+    3     3      20        26     23.9241   20316
+    4     4      20        39     35.9427   30522
+    5     5      20        52     47.9283   40700
+    6     6      20      58.5     53.7445   45639
+    7     7      20        65     59.4629   50495
+   ...
+   63    15      40       300     240.884  204555
+
+
+The above output shows the first 8 (of 32) modes, and last mode, that will be
+output from the program.  The first 8 modes correspond
+to short guard interval disabled and channel bonding disabled.  The
+subsequent 24 modes run by this program are variations with short guard
+interval enabled (cases 9-16), and then with channel bonding enabled and
+short guard first disabled then enabled (cases 17-32).  Cases 33-64 repeat
+the same configurations but for two spatial streams (MIMO abstraction).
+
+When run with the legacy YansWifiPhy, as in ``./waf --run "wifi-spectrum-saturation-example --wifiType=ns3::YansWifiPhy"``, the same output is observed:
+
+::
+
+  wifiType: ns3::YansWifiPhy distance: 1m
+  index   MCS   width Rate (Mb/s) Tput (Mb/s) Received 
+      0     0      20       6.5     5.96219    5063
+      1     1      20        13     11.9491   10147
+      2     2      20      19.5     17.9172   15215
+      3     3      20        26     23.9241   20316
+      4     4      20        39     35.9427   30522
+      5     5      20        52     47.9283   40700
+      6     6      20      58.5     53.7445   45639
+
+This is to be expected since YansWifiPhy and SpectrumWifiPhy use the 
+same error rate model in this case.
+
+Packet error rate performance
+=============================
+
+The program ``examples/wireless/wifi-spectrum-per-example.cc`` allows users
+to select either `SpectrumWifiPhy` or `YansWifiPhy`, as above, and select
+the distance between the nodes, and to log the reception statistics and
+received SNR (as observed by the MonitorRx trace source), using a
+Friis propagation loss model.  The transmit power is lowered from the default
+of 40 mW (16 dBm) to 1 dBm to lower the baseline SNR; the distance between
+the nodes can be changed to further change the SNR.  By default, it steps 
+through the same index values as in the saturation example (0 through 31) 
+for a 50m distance, producing output such as:
+
+::
+
+  wifiType: ns3::SpectrumWifiPhy distance: 50m; sent: 1000 TxPower: 1 dBm (1.3 mW)
+  index   MCS Rate (Mb/s) Tput (Mb/s) Received Signal (dBm) Noise (dBm)  SNR (dB)
+      0     0       6.5      0.7776    1000    -77.6633    -100.966     23.3027
+      1     1        13      0.7776    1000    -77.6633    -100.966     23.3027
+      2     2      19.5      0.7776    1000    -77.6633    -100.966     23.3027
+      3     3        26      0.7776    1000    -77.6633    -100.966     23.3027
+      4     4        39      0.7776    1000    -77.6633    -100.966     23.3027
+      5     5        52           0       0         N/A         N/A         N/A
+      6     6      58.5           0       0         N/A         N/A         N/A
+      7     7        65           0       0         N/A         N/A         N/A
+  
+As in the above saturation example, running this program with YansWifiPhy
+will yield identical output.
+
+Interference performance
+========================
+
+The program ``examples/wireless/wifi-spectrum-per-interference.cc`` is based
+on the previous packet error rate example, but copies over the
+WaveformGenerator from the unlicensed LTE interferer test, to allow
+users to inject a non-Wi-Fi signal (using the ``--waveformPower`` argument)
+from the command line.  Another difference with respect to the packet
+error rate example program is that the transmit power is set back to the
+default of 40 mW (16 dBm).  By default, the interference generator is off,
+and the program should behave similarly to the other packet error rate example,
+but by adding small
+amounts of power (e.g. ``--waveformPower=0.001``), one will start to observe
+SNR degradation and frame loss.
+
+Some sample output with default arguments (no interference) is:
+
+::
+
+  ./waf --run "wifi-spectrum-per-interference"
+
+  wifiType: ns3::SpectrumWifiPhy distance: 50m; sent: 1000 TxPower: 16 dBm (40 mW)
+  index   MCS Rate (Mb/s) Tput (Mb/s) Received Signal (dBm)Noi+Inf(dBm)  SNR (dB)
+      0     0       6.5      0.7776    1000    -62.6427    -100.966     38.3233
+      1     1        13      0.7776    1000    -62.6427    -100.966     38.3233
+      2     2      19.5      0.7776    1000    -62.6427    -100.966     38.3233
+      3     3        26      0.7776    1000    -62.6427    -100.966     38.3233
+      4     4        39      0.7776    1000    -62.6427    -100.966     38.3233
+      5     5        52      0.7776    1000    -62.6427    -100.966     38.3233
+      6     6      58.5      0.7776    1000    -62.6427    -100.966     38.3233
+    ...
+
+while a small amount of waveform power will cause frame losses to occur at
+higher order modulations, due to lower SNR:
+
+::
+
+  ./waf --run "wifi-spectrum-per-interference --waveformPower=0.001"
+
+  wifiType: ns3::SpectrumWifiPhy distance: 50m; sent: 1000 TxPower: 16 dBm (40 mW)
+  index   MCS Rate (Mb/s) Tput (Mb/s) Received Signal (dBm)Noi+Inf(dBm)  SNR (dB)
+      0     0       6.5      0.7776    1000    -62.6427    -86.1031     23.4604
+      1     1        13      0.7776    1000    -62.6427    -86.1031     23.4604
+      2     2      19.5      0.7776    1000    -62.6427    -86.1032     23.4605
+      3     3        26      0.7776    1000    -62.6427    -86.1031     23.4604
+      4     4        39      0.7776    1000    -62.6427    -86.1032     23.4605
+      5     5        52           0       0         N/A         N/A         N/A
+      6     6      58.5           0       0         N/A         N/A         N/A
+    ...
+
+If ns3::YansWifiPhy is selected as the wifiType, the waveform generator will
+not be enabled because only transmitters of type YansWifiPhy may be connected
+to a YansWifiChannel.
+
+The interference signal as received by the sending node is typically below 
+the default -62 dBm CCA Mode 1 threshold in this example.  If it raises
+above, the sending node will suppress all transmissions.
+
diff -Naur ns-3.25/src/wifi/doc/source/wifi-user.rst ns-3.26/src/wifi/doc/source/wifi-user.rst
--- ns-3.25/src/wifi/doc/source/wifi-user.rst	2016-10-03 20:57:08.461245971 -0700
+++ ns-3.26/src/wifi/doc/source/wifi-user.rst	2016-10-03 19:49:01.751386878 -0700
@@ -31,8 +31,10 @@
 see how this is done.  Next, we describe the common steps to create a WifiNetDevice
 from the bottom layer (WifiChannel) up to the device layer (WifiNetDevice).
 
-To create a WifiNetDevice, users need to configure mainly five steps:
+To create a WifiNetDevice, users need to follow these steps:
 
+* Decide on which physical layer framework, the ``SpectrumWifiPhy`` or 
+  ``YansWifiPhy``, to use.  This will affect which Channel and Phy type to use. 
 * Configure the WifiChannel: WifiChannel takes care of getting signal
   from one device to other devices on the same wifi channel.
   The main configurations of WifiChannel are propagation loss model and propagation delay model.
@@ -48,6 +50,41 @@
 * Configure mobility: finally, mobility model is (usually) required before WifiNetDevice
   can be used.
 
+The following sample code illustrates a typical configuration using mostly
+default values in the simulator, and infrastructure mode::
+
+  NodeContainer wifiStaNode;
+  wifiStaNode.Create (10);   // Create 10 station node objects
+  NodeContainer wifiApNode;
+  wifiApNode.Create (1);   // Create 1 access point node object
+
+  // Create a channel helper and phy helper, and then create the channel
+  YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
+  YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
+  phy.SetChannel (channel.Create ());
+
+  // Create a WifiMacHelper, which is reused across STA and AP configurations
+  WifiMacHelper mac;
+
+  // Create a WifiHelper, which will use the above helpers to create
+  // and install Wifi devices.  Configure a Wifi standard to use, which
+  // will align various parameters in the Phy and Mac to standard defaults.
+  WifiHelper wifi;
+  wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+  // Declare NetDeviceContainers to hold the container returned by the helper
+  NetDeviceContainer wifiStaDevices;
+  NetDeviceContainer wifiApDevice;
+
+  // Perform the installation
+  mac.SetType ("ns3::StaWifiMac");
+  wifiStaDevices = wifi.Install (phy, mac, wifiStaNodes);
+  mac.SetType ("ns3::ApWifiMac");
+  wifiApDevice = wifi.Install (phy, mac, wifiApNode);
+
+At this point, the 11 nodes have Wi-Fi devices configured, attached to a 
+common channel.  The rest of this section describes how additional 
+configuration may be performed.
+
 YansWifiChannelHelper
 =====================
 
@@ -127,7 +164,9 @@
 
  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``::
+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.  See below for further documentation on setting the frequency, channel width, and channel number.
+
+::
 
   WifiHelper wifi;
   wifi.SetStandard (WIFI_PHY_STANDARD_80211ac);
@@ -150,8 +189,312 @@
   NetDeviceContainer apDevice;
   apDevice = wifi.Install (phy, mac, wifiApNode);
 
-  //Once install is done, we overwrite the channel width value
-  Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/ChannelWidth", UintegerValue (160));
+Channel, frequency, and channel width configuration
+===================================================
+
+There are a few ``ns3::WifiPhy`` parameters that are related, and cannot
+be set completely independently, concerning the frequency and channel width
+that the device is tuned to.  These are:
+
+* ``WifiPhyStandard``:  For example, 802.11b, 802.11n, etc.
+* ``Frequency``
+* ``ChannelWidth``
+* ``ChannelNumber``
+
+It is possible to set the above to incompatible combinations (e.g. channel
+number 1 with 40 MHz channel width on frequency 4915 MHz).  In addition,
+the latter three values above are attributes; it is possible to set them
+in a number of ways:
+
+* by setting global configuration default; e.g.
+
+::
+
+  Config::SetDefault ("ns3::WifiPhy::ChannelNumber", UintegerValue (3));
+
+* by setting an attribute value in the helper; e.g.
+
+::
+
+  YansWifiPhyHelper wifiPhyHelper = YansWifiPhyHelper::Default ();
+  wifiPhyHelper.Set ("ChannelNumber", UintegerValue (3));
+
+
+* by setting the WifiHelper::SetStandard (enum WifiPhyStandard) method; and
+
+* by performing post-installation configuration of the option, either
+  via a Ptr to the WifiPhy object, or through the Config namespace; e.g.:
+
+::
+
+  Config::Set ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::WifiPhy/ChannelNumber", UintegerValue (3));
+
+This section provides guidance on how to configure these settings in
+a coherent manner, and what happens if non-standard values are chosen.
+
+WifiHelper::SetStandard()
++++++++++++++++++++++++++
+
+``WifiHelper::SetStandard ()`` is a method to set various parameters
+in the Mac and Phy to standard values and some reasonable defaults.
+For example, ``SetStandard (WIFI_PHY_STANDARD_80211a)`` will set the
+WifiPhy to Channel 36 in the 5 GHz band, among other settings.
+
+The following values for WifiPhyStandard are defined in 
+``src/wifi/model/wifi-phy-standard.h``:
+
+::
+
+  /** OFDM PHY for the 5 GHz band (Clause 17) */
+  WIFI_PHY_STANDARD_80211a,
+  /** DSSS PHY (Clause 15) and HR/DSSS PHY (Clause 18) */
+  WIFI_PHY_STANDARD_80211b,
+  /** ERP-OFDM PHY (Clause 19, Section 19.5) */
+  WIFI_PHY_STANDARD_80211g,
+  /** OFDM PHY for the 5 GHz band (Clause 17 with 10 MHz channel bandwidth) */
+  WIFI_PHY_STANDARD_80211_10MHZ,
+  /** OFDM PHY for the 5 GHz band (Clause 17 with 5 MHz channel bandwidth) */
+  WIFI_PHY_STANDARD_80211_5MHZ,
+  /** This is intended to be the configuration used in this paper:
+   *  Gavin Holland, Nitin Vaidya and Paramvir Bahl, "A Rate-Adaptive
+   *  MAC Protocol for Multi-Hop Wireless Networks", in Proc. of
+   *  ACM MOBICOM, 2001.
+   */
+  WIFI_PHY_STANDARD_holland,
+  /** HT OFDM PHY for the 2.4 GHz band (clause 20) */
+  WIFI_PHY_STANDARD_80211n_2_4GHZ,
+  /** HT OFDM PHY for the 5 GHz band (clause 20) */
+  WIFI_PHY_STANDARD_80211n_5GHZ,
+  /** VHT OFDM PHY (clause 22) */
+  WIFI_PHY_STANDARD_80211ac
+
+In addition, a value WIFI_PHY_STANDARD_UNSPECIFIED is defined to indicate
+that the user has not set a standard.
+
+By default, the WifiPhy will be initialized to WIFI_PHY_STANDARD_UNSPECIFIED,
+when it is created directly by ``CreateObject`` (i.e. not by WifiHelper).
+However, the WifiHelper (the typical use case for WifiPhy creation) will 
+configure the WIFI_PHY_STANDARD_80211a standard by default.  Other values 
+for standards should be passed explicitly to the WifiHelper object.
+
+If user has not already separately configured Frequency or ChannelNumber
+when SetStandard is called, the user obtains default values, in addition
+(e.g. channel 1 for 802.11b/g, or channel 36 for a/n), in addition to
+an appropriate ChannelWidth value for the standard (typically, 20 MHz, but
+80 MHz for 802.11ac).
+
+WifiPhy attribute interactions
+++++++++++++++++++++++++++++++
+
+Users should keep in mind that the two attributes that matter most
+within the model code are ``WifiPhy::Frequency`` and 
+``WifiPhy::ChannelWidth``; these are the ones directly used to set
+transmission parameters.  ``WifiPhy::ChannelNumber`` and 
+``WifiHelper::SetStandard ()`` are convenience shorthands for setting
+frequency and channel width.  The ``ns3::WifiPhy`` contains code to
+keep these values aligned and to generate runtime errors in some cases
+if users set these attributes to incompatible values.
+
+The pair (WifiPhyStandard, ChannelNumber) is an alias for a pair of 
+(Frequency/ChannelWidth) items.  Valid combinations are stored in 
+a map within WifiPhy that is populated with well-known values but that
+can be dynamically extended at runtime.  
+
+WifiPhy::Frequency
+++++++++++++++++++
+
+The WifiPhy channel center frequency is set by the attribute ``Frequency``
+in the class ``WifiPhy``.  It is expressed in units of MHz.  By default,
+this attribute is set to the value 0 to indicate that no value is configured.
+
+Note that this is a change in definition from ns-3.25 and earlier releases,
+where this attribute referred to the start of the overall frequency band
+on which the channel resides, not the specific channel center frequency.
+
+WifiPhy::ChannelWidth
++++++++++++++++++++++
+
+The WifiPhy channel width is set by the attribute ``ChannelWidth``
+in the class ``WifiPhy``.  It is expressed in units of MHz.  By default,
+this attribute is set to the value 20.  Allowable values are 5, 10, 20,
+22, 40, 80, or 160 (MHz).
+
+WifiPhy::ChannelNumber
+++++++++++++++++++++++
+
+Several channel numbers are defined and well-known in practice.  However,
+valid channel numbers vary by geographical region around the world, and
+there is some overlap between the different standards.
+
+In |ns3|, the class ``WifiPhy`` contains an attribute ``ChannelNumber`` that
+is, by default, set to the value 0.  The value 0 indicates that no
+channel number has been set by the user.
+
+In |ns3|, a ChannelNumber may be defined or unknown.  These terms
+are not found in the code; they are just used to describe behavoir herein.
+
+If a ChannelNumber is defined, it means that WifiPhy has stored a
+map of ChannelNumber to the center frequency and channel width commonly
+known for that channel in practice.  For example:
+
+* Channel 1, when IEEE 802.11b is configured, corresponds to a channel
+  width of 22 MHz and a center frequency of 2412 MHz.  
+
+* Channel 36, when IEEE 802.11n is configured at 5GHz, corresponds to 
+  a channel width of 20 MHz and a center frequency of 5180 MHz.  
+
+The following channel numbers are well-defined for 2.4 GHz standards:
+
+* channels 1-14 with ChannelWidth of 22 MHz for 802.11b
+* channels 1-14 with ChannelWidth of 20 MHz for 802.11n-2.4GHz and 802.11g
+
+The following channel numbers are well-defined for 5 GHz standards:
+
++------------------+-------------------------------------------+
+| ``ChannelWidth`` | ``ChannelNumber``                         |
++------------------+-------------------------------------------+
+| 20 MHz           | 36, 40, 44, 48, 52, 56, 60, 64, 100,      |
+|                  | 104, 108, 112, 116, 120, 124,             |
+|                  | 128, 132, 136, 140, 144,                  |
+|                  | 149, 153, 161, 165, 169                   |
++------------------+-------------------------------------------+
+| 40 MHz           | 38, 46, 54, 62, 102, 110, 118, 126,       |
+|                  | 134, 142, 151, 159                        |
++------------------+-------------------------------------------+
+| 80 MHz           | 42, 58, 106, 122, 138, 155                |
++------------------+-------------------------------------------+
+| 160 MHz          | 50, 114                                   |
++------------------+-------------------------------------------+
+| 10 MHz (802.11p) | 172, 174, 176, 178, 180, 182, 184         |
++------------------+-------------------------------------------+
+
+The channel number may be set either before or after creation of the
+WifiPhy object.  
+
+If an unknown channel number (other than zero) is configured, the
+simulator will exit with an error; for instance, such as:
+
+::
+
+  Ptr<WifiPhy> wifiPhy = ...;
+  wifiPhy->SetAttribute ("ChannelNumber", UintegerValue (1321));
+
+The known channel numbers are defined in the implementation file
+``src/wifi/model/wifi-phy.cc``.  Of course, this file may be edited
+by users to extend to additional channel numbers.  Below, we describe 
+how new channel numbers may be defined dynamically at run-time.
+
+If a known channel number is configured against an incorrect value
+of the WifiPhyStandard, the simulator will exit with an error; for instance,
+such as:
+
+::
+
+  WifiHelper wifi;
+  wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+  ...
+  Ptr<WifiPhy> wifiPhy = ...;
+  wifiPhy->SetAttribute ("ChannelNumber", UintegerValue (14));
+
+In the above, while channel number 14 is well-defined in practice for 802.11b
+only, it is for 2.4 GHz band, not 5 GHz band.
+
+Defining a new channel number
++++++++++++++++++++++++++++++
+
+Users may define their own channel number so that they can later refer to
+the channel by number.  
+
+The method is ``WifiPhy::DefineChannelNumber ()`` and it takes the following
+arguments:
+
+* uint16_t channelNumber
+* enum WifiPhyStandard standard
+* uint32_t frequency
+* uint32_t channelWidth
+
+The pair of (channelNumber, standard) are used as an index to a map that
+returns a Frequency and ChannelWidth.  By calling this method, one can
+dynamically add members to the map.  For instance, let's suppose that you
+previously configured WIFI_PHY_STANDARD_80211a, and wanted to deine a new
+channel number '34' of width 20 MHz and at center frequency 5160 MHz.
+
+If you try to simply configure ChannelNumber to the value 34, it will fail,
+since 34 is undefined.  However, you can use DefineChannelNumber as follows:
+
+::
+
+  Ptr<WifiPhy> wifiPhy = ...;
+  wifiPhy->DefineChannelNumber (34, WIFI_PHY_STANDARD_80211a, 5160, 20);
+
+and then later you can refer to channel number 34 in your program, which
+will configure a center operating frequency of 5160 MHz and a width of
+20 MHz.
+
+The steps can be repeated to explicitly configure the same channel for
+multiple standards:
+
+::
+
+  wifiPhy->DefineChannelNumber (34, WIFI_PHY_STANDARD_80211a, 5160, 20);
+  wifiPhy->DefineChannelNumber (34, WIFI_PHY_STANDARD_80211n_5GHZ, 5160, 20);
+
+or for a wildcard, unspecified standard:
+
+::
+
+  wifiPhy->DefineChannelNumber (34, WIFI_PHY_STANDARD_UNSPECIFIED, 5160, 20);
+
+Order of operation issues
++++++++++++++++++++++++++
+
+Depending on the default values used and the order of operation in setting
+the values for the standard, channel width, frequency, and channel number,
+different configurations can be obtained.   Below are some common use cases.
+
+* **(accepting the standard defaults):**  If a user has not already 
+  separately configured frequency or channel number when 
+  ``WifiHelper::SetStandard ()`` is called, the user gets default values 
+  (e.g. channel 1 for 802.11b/g or channel 36 for a/n, with 20 MHz 
+  channel widths)
+
+* **(overwriting the standard channel):**  If the user has previously 
+  configured (e.g. via SetDefault) either frequency or channel number when 
+  SetStandard is called, and the frequency or channel number are appropriate 
+  for the standard being configured, they are not overwritten
+
+* **(changing the standard channel after Install):**  The user may also call
+  ``WifiHelper::SetStandard ()`` after ``Install ()`` and either configure
+  the frequency to something different, or configure the channel number
+  to something different.  Note that if the channel number is undefined
+  for the standard that was previously set, an error will occur.  
+
+* **(changing to non-standard frequency):**  If the user configures a 
+  frequency outside the standardized frequency range for the current 
+  WifiPhyStandard, this is OK.  This allows users to experiment with 
+  wifi on e.g. whitespace frequencies but still use SetStandard to set 
+  all of the other configuration details.
+
+* **(interaction between channel number and frequency):**  If the user 
+  the user sets Frequency to a different value than the currently configured
+  ChannelNumber (or if ChannelNumber is zero), then the ChannelNumber is 
+  set to a new channel number if known, or to zero if unknown. 
+
+  * *example:*  ChannelNumber previously set to 36, user sets Frequency to 5200, then ChannelNumber gets automatically set to 40
+  * *example:*  ChannelNumber set to 36, user later sets Frequency to 5185, ChannelNumber gets reset to 0
+
+In summary, ChannelNumber and Frequency follow each other.  ChannelNumber
+sets both Frequency and ChannelWidth if the channel number has been defined
+for the standard.  Setting ChannelWidth has no effect on Frequency or
+ChannelNumber.  Setting Frequency will set ChannelNumber to either the
+defined value for that Wi-Fi standard, or to the value 0 if undefined.
+
+SpectrumWifiPhyHelper
+=====================
+
+The API for this helper closely tracks the API of the YansWifiPhyHelper,
+with the exception that a channel of type ``ns3::SpectrumChannel`` instead
+of type ``ns3::WifiChannel`` must be used with it.
 
 WifiMacHelper
 =============
@@ -181,16 +524,12 @@
                          "BeaconGeneration", BooleanValue (true),
                          "BeaconInterval", TimeValue (Seconds (2.5)));
 
+To create ad-hoc MAC instances, simply use ``ns3::AdhocWifiMac`` instead of ``ns3::StaWifiMac`` or ``ns3::ApWifiMac``.
+
 With QoS-enabled MAC models it is possible to work with traffic belonging to
 four different Access Categories (ACs): **AC_VO** for voice traffic,
 **AC_VI** for video traffic, **AC_BE** for best-effort
-traffic and **AC_BK** for background traffic.  In order for the
-MAC to determine the appropriate AC for an MSDU, packets forwarded
-down to these MAC layers should be marked using **ns3::QosTag** in
-order to set a TID (traffic id) for that packet otherwise it will be
-considered belonging to **AC_BE**.
-
-To create ad-hoc MAC instances, simply use ``ns3::AdhocWifiMac`` instead of ``ns3::StaWifiMac`` or ``ns3::ApWifiMac``.
+traffic and **AC_BK** for background traffic.
 
 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.
@@ -216,7 +555,7 @@
 * 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.
+By defaut, MSDU aggregation 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``::
@@ -232,6 +571,56 @@
                           "BE_MaxAmsduSize", UintegerValue (7935),
                           "ActiveProbing", BooleanValue (false));
 
+Selection of the Access Category (AC)
++++++++++++++++++++++++++++++++++++++
+
+Since ns-3.26, the QosTag is no longer used to assign a user priority to an MSDU.
+Instead, the selection of the Access Category (AC) for an MSDU is based on the
+value of the DS field in the IP header of the packet (ToS field in case of IPv4,
+Traffic Class field in case of IPv6). Details on how to set the ToS field of IPv4
+packets are given in the :ref:`Type-of-service` section of the documentation. In
+summary, users can create an address of type :cpp:class:`ns3::InetSocketAddress`
+with the desired type of service value and pass it to the application helpers::
+
+    InetSocketAddress destAddress (ipv4Address, udpPort);
+    destAddress.SetTos (tos);
+    OnOffHelper onoff ("ns3::UdpSocketFactory", destAddress);
+
+Mapping the values of the DS field onto user priorities is performed similarly to the
+Linux mac80211 subsystem. Basically, the :cpp:func:`ns3::WifiNetDevice::SelectQueue()`
+method sets the user priority (UP) of an MSDU to the three most significant
+bits of the DS field. The Access Category is then determined based on the user priority
+according to the following table:
+
+===  ===============
+UP   Access Category
+===  ===============
+ 7     AC_VO
+ 6     AC_VO
+ 5     AC_VI
+ 4     AC_VI
+ 3     AC_BE
+ 0     AC_BE
+ 2     AC_BK
+ 1     AC_BK
+===  ===============
+
+Readers can refer to the doxygen documentation of the
+:cpp:func:`ns3::WifiNetDevice::SelectQueue()` method for more information,
+including how DSCP values map onto user priorities and access categories.
+Also, the ns3-wifi-ac-mapping test suite (defined in 
+src/test/ns3wifi/wifi-ac-mapping-test-suite.cc) can provide additional
+useful information.
+
+Note that :cpp:func:`ns3::WifiNetDevice::SelectQueue()` also sets the packet
+priority to the user priority, thus overwriting the value determined by the
+socket priority (users can read :ref:`Socket-options` for details on how to
+set the packet priority). Also, given that the Traffic Control layer calls
+:cpp:func:`ns3::WifiNetDevice::SelectQueue()` before enqueuing the packet
+into a queue disc, it turns out that queuing disciplines (such as the default
+PfifoFastQueueDisc) that classifies packets based on their priority will
+use the user priority instead of the socket priority.
+
 WifiHelper
 ==========
 
diff -Naur ns-3.25/src/wifi/examples/minstrel-ht-wifi-manager-example.cc ns-3.26/src/wifi/examples/minstrel-ht-wifi-manager-example.cc
--- ns-3.25/src/wifi/examples/minstrel-ht-wifi-manager-example.cc	2016-10-03 20:57:08.463245955 -0700
+++ ns-3.26/src/wifi/examples/minstrel-ht-wifi-manager-example.cc	2016-10-03 19:49:01.752386871 -0700
@@ -363,9 +363,9 @@
   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.SetExtra  (xRangeStr);
+  gnuplot.AppendExtra (yRangeStr);
+  gnuplot.AppendExtra  ("set key reverse left Left");
   gnuplot.GenerateOutput (outfile);
   outfile.close ();
   return 0;
diff -Naur ns-3.25/src/wifi/examples/wifi-phy-configuration.cc ns-3.26/src/wifi/examples/wifi-phy-configuration.cc
--- ns-3.25/src/wifi/examples/wifi-phy-configuration.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/wifi/examples/wifi-phy-configuration.cc	2016-10-03 19:49:01.753386863 -0700
@@ -0,0 +1,392 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 Tom Henderson
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 <tomh@tomh.org>
+ */
+
+#include <string>
+#include "ns3/core-module.h"
+#include "ns3/config-store-module.h"
+#include "ns3/network-module.h"
+#include "ns3/wifi-module.h"
+
+// This example shows (and tests) some possible configurations for
+// the Wi-Fi physical layer, particularly the interaction between
+// WifiHelper.SetStandard () and the physical layer channel number,
+// center frequency, and channel width.
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("WifiPhyConfigurationExample");
+
+
+Ptr<YansWifiPhy>
+GetYansWifiPhyPtr (const NetDeviceContainer &nc)
+{
+  Ptr<WifiNetDevice> wnd = nc.Get (0)->GetObject<WifiNetDevice> ();
+  Ptr<WifiPhy> wp = wnd->GetPhy ();
+  return wp->GetObject<YansWifiPhy> ();
+}
+
+void
+PrintAttributesIfEnabled (bool enabled)
+{
+  if (enabled)
+    {
+      ConfigStore outputConfig;
+      outputConfig.ConfigureAttributes ();
+    }
+}
+
+int main (int argc, char *argv[])
+{
+  uint32_t testCase = 0;
+  bool printAttributes = false;
+
+  CommandLine cmd;
+  cmd.AddValue ("testCase", "Test case", testCase);
+  cmd.AddValue ("printAttributes", "If true, print out attributes", printAttributes);
+  cmd.Parse (argc, argv);
+
+  NodeContainer wifiStaNode;
+  wifiStaNode.Create (1);
+  NodeContainer wifiApNode;
+  wifiApNode.Create (1);
+
+  YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
+  YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
+  phy.SetChannel (channel.Create ());
+  WifiHelper wifi;
+  wifi.SetRemoteStationManager ("ns3::IdealWifiManager");
+
+  // Configure and declare other generic components of this example
+  Ssid ssid;
+  ssid = Ssid ("wifi-phy-configuration");
+  WifiMacHelper macSta;
+  macSta.SetType ("ns3::StaWifiMac",
+                  "Ssid", SsidValue (ssid),
+                  "ActiveProbing", BooleanValue (false));
+  WifiMacHelper macAp;
+  macAp.SetType ("ns3::ApWifiMac",
+                 "Ssid", SsidValue (ssid),
+                 "BeaconInterval", TimeValue (MicroSeconds (102400)),
+                 "BeaconGeneration", BooleanValue (true));
+  NetDeviceContainer staDevice;
+  NetDeviceContainer apDevice;
+  Ptr<YansWifiPhy> phySta;
+  Config::SetDefault ("ns3::ConfigStore::Filename", StringValue ("output-attributes-" + std::to_string (testCase) + ".txt"));
+  Config::SetDefault ("ns3::ConfigStore::FileFormat", StringValue ("RawText"));
+  Config::SetDefault ("ns3::ConfigStore::Mode", StringValue ("Save"));
+
+  switch (testCase)
+  {
+    case 0:
+      // Default configuration, without WifiHelper::SetStandard or WifiHelper
+      phySta = CreateObject<YansWifiPhy> ();
+      // The default results in an invalid configuration of channel 0,
+      // width 20, and frequency 0 MHz
+      NS_ASSERT (phySta->GetChannelNumber () == 0);
+      NS_ASSERT (phySta->GetChannelWidth () == 20);
+      NS_ASSERT (phySta->GetFrequency () == 0);
+      PrintAttributesIfEnabled (printAttributes);
+      break;
+
+    // The following cases test the setting of WifiPhyStandard alone;
+    // i.e. without further channel number/width/frequency configuration
+
+    case 1:
+      // By default, WifiHelper will use WIFI_PHY_STANDARD_80211a
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      apDevice = wifi.Install (phy, macAp, wifiApNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // We expect channel 36, width 20, frequency 5180
+      NS_ASSERT (phySta->GetChannelNumber () == 36);
+      NS_ASSERT (phySta->GetChannelWidth () == 20);
+      NS_ASSERT (phySta->GetFrequency () == 5180);
+      PrintAttributesIfEnabled (printAttributes);
+      break;
+    case 2:
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      apDevice = wifi.Install (phy, macAp, wifiApNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // We expect channel 1, width 22, frequency 2412
+      NS_ASSERT (phySta->GetChannelNumber () == 1);
+      NS_ASSERT (phySta->GetChannelWidth () == 22);
+      NS_ASSERT (phySta->GetFrequency () == 2412);
+      PrintAttributesIfEnabled (printAttributes);
+      break;
+    case 3:
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211g);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      apDevice = wifi.Install (phy, macAp, wifiApNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // We expect channel 1, width 20, frequency 2412
+      NS_ASSERT (phySta->GetChannelNumber () == 1);
+      NS_ASSERT (phySta->GetChannelWidth () == 20);
+      NS_ASSERT (phySta->GetFrequency () == 2412);
+      PrintAttributesIfEnabled (printAttributes);
+      break;
+    case 4:
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      apDevice = wifi.Install (phy, macAp, wifiApNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // We expect channel 36, width 20, frequency 5180
+      NS_ASSERT (phySta->GetChannelNumber () == 36);
+      NS_ASSERT (phySta->GetChannelWidth () == 20);
+      NS_ASSERT (phySta->GetFrequency () == 5180);
+      PrintAttributesIfEnabled (printAttributes);
+      break;
+    case 5:
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_2_4GHZ);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      apDevice = wifi.Install (phy, macAp, wifiApNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // We expect channel 1, width 20, frequency 2412
+      NS_ASSERT (phySta->GetChannelNumber () == 1);
+      NS_ASSERT (phySta->GetChannelWidth () == 20);
+      NS_ASSERT (phySta->GetFrequency () == 2412);
+      PrintAttributesIfEnabled (printAttributes);
+      break;
+    case 6:
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211ac);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      apDevice = wifi.Install (phy, macAp, wifiApNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // We expect channel 42, width 80, frequency 5210
+      NS_ASSERT (phySta->GetChannelNumber () == 42);
+      NS_ASSERT (phySta->GetChannelWidth () == 80);
+      NS_ASSERT (phySta->GetFrequency () == 5210);
+      PrintAttributesIfEnabled (printAttributes);
+      break;
+    case 7:
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211_10MHZ);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      apDevice = wifi.Install (phy, macAp, wifiApNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // We expect channel 172, width 10, frequency 5860
+      NS_ASSERT (phySta->GetChannelNumber () == 172);
+      NS_ASSERT (phySta->GetChannelWidth () == 10);
+      NS_ASSERT (phySta->GetFrequency () == 5860);
+      PrintAttributesIfEnabled (printAttributes);
+      break;
+    case 8:
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211_5MHZ);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      apDevice = wifi.Install (phy, macAp, wifiApNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // We expect channel 0, width 5, frequency 5860
+      // Channel 0 because 5MHz channels are not officially defined
+      NS_ASSERT (phySta->GetChannelNumber () == 0);
+      NS_ASSERT (phySta->GetChannelWidth () == 5);
+      NS_ASSERT (phySta->GetFrequency () == 5860);
+      PrintAttributesIfEnabled (printAttributes);
+      break;
+    case 9:
+      wifi.SetStandard (WIFI_PHY_STANDARD_holland);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      apDevice = wifi.Install (phy, macAp, wifiApNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // We expect channel 36, width 20, frequency 5180
+      NS_ASSERT (phySta->GetChannelNumber () == 36);
+      NS_ASSERT (phySta->GetChannelWidth () == 20);
+      NS_ASSERT (phySta->GetFrequency () == 5180);
+      PrintAttributesIfEnabled (printAttributes);
+      break;
+    case 10:
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      phy.Set ("ChannelNumber", UintegerValue(44));
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      apDevice = wifi.Install (phy, macAp, wifiApNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // We expect channel 44, width 20, frequency 5220
+      NS_ASSERT (phySta->GetChannelNumber () == 44);
+      NS_ASSERT (phySta->GetChannelWidth () == 20);
+      NS_ASSERT (phySta->GetFrequency () == 5220);
+      PrintAttributesIfEnabled (printAttributes);
+      break;
+
+    case 11:
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      phy.Set ("ChannelNumber", UintegerValue(44));
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      apDevice = wifi.Install (phy, macAp, wifiApNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // Post-install reconfiguration to channel number 40
+      Config::Set ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelNumber", UintegerValue(40));
+      Config::Set ("/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelNumber", UintegerValue(40));
+      // We expect channel 40, width 20, frequency 5200
+      NS_ASSERT (phySta->GetChannelNumber () == 40);
+      NS_ASSERT (phySta->GetChannelWidth () == 20);
+      NS_ASSERT (phySta->GetFrequency () == 5200);
+      PrintAttributesIfEnabled (printAttributes);
+      break;
+
+    case 12:
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      phy.Set ("ChannelNumber", UintegerValue (44));
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      apDevice = wifi.Install (phy, macAp, wifiApNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // Post-install reconfiguration to channel width 40 MHz
+      Config::Set ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelWidth", UintegerValue(40));
+      Config::Set ("/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelWidth", UintegerValue(40));
+      // Although channel 44 is configured originally for 20 MHz, we 
+      // allow it to be used for 40 MHz here
+      NS_ASSERT (phySta->GetChannelNumber () == 44);
+      NS_ASSERT (phySta->GetChannelWidth () == 40);
+      NS_ASSERT (phySta->GetFrequency () == 5220);
+      PrintAttributesIfEnabled (printAttributes);
+      break;
+
+    case 13:
+      Config::SetDefault ("ns3::WifiPhy::ChannelNumber", UintegerValue (44));
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      apDevice = wifi.Install (phy, macAp, wifiApNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // Post-install reconfiguration to channel width 40 MHz
+      Config::Set ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelWidth", UintegerValue(40));
+      Config::Set ("/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelWidth", UintegerValue(40));
+      // Although channel 44 is configured originally for 20 MHz, we 
+      // allow it to be used for 40 MHz here
+      NS_ASSERT (phySta->GetChannelNumber () == 44);
+      NS_ASSERT (phySta->GetChannelWidth () == 40);
+      NS_ASSERT (phySta->GetFrequency () == 5220);
+      PrintAttributesIfEnabled (printAttributes);
+      break;
+
+    case 14:
+      // Test that setting Frequency to a non-standard value will zero the
+      // channel number
+      Config::SetDefault ("ns3::WifiPhy::Frequency", UintegerValue (5281));
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      apDevice = wifi.Install (phy, macAp, wifiApNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // We expect channel number to be zero since frequency doesn't match
+      NS_ASSERT (phySta->GetChannelNumber () == 0);
+      NS_ASSERT (phySta->GetChannelWidth () == 20);
+      NS_ASSERT (phySta->GetFrequency () == 5281);
+      PrintAttributesIfEnabled (printAttributes);
+      break;
+
+    case 15:
+      // Test that setting Frequency to a standard value will set the
+      // channel number correctly
+      Config::SetDefault ("ns3::WifiPhy::Frequency", UintegerValue (5500));
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get (0));
+      apDevice = wifi.Install (phy, macAp, wifiApNode.Get (0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // We expect channel number to be 100 due to frequency 5500
+      NS_ASSERT (phySta->GetChannelNumber () == 100);
+      NS_ASSERT (phySta->GetChannelWidth () == 20);
+      NS_ASSERT (phySta->GetFrequency () == 5500);
+      PrintAttributesIfEnabled (printAttributes);
+      break;
+
+    case 16:
+      // Define a new channel number
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get (0));
+      apDevice = wifi.Install (phy, macAp, wifiApNode.Get (0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // This case will error exit due to invalid channel number unless
+      // we provide the DefineChannelNumber() below
+      phySta->DefineChannelNumber (99, WIFI_PHY_STANDARD_80211n_5GHZ, 5185, 40);
+      phySta->SetAttribute ("ChannelNumber", UintegerValue (99));
+      PrintAttributesIfEnabled (printAttributes);
+      break;
+
+    case 17:
+      // Test how channel number behaves when frequency is non-standard
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      apDevice = wifi.Install (phy, macAp, wifiApNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      phySta->SetAttribute ("Frequency", UintegerValue (5181));
+      // We expect channel number to be 0 due to unknown center frequency 5181
+      NS_ASSERT (phySta->GetChannelNumber () == 0);
+      NS_ASSERT (phySta->GetChannelWidth () == 20);
+      NS_ASSERT (phySta->GetFrequency () == 5181);
+      phySta->SetAttribute ("Frequency", UintegerValue (5180));
+      // We expect channel number to be 36 due to known center frequency 5180
+      NS_ASSERT (phySta->GetChannelNumber () == 36);
+      NS_ASSERT (phySta->GetChannelWidth () == 20);
+      NS_ASSERT (phySta->GetFrequency () == 5180);
+      phySta->SetAttribute ("Frequency", UintegerValue (5179));
+      // We expect channel number to be 0 due to unknown center frequency 5179
+      NS_ASSERT (phySta->GetChannelNumber () == 0);
+      NS_ASSERT (phySta->GetChannelWidth () == 20);
+      NS_ASSERT (phySta->GetFrequency () == 5179);
+      phySta->SetAttribute ("ChannelNumber", UintegerValue (36));
+      NS_ASSERT (phySta->GetChannelNumber () == 36);
+      NS_ASSERT (phySta->GetChannelWidth () == 20);
+      NS_ASSERT (phySta->GetFrequency () == 5180);
+      PrintAttributesIfEnabled (printAttributes);
+      break;
+
+    case 18:
+      // Set both channel and frequency to consistent values
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      apDevice = wifi.Install (phy, macAp, wifiApNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      phySta->SetAttribute ("Frequency", UintegerValue (5200));
+      phySta->SetAttribute ("ChannelNumber", UintegerValue (40));
+      NS_ASSERT (phySta->GetChannelNumber () == 40);
+      NS_ASSERT (phySta->GetChannelWidth () == 20);
+      NS_ASSERT (phySta->GetFrequency () == 5200);
+      // Set both channel and frequency to inconsistent values
+      phySta->SetAttribute ("Frequency", UintegerValue (5200));
+      phySta->SetAttribute ("ChannelNumber", UintegerValue (36));
+      // We expect channel number to be 36 
+      NS_ASSERT (phySta->GetChannelNumber () == 36);
+      NS_ASSERT (phySta->GetChannelWidth () == 20);
+      NS_ASSERT (phySta->GetFrequency () == 5180);
+      phySta->SetAttribute ("ChannelNumber", UintegerValue (36));
+      phySta->SetAttribute ("Frequency", UintegerValue (5200));
+      // We expect channel number to be 40 
+      NS_ASSERT (phySta->GetChannelNumber () == 40);
+      NS_ASSERT (phySta->GetChannelWidth () == 20);
+      NS_ASSERT (phySta->GetFrequency () == 5200);
+      phySta->SetAttribute ("Frequency", UintegerValue (5179));
+      phySta->SetAttribute ("ChannelNumber", UintegerValue (36));
+      // We expect channel number to be 36 
+      NS_ASSERT (phySta->GetChannelNumber () == 36);
+      NS_ASSERT (phySta->GetChannelWidth () == 20);
+      NS_ASSERT (phySta->GetFrequency () == 5180);
+      phySta->SetAttribute ("ChannelNumber", UintegerValue (36));
+      phySta->SetAttribute ("Frequency", UintegerValue (5179));
+      // We expect channel number to be 0 
+      NS_ASSERT (phySta->GetChannelNumber () == 0);
+      NS_ASSERT (phySta->GetChannelWidth () == 20);
+      NS_ASSERT (phySta->GetFrequency () == 5179);
+      PrintAttributesIfEnabled (printAttributes);
+      break;
+
+    default:
+      std::cerr << "Invalid testcase number " << testCase << std::endl;
+      exit (1);
+      break;
+  }
+
+  // No need to Simulator::Run (); this is a configuration example
+  Simulator::Destroy ();
+}
diff -Naur ns-3.25/src/wifi/examples/wscript ns-3.26/src/wifi/examples/wscript
--- ns-3.25/src/wifi/examples/wscript	2016-10-03 20:57:08.464245947 -0700
+++ ns-3.26/src/wifi/examples/wscript	2016-10-03 19:49:01.754386856 -0700
@@ -19,3 +19,7 @@
     obj = bld.create_ns3_program('minstrel-ht-wifi-manager-example',
         ['core', 'network', 'wifi', 'stats', 'mobility', 'propagation'])
     obj.source = 'minstrel-ht-wifi-manager-example.cc'
+
+    obj = bld.create_ns3_program('wifi-phy-configuration',
+        ['core', 'network', 'config-store', 'wifi'])
+    obj.source = 'wifi-phy-configuration.cc'
diff -Naur ns-3.25/src/wifi/helper/spectrum-wifi-helper.cc ns-3.26/src/wifi/helper/spectrum-wifi-helper.cc
--- ns-3.25/src/wifi/helper/spectrum-wifi-helper.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/wifi/helper/spectrum-wifi-helper.cc	2016-10-03 19:49:01.757386833 -0700
@@ -0,0 +1,75 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ *          Sébastien Deronne <sebastien.deronne@gmail.com>
+ */
+
+#include "ns3/trace-helper.h"
+#include "spectrum-wifi-helper.h"
+#include "ns3/error-rate-model.h"
+#include "ns3/spectrum-channel.h"
+#include "ns3/spectrum-wifi-phy.h"
+#include "ns3/wifi-net-device.h"
+#include "ns3/names.h"
+#include "ns3/log.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("SpectrumWifiHelper");
+
+SpectrumWifiPhyHelper::SpectrumWifiPhyHelper ()
+  : m_channel (0)
+{
+  m_phy.SetTypeId ("ns3::SpectrumWifiPhy");
+}
+
+SpectrumWifiPhyHelper
+SpectrumWifiPhyHelper::Default (void)
+{
+  SpectrumWifiPhyHelper helper;
+  helper.SetErrorRateModel ("ns3::NistErrorRateModel");
+  return helper;
+}
+
+void
+SpectrumWifiPhyHelper::SetChannel (Ptr<SpectrumChannel> channel)
+{
+  m_channel = channel;
+}
+
+void
+SpectrumWifiPhyHelper::SetChannel (std::string channelName)
+{
+  Ptr<SpectrumChannel> channel = Names::Find<SpectrumChannel> (channelName);
+  m_channel = channel;
+}
+
+Ptr<WifiPhy>
+SpectrumWifiPhyHelper::Create (Ptr<Node> node, Ptr<NetDevice> device) const
+{
+  Ptr<SpectrumWifiPhy> phy = m_phy.Create<SpectrumWifiPhy> ();
+  phy->CreateWifiSpectrumPhyInterface (device);
+  Ptr<ErrorRateModel> error = m_errorRateModel.Create<ErrorRateModel> ();
+  phy->SetErrorRateModel (error);
+  phy->SetChannel (m_channel);
+  phy->SetDevice (device);
+  phy->SetMobility (node->GetObject<MobilityModel> ());
+  return phy;
+}
+
+} //namespace ns3
diff -Naur ns-3.25/src/wifi/helper/spectrum-wifi-helper.h ns-3.26/src/wifi/helper/spectrum-wifi-helper.h
--- ns-3.25/src/wifi/helper/spectrum-wifi-helper.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/wifi/helper/spectrum-wifi-helper.h	2016-10-03 19:49:01.757386833 -0700
@@ -0,0 +1,80 @@
+/* -*- 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 SPECTRUM_WIFI_HELPER_H
+#define SPECTRUM_WIFI_HELPER_H
+
+#include "wifi-helper.h"
+#include "ns3/trace-helper.h"
+
+namespace ns3 {
+
+class SpectrumChannel;
+
+/**
+ * \brief Make it easy to create and manage PHY objects for the spectrum model.
+ *
+ * The Pcap and ascii traces generated by the EnableAscii and EnablePcap methods defined
+ * in this class correspond to PHY-level traces and come to us via WifiPhyHelper
+ *
+ */
+class SpectrumWifiPhyHelper : public WifiPhyHelper
+{
+public:
+  /**
+   * Create a phy helper without any parameter set. The user must set
+   * them all to be able to call Install later.
+   */
+  SpectrumWifiPhyHelper ();
+
+  /**
+   * Create a phy helper in a default working state.
+   */
+  static SpectrumWifiPhyHelper Default (void);
+
+  /**
+   * \param channel the channel to associate to this helper
+   *
+   * Every PHY created by a call to Install is associated to this channel.
+   */
+  void SetChannel (Ptr<SpectrumChannel> channel);
+  /**
+   * \param channelName The name of the channel to associate to this helper
+   *
+   * Every PHY created by a call to Install is associated to this channel.
+   */
+  void SetChannel (std::string channelName);
+
+private:
+  /**
+   * \param node the node on which we wish to create a wifi PHY
+   * \param device the device within which this PHY will be created
+   * \returns a newly-created PHY object.
+   *
+   * This method implements the pure virtual method defined in \ref ns3::WifiPhyHelper.
+   */
+  virtual Ptr<WifiPhy> Create (Ptr<Node> node, Ptr<NetDevice> device) const;
+
+  Ptr<SpectrumChannel> m_channel;
+};
+
+} //namespace ns3
+
+#endif /* SPECTRUM_WIFI_HELPER_H */
diff -Naur ns-3.25/src/wifi/helper/wifi-helper.cc ns-3.26/src/wifi/helper/wifi-helper.cc
--- ns-3.25/src/wifi/helper/wifi-helper.cc	2016-10-03 20:57:08.469245908 -0700
+++ ns-3.26/src/wifi/helper/wifi-helper.cc	2016-10-03 19:49:01.758386826 -0700
@@ -29,6 +29,7 @@
 #include "ns3/minstrel-wifi-manager.h"
 #include "ns3/ap-wifi-mac.h"
 #include "ns3/wifi-phy.h"
+#include "ns3/ampdu-subframe-header.h"
 #include "ns3/wifi-remote-station-manager.h"
 #include "ns3/wifi-channel.h"
 #include "ns3/yans-wifi-channel.h"
@@ -36,8 +37,11 @@
 #include "ns3/propagation-loss-model.h"
 #include "ns3/mobility-model.h"
 #include "ns3/log.h"
-#include "ns3/config.h"
 #include "ns3/pointer.h"
+#include "ns3/radiotap-header.h"
+#include "ns3/pcap-file-wrapper.h"
+#include "ns3/abort.h"
+#include "ns3/config.h"
 #include "ns3/simulator.h"
 #include "ns3/names.h"
 
@@ -45,10 +49,618 @@
 
 NS_LOG_COMPONENT_DEFINE ("WifiHelper");
 
+static void
+AsciiPhyTransmitSinkWithContext (
+  Ptr<OutputStreamWrapper> stream,
+  std::string context,
+  Ptr<const Packet> p,
+  WifiMode mode,
+  WifiPreamble preamble,
+  uint8_t txLevel)
+{
+  NS_LOG_FUNCTION (stream << context << p << mode << preamble << txLevel);
+  *stream->GetStream () << "t " << Simulator::Now ().GetSeconds () << " " << context << " " << *p << std::endl;
+}
+
+static void
+AsciiPhyTransmitSinkWithoutContext (
+  Ptr<OutputStreamWrapper> stream,
+  Ptr<const Packet> p,
+  WifiMode mode,
+  WifiPreamble preamble,
+  uint8_t txLevel)
+{
+  NS_LOG_FUNCTION (stream << p << mode << preamble << txLevel);
+  *stream->GetStream () << "t " << Simulator::Now ().GetSeconds () << " " << *p << std::endl;
+}
+
+static void
+AsciiPhyReceiveSinkWithContext (
+  Ptr<OutputStreamWrapper> stream,
+  std::string context,
+  Ptr<const Packet> p,
+  double snr,
+  WifiMode mode,
+  enum WifiPreamble preamble)
+{
+  NS_LOG_FUNCTION (stream << context << p << snr << mode << preamble);
+  *stream->GetStream () << "r " << Simulator::Now ().GetSeconds () << " " << context << " " << *p << std::endl;
+}
+
+static void
+AsciiPhyReceiveSinkWithoutContext (
+  Ptr<OutputStreamWrapper> stream,
+  Ptr<const Packet> p,
+  double snr,
+  WifiMode mode,
+  enum WifiPreamble preamble)
+{
+  NS_LOG_FUNCTION (stream << p << snr << mode << preamble);
+  *stream->GetStream () << "r " << Simulator::Now ().GetSeconds () << " " << *p << std::endl;
+}
+
+WifiPhyHelper::WifiPhyHelper ()
+  : m_pcapDlt (PcapHelper::DLT_IEEE802_11)
+{
+}
+
 WifiPhyHelper::~WifiPhyHelper ()
 {
 }
 
+void
+WifiPhyHelper::Set (std::string name, const AttributeValue &v)
+{
+  m_phy.Set (name, v);
+}
+
+void
+WifiPhyHelper::SetErrorRateModel (std::string name,
+                                      std::string n0, const AttributeValue &v0,
+                                      std::string n1, const AttributeValue &v1,
+                                      std::string n2, const AttributeValue &v2,
+                                      std::string n3, const AttributeValue &v3,
+                                      std::string n4, const AttributeValue &v4,
+                                      std::string n5, const AttributeValue &v5,
+                                      std::string n6, const AttributeValue &v6,
+                                      std::string n7, const AttributeValue &v7)
+{
+  m_errorRateModel = ObjectFactory ();
+  m_errorRateModel.SetTypeId (name);
+  m_errorRateModel.Set (n0, v0);
+  m_errorRateModel.Set (n1, v1);
+  m_errorRateModel.Set (n2, v2);
+  m_errorRateModel.Set (n3, v3);
+  m_errorRateModel.Set (n4, v4);
+  m_errorRateModel.Set (n5, v5);
+  m_errorRateModel.Set (n6, v6);
+  m_errorRateModel.Set (n7, v7);
+}
+
+void
+WifiPhyHelper::PcapSniffTxEvent (
+  Ptr<PcapFileWrapper> file,
+  Ptr<const Packet>    packet,
+  uint16_t             channelFreqMhz,
+  uint16_t             channelNumber,
+  uint32_t             rate,
+  WifiPreamble         preamble,
+  WifiTxVector         txVector,
+  struct mpduInfo      aMpdu)
+{
+  uint32_t dlt = file->GetDataLinkType ();
+
+  switch (dlt)
+    {
+    case PcapHelper::DLT_IEEE802_11:
+      file->Write (Simulator::Now (), packet);
+      return;
+    case PcapHelper::DLT_PRISM_HEADER:
+      {
+        NS_FATAL_ERROR ("PcapSniffTxEvent(): DLT_PRISM_HEADER not implemented");
+        return;
+      }
+    case PcapHelper::DLT_IEEE802_11_RADIO:
+      {
+        Ptr<Packet> p = packet->Copy ();
+        RadiotapHeader header;
+        uint8_t frameFlags = RadiotapHeader::FRAME_FLAG_NONE;
+        header.SetTsft (Simulator::Now ().GetMicroSeconds ());
+
+        //Our capture includes the FCS, so we set the flag to say so.
+        frameFlags |= RadiotapHeader::FRAME_FLAG_FCS_INCLUDED;
+
+        if (preamble == WIFI_PREAMBLE_SHORT)
+          {
+            frameFlags |= RadiotapHeader::FRAME_FLAG_SHORT_PREAMBLE;
+          }
+
+        if (txVector.IsShortGuardInterval ())
+          {
+            frameFlags |= RadiotapHeader::FRAME_FLAG_SHORT_GUARD;
+          }
+
+        header.SetFrameFlags (frameFlags);
+        header.SetRate (rate);
+
+        uint16_t channelFlags = 0;
+        switch (rate)
+          {
+          case 2:  //1Mbps
+          case 4:  //2Mbps
+          case 10: //5Mbps
+          case 22: //11Mbps
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_CCK;
+            break;
+
+          default:
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_OFDM;
+            break;
+          }
+
+        if (channelFreqMhz < 2500)
+          {
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_SPECTRUM_2GHZ;
+          }
+        else
+          {
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_SPECTRUM_5GHZ;
+          }
+
+        header.SetChannelFrequencyAndFlags (channelFreqMhz, channelFlags);
+
+        if (preamble == WIFI_PREAMBLE_HT_MF || preamble == WIFI_PREAMBLE_HT_GF || preamble == WIFI_PREAMBLE_NONE)
+          {
+            uint8_t mcsRate = 0;
+            uint8_t mcsKnown = RadiotapHeader::MCS_KNOWN_NONE;
+            uint8_t mcsFlags = RadiotapHeader::MCS_FLAGS_NONE;
+
+            mcsKnown |= RadiotapHeader::MCS_KNOWN_INDEX;
+            mcsRate = rate - 128;
+
+            mcsKnown |= RadiotapHeader::MCS_KNOWN_BANDWIDTH;
+            if (txVector.GetChannelWidth () == 40)
+              {
+                mcsFlags |= RadiotapHeader::MCS_FLAGS_BANDWIDTH_40;
+              }
+
+            mcsKnown |= RadiotapHeader::MCS_KNOWN_GUARD_INTERVAL;
+            if (txVector.IsShortGuardInterval ())
+              {
+                mcsFlags |= RadiotapHeader::MCS_FLAGS_GUARD_INTERVAL;
+              }
+
+            mcsKnown |= RadiotapHeader::MCS_KNOWN_HT_FORMAT;
+            if (preamble == WIFI_PREAMBLE_HT_GF)
+              {
+                mcsFlags |= RadiotapHeader::MCS_FLAGS_HT_GREENFIELD;
+              }
+
+            mcsKnown |= RadiotapHeader::MCS_KNOWN_NESS;
+            if (txVector.GetNess () & 0x01) //bit 1
+              {
+                mcsFlags |= RadiotapHeader::MCS_FLAGS_NESS_BIT_0;
+              }
+            if (txVector.GetNess () & 0x02) //bit 2
+              {
+                mcsKnown |= RadiotapHeader::MCS_KNOWN_NESS_BIT_1;
+              }
+
+            mcsKnown |= RadiotapHeader::MCS_KNOWN_FEC_TYPE; //only BCC is currently supported
+
+            mcsKnown |= RadiotapHeader::MCS_KNOWN_STBC;
+            if (txVector.IsStbc ())
+              {
+                mcsFlags |= RadiotapHeader::MCS_FLAGS_STBC_STREAMS;
+              }
+
+            header.SetMcsFields (mcsKnown, mcsFlags, mcsRate);
+          }
+
+        if (txVector.IsAggregation ())
+          {
+            uint16_t ampduStatusFlags = RadiotapHeader::A_MPDU_STATUS_NONE;
+            ampduStatusFlags |= RadiotapHeader::A_MPDU_STATUS_LAST_KNOWN;
+            /* For PCAP file, MPDU Delimiter and Padding should be removed by the MAC Driver */
+            AmpduSubframeHeader hdr;
+            uint32_t extractedLength;
+            p->RemoveHeader (hdr);
+            extractedLength = hdr.GetLength ();
+            p = p->CreateFragment (0, static_cast<uint32_t> (extractedLength));
+            if (aMpdu.type == LAST_MPDU_IN_AGGREGATE || (hdr.GetEof () == true && hdr.GetLength () > 0))
+              {
+                ampduStatusFlags |= RadiotapHeader::A_MPDU_STATUS_LAST;
+              }
+            header.SetAmpduStatus (aMpdu.mpduRefNumber, ampduStatusFlags, hdr.GetCrc ());
+          }
+
+        if (preamble == WIFI_PREAMBLE_VHT)
+          {
+            uint16_t vhtKnown = RadiotapHeader::VHT_KNOWN_NONE;
+            uint8_t vhtFlags = RadiotapHeader::VHT_FLAGS_NONE;
+            uint8_t vhtBandwidth = 0;
+            uint8_t vhtMcsNss[4] = {0,0,0,0};
+            uint8_t vhtCoding = 0;
+            uint8_t vhtGroupId = 0;
+            uint16_t vhtPartialAid = 0;
+
+            vhtKnown |= RadiotapHeader::VHT_KNOWN_STBC;
+            if (txVector.IsStbc ())
+              {
+                vhtFlags |= RadiotapHeader::VHT_FLAGS_STBC;
+              }
+
+            vhtKnown |= RadiotapHeader::VHT_KNOWN_GUARD_INTERVAL;
+            if (txVector.IsShortGuardInterval ())
+              {
+                vhtFlags |= RadiotapHeader::VHT_FLAGS_GUARD_INTERVAL;
+              }
+
+            vhtKnown |= RadiotapHeader::VHT_KNOWN_BEAMFORMED; //Beamforming is currently not supported
+
+            vhtKnown |= RadiotapHeader::VHT_KNOWN_BANDWIDTH;
+            //not all bandwidth values are currently supported
+            if (txVector.GetChannelWidth () == 40)
+              {
+                vhtBandwidth = 1;
+              }
+            else if (txVector.GetChannelWidth () == 80)
+              {
+                vhtBandwidth = 4;
+              }
+            else if (txVector.GetChannelWidth () == 160)
+              {
+                vhtBandwidth = 11;
+              }
+
+            //only SU PPDUs are currently supported
+            vhtMcsNss[0] |= (txVector.GetNss () & 0x0f);
+            vhtMcsNss[0] |= (((rate - 128) << 4) & 0xf0);
+
+            header.SetVhtFields (vhtKnown, vhtFlags, vhtBandwidth, vhtMcsNss, vhtCoding, vhtGroupId, vhtPartialAid);
+          }
+
+        p->AddHeader (header);
+        file->Write (Simulator::Now (), p);
+        return;
+      }
+    default:
+      NS_ABORT_MSG ("PcapSniffTxEvent(): Unexpected data link type " << dlt);
+    }
+}
+
+void
+WifiPhyHelper::PcapSniffRxEvent (
+  Ptr<PcapFileWrapper>  file,
+  Ptr<const Packet>     packet,
+  uint16_t              channelFreqMhz,
+  uint16_t              channelNumber,
+  uint32_t              rate,
+  WifiPreamble          preamble,
+  WifiTxVector          txVector,
+  struct mpduInfo       aMpdu,
+  struct signalNoiseDbm signalNoise)
+{
+  uint32_t dlt = file->GetDataLinkType ();
+
+  switch (dlt)
+    {
+    case PcapHelper::DLT_IEEE802_11:
+      file->Write (Simulator::Now (), packet);
+      return;
+    case PcapHelper::DLT_PRISM_HEADER:
+      {
+        NS_FATAL_ERROR ("PcapSniffRxEvent(): DLT_PRISM_HEADER not implemented");
+        return;
+      }
+    case PcapHelper::DLT_IEEE802_11_RADIO:
+      {
+        Ptr<Packet> p = packet->Copy ();
+        RadiotapHeader header;
+        uint8_t frameFlags = RadiotapHeader::FRAME_FLAG_NONE;
+        header.SetTsft (Simulator::Now ().GetMicroSeconds ());
+
+        //Our capture includes the FCS, so we set the flag to say so.
+        frameFlags |= RadiotapHeader::FRAME_FLAG_FCS_INCLUDED;
+
+        if (preamble == WIFI_PREAMBLE_SHORT)
+          {
+            frameFlags |= RadiotapHeader::FRAME_FLAG_SHORT_PREAMBLE;
+          }
+
+        if (txVector.IsShortGuardInterval ())
+          {
+            frameFlags |= RadiotapHeader::FRAME_FLAG_SHORT_GUARD;
+          }
+
+        header.SetFrameFlags (frameFlags);
+        header.SetRate (rate);
+
+        uint16_t channelFlags = 0;
+        switch (rate)
+          {
+          case 2:  //1Mbps
+          case 4:  //2Mbps
+          case 10: //5Mbps
+          case 22: //11Mbps
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_CCK;
+            break;
+
+          default:
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_OFDM;
+            break;
+          }
+
+        if (channelFreqMhz < 2500)
+          {
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_SPECTRUM_2GHZ;
+          }
+        else
+          {
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_SPECTRUM_5GHZ;
+          }
+
+        header.SetChannelFrequencyAndFlags (channelFreqMhz, channelFlags);
+
+        header.SetAntennaSignalPower (signalNoise.signal);
+        header.SetAntennaNoisePower (signalNoise.noise);
+
+        if (preamble == WIFI_PREAMBLE_HT_MF || preamble == WIFI_PREAMBLE_HT_GF || preamble == WIFI_PREAMBLE_NONE)
+          {
+            uint8_t mcsRate = 0;
+            uint8_t mcsKnown = RadiotapHeader::MCS_KNOWN_NONE;
+            uint8_t mcsFlags = RadiotapHeader::MCS_FLAGS_NONE;
+
+            mcsKnown |= RadiotapHeader::MCS_KNOWN_INDEX;
+            mcsRate = rate - 128;
+
+            mcsKnown |= RadiotapHeader::MCS_KNOWN_BANDWIDTH;
+            if (txVector.GetChannelWidth () == 40)
+              {
+                mcsFlags |= RadiotapHeader::MCS_FLAGS_BANDWIDTH_40;
+              }
+
+            mcsKnown |= RadiotapHeader::MCS_KNOWN_GUARD_INTERVAL;
+            if (txVector.IsShortGuardInterval ())
+              {
+                mcsFlags |= RadiotapHeader::MCS_FLAGS_GUARD_INTERVAL;
+              }
+
+            mcsKnown |= RadiotapHeader::MCS_KNOWN_HT_FORMAT;
+            if (preamble == WIFI_PREAMBLE_HT_GF)
+              {
+                mcsFlags |= RadiotapHeader::MCS_FLAGS_HT_GREENFIELD;
+              }
+
+            mcsKnown |= RadiotapHeader::MCS_KNOWN_NESS;
+            if (txVector.GetNess () & 0x01) //bit 1
+              {
+                mcsFlags |= RadiotapHeader::MCS_FLAGS_NESS_BIT_0;
+              }
+            if (txVector.GetNess () & 0x02) //bit 2
+              {
+                mcsKnown |= RadiotapHeader::MCS_KNOWN_NESS_BIT_1;
+              }
+
+            mcsKnown |= RadiotapHeader::MCS_KNOWN_FEC_TYPE; //only BCC is currently supported
+
+            mcsKnown |= RadiotapHeader::MCS_KNOWN_STBC;
+            if (txVector.IsStbc ())
+              {
+                mcsFlags |= RadiotapHeader::MCS_FLAGS_STBC_STREAMS;
+              }
+
+            header.SetMcsFields (mcsKnown, mcsFlags, mcsRate);
+          }
+
+        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;
+            uint32_t extractedLength;
+            p->RemoveHeader (hdr);
+            extractedLength = hdr.GetLength ();
+            p = p->CreateFragment (0, static_cast<uint32_t> (extractedLength));
+            if (aMpdu.type == LAST_MPDU_IN_AGGREGATE || (hdr.GetEof () == true && hdr.GetLength () > 0))
+              {
+                ampduStatusFlags |= RadiotapHeader::A_MPDU_STATUS_LAST;
+              }
+            header.SetAmpduStatus (aMpdu.mpduRefNumber, ampduStatusFlags, hdr.GetCrc ());
+          }
+
+        if (preamble == WIFI_PREAMBLE_VHT)
+          {
+            uint16_t vhtKnown = RadiotapHeader::VHT_KNOWN_NONE;
+            uint8_t vhtFlags = RadiotapHeader::VHT_FLAGS_NONE;
+            uint8_t vhtBandwidth = 0;
+            uint8_t vhtMcsNss[4] = {0,0,0,0};
+            uint8_t vhtCoding = 0;
+            uint8_t vhtGroupId = 0;
+            uint16_t vhtPartialAid = 0;
+
+            vhtKnown |= RadiotapHeader::VHT_KNOWN_STBC;
+            if (txVector.IsStbc ())
+              {
+                vhtFlags |= RadiotapHeader::VHT_FLAGS_STBC;
+              }
+
+            vhtKnown |= RadiotapHeader::VHT_KNOWN_GUARD_INTERVAL;
+            if (txVector.IsShortGuardInterval ())
+              {
+                vhtFlags |= RadiotapHeader::VHT_FLAGS_GUARD_INTERVAL;
+              }
+
+            vhtKnown |= RadiotapHeader::VHT_KNOWN_BEAMFORMED; //Beamforming is currently not supported
+
+            vhtKnown |= RadiotapHeader::VHT_KNOWN_BANDWIDTH;
+            //not all bandwidth values are currently supported
+            if (txVector.GetChannelWidth () == 40)
+              {
+                vhtBandwidth = 1;
+              }
+            else if (txVector.GetChannelWidth () == 80)
+              {
+                vhtBandwidth = 4;
+              }
+            else if (txVector.GetChannelWidth () == 160)
+              {
+                vhtBandwidth = 11;
+              }
+
+            //only SU PPDUs are currently supported
+            vhtMcsNss[0] |= (txVector.GetNss () & 0x0f);
+            vhtMcsNss[0] |= (((rate - 128) << 4) & 0xf0);
+
+            header.SetVhtFields (vhtKnown, vhtFlags, vhtBandwidth, vhtMcsNss, vhtCoding, vhtGroupId, vhtPartialAid);
+          }
+
+        p->AddHeader (header);
+        file->Write (Simulator::Now (), p);
+        return;
+      }
+    default:
+      NS_ABORT_MSG ("PcapSniffRxEvent(): Unexpected data link type " << dlt);
+    }
+}
+
+void
+WifiPhyHelper::SetPcapDataLinkType (enum SupportedPcapDataLinkTypes dlt)
+{
+  switch (dlt)
+    {
+    case DLT_IEEE802_11:
+      m_pcapDlt = PcapHelper::DLT_IEEE802_11;
+      return;
+    case DLT_PRISM_HEADER:
+      m_pcapDlt = PcapHelper::DLT_PRISM_HEADER;
+      return;
+    case DLT_IEEE802_11_RADIO:
+      m_pcapDlt = PcapHelper::DLT_IEEE802_11_RADIO;
+      return;
+    default:
+      NS_ABORT_MSG ("WifiPhyHelper::SetPcapFormat(): Unexpected format");
+    }
+}
+
+PcapHelper::DataLinkType
+WifiPhyHelper::GetPcapDataLinkType (void) const
+{
+  return m_pcapDlt;
+}
+
+void
+WifiPhyHelper::EnablePcapInternal (std::string prefix, Ptr<NetDevice> nd, bool promiscuous, bool explicitFilename)
+{
+  //All of the Pcap enable functions vector through here including the ones
+  //that are wandering through all of devices on perhaps all of the nodes in
+  //the system. We can only deal with devices of type WifiNetDevice.
+  Ptr<WifiNetDevice> device = nd->GetObject<WifiNetDevice> ();
+  if (device == 0)
+    {
+      NS_LOG_INFO ("WifiHelper::EnablePcapInternal(): Device " << &device << " not of type ns3::WifiNetDevice");
+      return;
+    }
+
+  Ptr<WifiPhy> phy = device->GetPhy ();
+  NS_ABORT_MSG_IF (phy == 0, "WifiPhyHelper::EnablePcapInternal(): Phy layer in WifiNetDevice must be set");
+
+  PcapHelper pcapHelper;
+
+  std::string filename;
+  if (explicitFilename)
+    {
+      filename = prefix;
+    }
+  else
+    {
+      filename = pcapHelper.GetFilenameFromDevice (prefix, device);
+    }
+
+  Ptr<PcapFileWrapper> file = pcapHelper.CreateFile (filename, std::ios::out, m_pcapDlt);
+
+  phy->TraceConnectWithoutContext ("MonitorSnifferTx", MakeBoundCallback (&WifiPhyHelper::PcapSniffTxEvent, file));
+  phy->TraceConnectWithoutContext ("MonitorSnifferRx", MakeBoundCallback (&WifiPhyHelper::PcapSniffRxEvent, file));
+}
+
+void
+WifiPhyHelper::EnableAsciiInternal (
+  Ptr<OutputStreamWrapper> stream,
+  std::string prefix,
+  Ptr<NetDevice> nd,
+  bool explicitFilename)
+{
+  //All of the ascii enable functions vector through here including the ones
+  //that are wandering through all of devices on perhaps all of the nodes in
+  //the system. We can only deal with devices of type WifiNetDevice.
+  Ptr<WifiNetDevice> device = nd->GetObject<WifiNetDevice> ();
+  if (device == 0)
+    {
+      NS_LOG_INFO ("WifiHelper::EnableAsciiInternal(): Device " << device << " not of type ns3::WifiNetDevice");
+      return;
+    }
+
+  //Our trace sinks are going to use packet printing, so we have to make sure
+  //that is turned on.
+  Packet::EnablePrinting ();
+
+  uint32_t nodeid = nd->GetNode ()->GetId ();
+  uint32_t deviceid = nd->GetIfIndex ();
+  std::ostringstream oss;
+
+  //If we are not provided an OutputStreamWrapper, we are expected to create
+  //one using the usual trace filename conventions and write our traces
+  //without a context since there will be one file per context and therefore
+  //the context would be redundant.
+  if (stream == 0)
+    {
+      //Set up an output stream object to deal with private ofstream copy
+      //constructor and lifetime issues. Let the helper decide the actual
+      //name of the file given the prefix.
+      AsciiTraceHelper asciiTraceHelper;
+
+      std::string filename;
+      if (explicitFilename)
+        {
+          filename = prefix;
+        }
+      else
+        {
+          filename = asciiTraceHelper.GetFilenameFromDevice (prefix, device);
+        }
+
+      Ptr<OutputStreamWrapper> theStream = asciiTraceHelper.CreateFileStream (filename);
+      //We could go poking through the phy and the state looking for the
+      //correct trace source, but we can let Config deal with that with
+      //some search cost.  Since this is presumably happening at topology
+      //creation time, it doesn't seem much of a price to pay.
+      oss.str ("");
+      oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::WifiNetDevice/Phy/State/RxOk";
+      Config::ConnectWithoutContext (oss.str (), MakeBoundCallback (&AsciiPhyReceiveSinkWithoutContext, theStream));
+
+      oss.str ("");
+      oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::WifiNetDevice/Phy/State/Tx";
+      Config::ConnectWithoutContext (oss.str (), MakeBoundCallback (&AsciiPhyTransmitSinkWithoutContext, theStream));
+
+      return;
+    }
+
+  //If we are provided an OutputStreamWrapper, we are expected to use it, and
+  //to provide a context. We are free to come up with our own context if we
+  //want, and use the AsciiTraceHelper Hook*WithContext functions, but for
+  //compatibility and simplicity, we just use Config::Connect and let it deal
+  //with coming up with a context.
+  oss.str ("");
+  oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::WifiNetDevice/Phy/State/RxOk";
+  Config::Connect (oss.str (), MakeBoundCallback (&AsciiPhyReceiveSinkWithContext, stream));
+
+  oss.str ("");
+  oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::WifiNetDevice/Phy/State/Tx";
+  Config::Connect (oss.str (), MakeBoundCallback (&AsciiPhyTransmitSinkWithContext, stream));
+}
+
 WifiHelper::~WifiHelper ()
 {
 }
diff -Naur ns-3.25/src/wifi/helper/wifi-helper.h ns-3.26/src/wifi/helper/wifi-helper.h
--- ns-3.25/src/wifi/helper/wifi-helper.h	2016-10-03 20:57:08.469245908 -0700
+++ ns-3.26/src/wifi/helper/wifi-helper.h	2016-10-03 19:49:01.759386818 -0700
@@ -31,6 +31,7 @@
 #include "ns3/wifi-phy-standard.h"
 #include "ns3/trace-helper.h"
 #include "ns3/wifi-mac-helper.h"
+#include "ns3/wifi-phy.h"
 
 namespace ns3 {
 
@@ -44,9 +45,11 @@
  * This base class must be implemented by new PHY implementation which wish to integrate
  * with the \ref ns3::WifiHelper class.
  */
-class WifiPhyHelper
+class WifiPhyHelper : public PcapHelperForDevice,
+                      public AsciiTraceHelperForDevice
 {
 public:
+  WifiPhyHelper ();
   virtual ~WifiPhyHelper ();
 
   /**
@@ -63,6 +66,158 @@
    * by other Wifi device variants such as WaveNetDevice.
    */
   virtual Ptr<WifiPhy> Create (Ptr<Node> node, Ptr<NetDevice> device) const = 0;
+  
+  /**
+   * \param name the name of the attribute to set
+   * \param v the value of the attribute
+   *
+   * Set an attribute of the underlying PHY object.
+   */
+  void Set (std::string name, const AttributeValue &v);
+  /**
+   * \param name the name of the error rate model to set.
+   * \param n0 the name of the attribute to set
+   * \param v0 the value of the attribute to set
+   * \param n1 the name of the attribute to set
+   * \param v1 the value of the attribute to set
+   * \param n2 the name of the attribute to set
+   * \param v2 the value of the attribute to set
+   * \param n3 the name of the attribute to set
+   * \param v3 the value of the attribute to set
+   * \param n4 the name of the attribute to set
+   * \param v4 the value of the attribute to set
+   * \param n5 the name of the attribute to set
+   * \param v5 the value of the attribute to set
+   * \param n6 the name of the attribute to set
+   * \param v6 the value of the attribute to set
+   * \param n7 the name of the attribute to set
+   * \param v7 the value of the attribute to set
+   *
+   * Set the error rate model and its attributes to use when Install is called.
+   */
+  void SetErrorRateModel (std::string name,
+                          std::string n0 = "", const AttributeValue &v0 = EmptyAttributeValue (),
+                          std::string n1 = "", const AttributeValue &v1 = EmptyAttributeValue (),
+                          std::string n2 = "", const AttributeValue &v2 = EmptyAttributeValue (),
+                          std::string n3 = "", const AttributeValue &v3 = EmptyAttributeValue (),
+                          std::string n4 = "", const AttributeValue &v4 = EmptyAttributeValue (),
+                          std::string n5 = "", const AttributeValue &v5 = EmptyAttributeValue (),
+                          std::string n6 = "", const AttributeValue &v6 = EmptyAttributeValue (),
+                          std::string n7 = "", const AttributeValue &v7 = EmptyAttributeValue ());
+  
+  /**
+   * An enumeration of the pcap data link types (DLTs) which this helper
+   * supports.  See http://wiki.wireshark.org/Development/LibpcapFileFormat
+   * for more information on these formats.
+   */
+  enum SupportedPcapDataLinkTypes
+  {
+    DLT_IEEE802_11       = PcapHelper::DLT_IEEE802_11,       /**< IEEE 802.11 Wireless LAN headers on packets */
+    DLT_PRISM_HEADER     = PcapHelper::DLT_PRISM_HEADER,     /**< Include Prism monitor mode information */
+    DLT_IEEE802_11_RADIO = PcapHelper::DLT_IEEE802_11_RADIO  /**< Include Radiotap link layer information */
+  };
+
+  /**
+   * Set the data link type of PCAP traces to be used. This function has to be
+   * called before EnablePcap(), so that the header of the pcap file can be
+   * written correctly.
+   *
+   * @see SupportedPcapDataLinkTypes
+   *
+   * @param dlt The data link type of the pcap file (and packets) to be used
+   */
+  void SetPcapDataLinkType (enum SupportedPcapDataLinkTypes dlt);
+
+  /**
+   * Get the data link type of PCAP traces to be used.
+   *
+   * @see SupportedPcapDataLinkTypes
+   *
+   * @returns The data link type of the pcap file (and packets) to be used
+   */
+  PcapHelper::DataLinkType GetPcapDataLinkType (void) const;
+
+protected:
+  /**
+   * \param file the pcap file wrapper
+   * \param packet the packet
+   * \param channelFreqMhz the channel frequency
+   * \param channelNumber the channel number
+   * \param rate the PHY bitrate
+   * \param preamble the preamble type
+   * \param txVector the TXVECTOR
+   * \param aMpdu the A-MPDU information
+   *
+   * Handle tx pcap.
+   */
+  static void PcapSniffTxEvent (Ptr<PcapFileWrapper> file,
+                                Ptr<const Packet> packet,
+                                uint16_t channelFreqMhz,
+                                uint16_t channelNumber,
+                                uint32_t rate,
+                                WifiPreamble preamble,
+                                WifiTxVector txVector,
+                                struct mpduInfo aMpdu);
+  /**
+   * \param file the pcap file wrapper
+   * \param packet the packet
+   * \param channelFreqMhz the channel frequency
+   * \param channelNumber the channel number
+   * \param rate the PHY bitrate
+   * \param preamble the preamble type
+   * \param txVector the TXVECTOR
+   * \param aMpdu the A-MPDU information
+   * \param signalNoise the rx signal and noise information
+   *
+   * Handle rx pcap.
+   */
+  static void PcapSniffRxEvent (Ptr<PcapFileWrapper> file,
+                                Ptr<const Packet> packet,
+                                uint16_t channelFreqMhz,
+                                uint16_t channelNumber,
+                                uint32_t rate,
+                                WifiPreamble preamble,
+                                WifiTxVector txVector,
+                                struct mpduInfo aMpdu,
+                                struct signalNoiseDbm signalNoise);
+    
+  ObjectFactory m_phy;
+  ObjectFactory m_errorRateModel;
+    
+private:
+  /**
+   * @brief Enable pcap output the indicated net device.
+   *
+   * NetDevice-specific implementation mechanism for hooking the trace and
+   * writing to the trace file.
+   *
+   * @param prefix Filename prefix to use for pcap files.
+   * @param nd Net device for which you want to enable tracing.
+   * @param promiscuous If true capture all possible packets available at the device.
+   * @param explicitFilename Treat the prefix as an explicit filename if true
+   */
+  virtual void EnablePcapInternal (std::string prefix,
+                                   Ptr<NetDevice> nd,
+                                   bool promiscuous,
+                                   bool explicitFilename);
+
+  /**
+   * \brief Enable ascii trace output on the indicated net device.
+   *
+   * NetDevice-specific implementation mechanism for hooking the trace and
+   * writing to the trace file.
+   *
+   * \param stream The output stream object to use when logging ascii traces.
+   * \param prefix Filename prefix to use for ascii trace files.
+   * \param nd Net device for which you want to enable tracing.
+   * \param explicitFilename Treat the prefix as an explicit filename if true
+   */
+  virtual void EnableAsciiInternal (Ptr<OutputStreamWrapper> stream,
+                                    std::string prefix,
+                                    Ptr<NetDevice> nd,
+                                    bool explicitFilename);
+    
+  PcapHelper::DataLinkType m_pcapDlt;
 };
 
 
@@ -98,7 +253,8 @@
    * \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) NS_DEPRECATED;
+  NS_DEPRECATED
+  static WifiHelper Default (void);
 
   /**
    * \param type the type of ns3::WifiRemoteStationManager to create.
diff -Naur ns-3.25/src/wifi/helper/yans-wifi-helper.cc ns-3.26/src/wifi/helper/yans-wifi-helper.cc
--- ns-3.25/src/wifi/helper/yans-wifi-helper.cc	2016-10-03 20:57:08.471245893 -0700
+++ ns-3.26/src/wifi/helper/yans-wifi-helper.cc	2016-10-03 19:49:01.761386804 -0700
@@ -26,70 +26,14 @@
 #include "ns3/propagation-delay-model.h"
 #include "ns3/yans-wifi-channel.h"
 #include "ns3/yans-wifi-phy.h"
-#include "ns3/ampdu-subframe-header.h"
 #include "ns3/wifi-net-device.h"
-#include "ns3/radiotap-header.h"
-#include "ns3/pcap-file-wrapper.h"
-#include "ns3/simulator.h"
-#include "ns3/config.h"
 #include "ns3/names.h"
-#include "ns3/abort.h"
 #include "ns3/log.h"
 
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("YansWifiHelper");
 
-static void
-AsciiPhyTransmitSinkWithContext (
-  Ptr<OutputStreamWrapper> stream,
-  std::string context,
-  Ptr<const Packet> p,
-  WifiMode mode,
-  WifiPreamble preamble,
-  uint8_t txLevel)
-{
-  NS_LOG_FUNCTION (stream << context << p << mode << preamble << txLevel);
-  *stream->GetStream () << "t " << Simulator::Now ().GetSeconds () << " " << context << " " << *p << std::endl;
-}
-
-static void
-AsciiPhyTransmitSinkWithoutContext (
-  Ptr<OutputStreamWrapper> stream,
-  Ptr<const Packet> p,
-  WifiMode mode,
-  WifiPreamble preamble,
-  uint8_t txLevel)
-{
-  NS_LOG_FUNCTION (stream << p << mode << preamble << txLevel);
-  *stream->GetStream () << "t " << Simulator::Now ().GetSeconds () << " " << *p << std::endl;
-}
-
-static void
-AsciiPhyReceiveSinkWithContext (
-  Ptr<OutputStreamWrapper> stream,
-  std::string context,
-  Ptr<const Packet> p,
-  double snr,
-  WifiMode mode,
-  enum WifiPreamble preamble)
-{
-  NS_LOG_FUNCTION (stream << context << p << snr << mode << preamble);
-  *stream->GetStream () << "r " << Simulator::Now ().GetSeconds () << " " << context << " " << *p << std::endl;
-}
-
-static void
-AsciiPhyReceiveSinkWithoutContext (
-  Ptr<OutputStreamWrapper> stream,
-  Ptr<const Packet> p,
-  double snr,
-  WifiMode mode,
-  enum WifiPreamble preamble)
-{
-  NS_LOG_FUNCTION (stream << p << snr << mode << preamble);
-  *stream->GetStream () << "r " << Simulator::Now ().GetSeconds () << " " << *p << std::endl;
-}
-
 YansWifiChannelHelper::YansWifiChannelHelper ()
 {
 }
@@ -181,8 +125,7 @@
 }
 
 YansWifiPhyHelper::YansWifiPhyHelper ()
-  : m_channel (0),
-    m_pcapDlt (PcapHelper::DLT_IEEE802_11)
+  : m_channel (0)
 {
   m_phy.SetTypeId ("ns3::YansWifiPhy");
 }
@@ -208,35 +151,6 @@
   m_channel = channel;
 }
 
-void
-YansWifiPhyHelper::Set (std::string name, const AttributeValue &v)
-{
-  m_phy.Set (name, v);
-}
-
-void
-YansWifiPhyHelper::SetErrorRateModel (std::string name,
-                                      std::string n0, const AttributeValue &v0,
-                                      std::string n1, const AttributeValue &v1,
-                                      std::string n2, const AttributeValue &v2,
-                                      std::string n3, const AttributeValue &v3,
-                                      std::string n4, const AttributeValue &v4,
-                                      std::string n5, const AttributeValue &v5,
-                                      std::string n6, const AttributeValue &v6,
-                                      std::string n7, const AttributeValue &v7)
-{
-  m_errorRateModel = ObjectFactory ();
-  m_errorRateModel.SetTypeId (name);
-  m_errorRateModel.Set (n0, v0);
-  m_errorRateModel.Set (n1, v1);
-  m_errorRateModel.Set (n2, v2);
-  m_errorRateModel.Set (n3, v3);
-  m_errorRateModel.Set (n4, v4);
-  m_errorRateModel.Set (n5, v5);
-  m_errorRateModel.Set (n6, v6);
-  m_errorRateModel.Set (n7, v7);
-}
-
 Ptr<WifiPhy>
 YansWifiPhyHelper::Create (Ptr<Node> node, Ptr<NetDevice> device) const
 {
@@ -248,528 +162,4 @@
   return phy;
 }
 
-static void
-PcapSniffTxEvent (
-  Ptr<PcapFileWrapper> file,
-  Ptr<const Packet>    packet,
-  uint16_t             channelFreqMhz,
-  uint16_t             channelNumber,
-  uint32_t             rate,
-  WifiPreamble         preamble,
-  WifiTxVector         txVector,
-  struct mpduInfo      aMpdu)
-{
-  uint32_t dlt = file->GetDataLinkType ();
-
-  switch (dlt)
-    {
-    case PcapHelper::DLT_IEEE802_11:
-      file->Write (Simulator::Now (), packet);
-      return;
-    case PcapHelper::DLT_PRISM_HEADER:
-      {
-        NS_FATAL_ERROR ("PcapSniffTxEvent(): DLT_PRISM_HEADER not implemented");
-        return;
-      }
-    case PcapHelper::DLT_IEEE802_11_RADIO:
-      {
-        Ptr<Packet> p = packet->Copy ();
-        RadiotapHeader header;
-        uint8_t frameFlags = RadiotapHeader::FRAME_FLAG_NONE;
-        header.SetTsft (Simulator::Now ().GetMicroSeconds ());
-
-        //Our capture includes the FCS, so we set the flag to say so.
-        frameFlags |= RadiotapHeader::FRAME_FLAG_FCS_INCLUDED;
-
-        if (preamble == WIFI_PREAMBLE_SHORT)
-          {
-            frameFlags |= RadiotapHeader::FRAME_FLAG_SHORT_PREAMBLE;
-          }
-
-        if (txVector.IsShortGuardInterval ())
-          {
-            frameFlags |= RadiotapHeader::FRAME_FLAG_SHORT_GUARD;
-          }
-
-        header.SetFrameFlags (frameFlags);
-        header.SetRate (rate);
-
-        uint16_t channelFlags = 0;
-        switch (rate)
-          {
-          case 2:  //1Mbps
-          case 4:  //2Mbps
-          case 10: //5Mbps
-          case 22: //11Mbps
-            channelFlags |= RadiotapHeader::CHANNEL_FLAG_CCK;
-            break;
-
-          default:
-            channelFlags |= RadiotapHeader::CHANNEL_FLAG_OFDM;
-            break;
-          }
-
-        if (channelFreqMhz < 2500)
-          {
-            channelFlags |= RadiotapHeader::CHANNEL_FLAG_SPECTRUM_2GHZ;
-          }
-        else
-          {
-            channelFlags |= RadiotapHeader::CHANNEL_FLAG_SPECTRUM_5GHZ;
-          }
-
-        header.SetChannelFrequencyAndFlags (channelFreqMhz, channelFlags);
-
-        if (preamble == WIFI_PREAMBLE_HT_MF || preamble == WIFI_PREAMBLE_HT_GF || preamble == WIFI_PREAMBLE_NONE)
-          {
-            uint8_t mcsRate = 0;
-            uint8_t mcsKnown = RadiotapHeader::MCS_KNOWN_NONE;
-            uint8_t mcsFlags = RadiotapHeader::MCS_FLAGS_NONE;
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_INDEX;
-            mcsRate = rate - 128;
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_BANDWIDTH;
-            if (txVector.GetChannelWidth () == 40)
-              {
-                mcsFlags |= RadiotapHeader::MCS_FLAGS_BANDWIDTH_40;
-              }
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_GUARD_INTERVAL;
-            if (txVector.IsShortGuardInterval ())
-              {
-                mcsFlags |= RadiotapHeader::MCS_FLAGS_GUARD_INTERVAL;
-              }
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_HT_FORMAT;
-            if (preamble == WIFI_PREAMBLE_HT_GF)
-              {
-                mcsFlags |= RadiotapHeader::MCS_FLAGS_HT_GREENFIELD;
-              }
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_NESS;
-            if (txVector.GetNess () & 0x01) //bit 1
-              {
-                mcsFlags |= RadiotapHeader::MCS_FLAGS_NESS_BIT_0;
-              }
-            if (txVector.GetNess () & 0x02) //bit 2
-              {
-                mcsKnown |= RadiotapHeader::MCS_KNOWN_NESS_BIT_1;
-              }
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_FEC_TYPE; //only BCC is currently supported
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_STBC;
-            if (txVector.IsStbc ())
-              {
-                mcsFlags |= RadiotapHeader::MCS_FLAGS_STBC_STREAMS;
-              }
-
-            header.SetMcsFields (mcsKnown, mcsFlags, mcsRate);
-          }
-
-        if (txVector.IsAggregation ())
-          {
-            uint16_t ampduStatusFlags = RadiotapHeader::A_MPDU_STATUS_NONE;
-            ampduStatusFlags |= RadiotapHeader::A_MPDU_STATUS_LAST_KNOWN;
-            /* For PCAP file, MPDU Delimiter and Padding should be removed by the MAC Driver */
-            AmpduSubframeHeader hdr;
-            uint32_t extractedLength;
-            p->RemoveHeader (hdr);
-            extractedLength = hdr.GetLength ();
-            p = p->CreateFragment (0, static_cast<uint32_t> (extractedLength));
-            if (aMpdu.type == LAST_MPDU_IN_AGGREGATE || (hdr.GetEof () == true && hdr.GetLength () > 0))
-              {
-                ampduStatusFlags |= RadiotapHeader::A_MPDU_STATUS_LAST;
-              }
-            header.SetAmpduStatus (aMpdu.mpduRefNumber, ampduStatusFlags, hdr.GetCrc ());
-          }
-
-        if (preamble == WIFI_PREAMBLE_VHT)
-          {
-            uint16_t vhtKnown = RadiotapHeader::VHT_KNOWN_NONE;
-            uint8_t vhtFlags = RadiotapHeader::VHT_FLAGS_NONE;
-            uint8_t vhtBandwidth = 0;
-            uint8_t vhtMcsNss[4] = {0,0,0,0};
-            uint8_t vhtCoding = 0;
-            uint8_t vhtGroupId = 0;
-            uint16_t vhtPartialAid = 0;
-
-            vhtKnown |= RadiotapHeader::VHT_KNOWN_STBC;
-            if (txVector.IsStbc ())
-              {
-                vhtFlags |= RadiotapHeader::VHT_FLAGS_STBC;
-              }
-
-            vhtKnown |= RadiotapHeader::VHT_KNOWN_GUARD_INTERVAL;
-            if (txVector.IsShortGuardInterval ())
-              {
-                vhtFlags |= RadiotapHeader::VHT_FLAGS_GUARD_INTERVAL;
-              }
-
-            vhtKnown |= RadiotapHeader::VHT_KNOWN_BEAMFORMED; //Beamforming is currently not supported
-
-            vhtKnown |= RadiotapHeader::VHT_KNOWN_BANDWIDTH;
-            //not all bandwidth values are currently supported
-            if (txVector.GetChannelWidth () == 40)
-              {
-                vhtBandwidth = 1;
-              }
-            else if (txVector.GetChannelWidth () == 80)
-              {
-                vhtBandwidth = 4;
-              }
-            else if (txVector.GetChannelWidth () == 160)
-              {
-                vhtBandwidth = 11;
-              }
-
-            //only SU PPDUs are currently supported
-            vhtMcsNss[0] |= (txVector.GetNss () & 0x0f);
-            vhtMcsNss[0] |= (((rate - 128) << 4) & 0xf0);
-
-            header.SetVhtFields (vhtKnown, vhtFlags, vhtBandwidth, vhtMcsNss, vhtCoding, vhtGroupId, vhtPartialAid);
-          }
-
-        p->AddHeader (header);
-        file->Write (Simulator::Now (), p);
-        return;
-      }
-    default:
-      NS_ABORT_MSG ("PcapSniffTxEvent(): Unexpected data link type " << dlt);
-    }
-}
-
-static void
-PcapSniffRxEvent (
-  Ptr<PcapFileWrapper>  file,
-  Ptr<const Packet>     packet,
-  uint16_t              channelFreqMhz,
-  uint16_t              channelNumber,
-  uint32_t              rate,
-  WifiPreamble          preamble,
-  WifiTxVector          txVector,
-  struct mpduInfo       aMpdu,
-  struct signalNoiseDbm signalNoise)
-{
-  uint32_t dlt = file->GetDataLinkType ();
-
-  switch (dlt)
-    {
-    case PcapHelper::DLT_IEEE802_11:
-      file->Write (Simulator::Now (), packet);
-      return;
-    case PcapHelper::DLT_PRISM_HEADER:
-      {
-        NS_FATAL_ERROR ("PcapSniffRxEvent(): DLT_PRISM_HEADER not implemented");
-        return;
-      }
-    case PcapHelper::DLT_IEEE802_11_RADIO:
-      {
-        Ptr<Packet> p = packet->Copy ();
-        RadiotapHeader header;
-        uint8_t frameFlags = RadiotapHeader::FRAME_FLAG_NONE;
-        header.SetTsft (Simulator::Now ().GetMicroSeconds ());
-
-        //Our capture includes the FCS, so we set the flag to say so.
-        frameFlags |= RadiotapHeader::FRAME_FLAG_FCS_INCLUDED;
-
-        if (preamble == WIFI_PREAMBLE_SHORT)
-          {
-            frameFlags |= RadiotapHeader::FRAME_FLAG_SHORT_PREAMBLE;
-          }
-
-        if (txVector.IsShortGuardInterval ())
-          {
-            frameFlags |= RadiotapHeader::FRAME_FLAG_SHORT_GUARD;
-          }
-
-        header.SetFrameFlags (frameFlags);
-        header.SetRate (rate);
-
-        uint16_t channelFlags = 0;
-        switch (rate)
-          {
-          case 2:  //1Mbps
-          case 4:  //2Mbps
-          case 10: //5Mbps
-          case 22: //11Mbps
-            channelFlags |= RadiotapHeader::CHANNEL_FLAG_CCK;
-            break;
-
-          default:
-            channelFlags |= RadiotapHeader::CHANNEL_FLAG_OFDM;
-            break;
-          }
-
-        if (channelFreqMhz < 2500)
-          {
-            channelFlags |= RadiotapHeader::CHANNEL_FLAG_SPECTRUM_2GHZ;
-          }
-        else
-          {
-            channelFlags |= RadiotapHeader::CHANNEL_FLAG_SPECTRUM_5GHZ;
-          }
-
-        header.SetChannelFrequencyAndFlags (channelFreqMhz, channelFlags);
-
-        header.SetAntennaSignalPower (signalNoise.signal);
-        header.SetAntennaNoisePower (signalNoise.noise);
-
-        if (preamble == WIFI_PREAMBLE_HT_MF || preamble == WIFI_PREAMBLE_HT_GF || preamble == WIFI_PREAMBLE_NONE)
-          {
-            uint8_t mcsRate = 0;
-            uint8_t mcsKnown = RadiotapHeader::MCS_KNOWN_NONE;
-            uint8_t mcsFlags = RadiotapHeader::MCS_FLAGS_NONE;
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_INDEX;
-            mcsRate = rate - 128;
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_BANDWIDTH;
-            if (txVector.GetChannelWidth () == 40)
-              {
-                mcsFlags |= RadiotapHeader::MCS_FLAGS_BANDWIDTH_40;
-              }
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_GUARD_INTERVAL;
-            if (txVector.IsShortGuardInterval ())
-              {
-                mcsFlags |= RadiotapHeader::MCS_FLAGS_GUARD_INTERVAL;
-              }
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_HT_FORMAT;
-            if (preamble == WIFI_PREAMBLE_HT_GF)
-              {
-                mcsFlags |= RadiotapHeader::MCS_FLAGS_HT_GREENFIELD;
-              }
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_NESS;
-            if (txVector.GetNess () & 0x01) //bit 1
-              {
-                mcsFlags |= RadiotapHeader::MCS_FLAGS_NESS_BIT_0;
-              }
-            if (txVector.GetNess () & 0x02) //bit 2
-              {
-                mcsKnown |= RadiotapHeader::MCS_KNOWN_NESS_BIT_1;
-              }
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_FEC_TYPE; //only BCC is currently supported
-
-            mcsKnown |= RadiotapHeader::MCS_KNOWN_STBC;
-            if (txVector.IsStbc ())
-              {
-                mcsFlags |= RadiotapHeader::MCS_FLAGS_STBC_STREAMS;
-              }
-
-            header.SetMcsFields (mcsKnown, mcsFlags, mcsRate);
-          }
-
-        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;
-            uint32_t extractedLength;
-            p->RemoveHeader (hdr);
-            extractedLength = hdr.GetLength ();
-            p = p->CreateFragment (0, static_cast<uint32_t> (extractedLength));
-            if (aMpdu.type == LAST_MPDU_IN_AGGREGATE || (hdr.GetEof () == true && hdr.GetLength () > 0))
-              {
-                ampduStatusFlags |= RadiotapHeader::A_MPDU_STATUS_LAST;
-              }
-            header.SetAmpduStatus (aMpdu.mpduRefNumber, ampduStatusFlags, hdr.GetCrc ());
-          }
-
-        if (preamble == WIFI_PREAMBLE_VHT)
-          {
-            uint16_t vhtKnown = RadiotapHeader::VHT_KNOWN_NONE;
-            uint8_t vhtFlags = RadiotapHeader::VHT_FLAGS_NONE;
-            uint8_t vhtBandwidth = 0;
-            uint8_t vhtMcsNss[4] = {0,0,0,0};
-            uint8_t vhtCoding = 0;
-            uint8_t vhtGroupId = 0;
-            uint16_t vhtPartialAid = 0;
-
-            vhtKnown |= RadiotapHeader::VHT_KNOWN_STBC;
-            if (txVector.IsStbc ())
-              {
-                vhtFlags |= RadiotapHeader::VHT_FLAGS_STBC;
-              }
-
-            vhtKnown |= RadiotapHeader::VHT_KNOWN_GUARD_INTERVAL;
-            if (txVector.IsShortGuardInterval ())
-              {
-                vhtFlags |= RadiotapHeader::VHT_FLAGS_GUARD_INTERVAL;
-              }
-
-            vhtKnown |= RadiotapHeader::VHT_KNOWN_BEAMFORMED; //Beamforming is currently not supported
-
-            vhtKnown |= RadiotapHeader::VHT_KNOWN_BANDWIDTH;
-            //not all bandwidth values are currently supported
-            if (txVector.GetChannelWidth () == 40)
-              {
-                vhtBandwidth = 1;
-              }
-            else if (txVector.GetChannelWidth () == 80)
-              {
-                vhtBandwidth = 4;
-              }
-            else if (txVector.GetChannelWidth () == 160)
-              {
-                vhtBandwidth = 11;
-              }
-
-            //only SU PPDUs are currently supported
-            vhtMcsNss[0] |= (txVector.GetNss () & 0x0f);
-            vhtMcsNss[0] |= (((rate - 128) << 4) & 0xf0);
-
-            header.SetVhtFields (vhtKnown, vhtFlags, vhtBandwidth, vhtMcsNss, vhtCoding, vhtGroupId, vhtPartialAid);
-          }
-
-        p->AddHeader (header);
-        file->Write (Simulator::Now (), p);
-        return;
-      }
-    default:
-      NS_ABORT_MSG ("PcapSniffRxEvent(): Unexpected data link type " << dlt);
-    }
-}
-
-void
-YansWifiPhyHelper::SetPcapDataLinkType (enum SupportedPcapDataLinkTypes dlt)
-{
-  switch (dlt)
-    {
-    case DLT_IEEE802_11:
-      m_pcapDlt = PcapHelper::DLT_IEEE802_11;
-      return;
-    case DLT_PRISM_HEADER:
-      m_pcapDlt = PcapHelper::DLT_PRISM_HEADER;
-      return;
-    case DLT_IEEE802_11_RADIO:
-      m_pcapDlt = PcapHelper::DLT_IEEE802_11_RADIO;
-      return;
-    default:
-      NS_ABORT_MSG ("YansWifiPhyHelper::SetPcapFormat(): Unexpected format");
-    }
-}
-
-uint32_t
-YansWifiPhyHelper::GetPcapDataLinkType (void) const
-{
-  return m_pcapDlt;
-}
-
-void
-YansWifiPhyHelper::EnablePcapInternal (std::string prefix, Ptr<NetDevice> nd, bool promiscuous, bool explicitFilename)
-{
-  //All of the Pcap enable functions vector through here including the ones
-  //that are wandering through all of devices on perhaps all of the nodes in
-  //the system. We can only deal with devices of type WifiNetDevice.
-  Ptr<WifiNetDevice> device = nd->GetObject<WifiNetDevice> ();
-  if (device == 0)
-    {
-      NS_LOG_INFO ("YansWifiHelper::EnablePcapInternal(): Device " << &device << " not of type ns3::WifiNetDevice");
-      return;
-    }
-
-  Ptr<WifiPhy> phy = device->GetPhy ();
-  NS_ABORT_MSG_IF (phy == 0, "YansWifiPhyHelper::EnablePcapInternal(): Phy layer in WifiNetDevice must be set");
-
-  PcapHelper pcapHelper;
-
-  std::string filename;
-  if (explicitFilename)
-    {
-      filename = prefix;
-    }
-  else
-    {
-      filename = pcapHelper.GetFilenameFromDevice (prefix, device);
-    }
-
-  Ptr<PcapFileWrapper> file = pcapHelper.CreateFile (filename, std::ios::out, m_pcapDlt);
-
-  phy->TraceConnectWithoutContext ("MonitorSnifferTx", MakeBoundCallback (&PcapSniffTxEvent, file));
-  phy->TraceConnectWithoutContext ("MonitorSnifferRx", MakeBoundCallback (&PcapSniffRxEvent, file));
-}
-
-void
-YansWifiPhyHelper::EnableAsciiInternal (
-  Ptr<OutputStreamWrapper> stream,
-  std::string prefix,
-  Ptr<NetDevice> nd,
-  bool explicitFilename)
-{
-  //All of the ascii enable functions vector through here including the ones
-  //that are wandering through all of devices on perhaps all of the nodes in
-  //the system. We can only deal with devices of type WifiNetDevice.
-  Ptr<WifiNetDevice> device = nd->GetObject<WifiNetDevice> ();
-  if (device == 0)
-    {
-      NS_LOG_INFO ("YansWifiHelper::EnableAsciiInternal(): Device " << device << " not of type ns3::WifiNetDevice");
-      return;
-    }
-
-  //Our trace sinks are going to use packet printing, so we have to make sure
-  //that is turned on.
-  Packet::EnablePrinting ();
-
-  uint32_t nodeid = nd->GetNode ()->GetId ();
-  uint32_t deviceid = nd->GetIfIndex ();
-  std::ostringstream oss;
-
-  //If we are not provided an OutputStreamWrapper, we are expected to create
-  //one using the usual trace filename conventions and write our traces
-  //without a context since there will be one file per context and therefore
-  //the context would be redundant.
-  if (stream == 0)
-    {
-      //Set up an output stream object to deal with private ofstream copy
-      //constructor and lifetime issues. Let the helper decide the actual
-      //name of the file given the prefix.
-      AsciiTraceHelper asciiTraceHelper;
-
-      std::string filename;
-      if (explicitFilename)
-        {
-          filename = prefix;
-        }
-      else
-        {
-          filename = asciiTraceHelper.GetFilenameFromDevice (prefix, device);
-        }
-
-      Ptr<OutputStreamWrapper> theStream = asciiTraceHelper.CreateFileStream (filename);
-      //We could go poking through the phy and the state looking for the
-      //correct trace source, but we can let Config deal with that with
-      //some search cost.  Since this is presumably happening at topology
-      //creation time, it doesn't seem much of a price to pay.
-      oss.str ("");
-      oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::WifiNetDevice/Phy/State/RxOk";
-      Config::ConnectWithoutContext (oss.str (), MakeBoundCallback (&AsciiPhyReceiveSinkWithoutContext, theStream));
-
-      oss.str ("");
-      oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::WifiNetDevice/Phy/State/Tx";
-      Config::ConnectWithoutContext (oss.str (), MakeBoundCallback (&AsciiPhyTransmitSinkWithoutContext, theStream));
-
-      return;
-    }
-
-  //If we are provided an OutputStreamWrapper, we are expected to use it, and
-  //to provide a context. We are free to come up with our own context if we
-  //want, and use the AsciiTraceHelper Hook*WithContext functions, but for
-  //compatibility and simplicity, we just use Config::Connect and let it deal
-  //with coming up with a context.
-  oss.str ("");
-  oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::WifiNetDevice/Phy/State/RxOk";
-  Config::Connect (oss.str (), MakeBoundCallback (&AsciiPhyReceiveSinkWithContext, stream));
-
-  oss.str ("");
-  oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::WifiNetDevice/Phy/State/Tx";
-  Config::Connect (oss.str (), MakeBoundCallback (&AsciiPhyTransmitSinkWithContext, stream));
-}
-
 } //namespace ns3
diff -Naur ns-3.25/src/wifi/helper/yans-wifi-helper.h ns-3.26/src/wifi/helper/yans-wifi-helper.h
--- ns-3.25/src/wifi/helper/yans-wifi-helper.h	2016-10-03 20:57:08.472245885 -0700
+++ ns-3.26/src/wifi/helper/yans-wifi-helper.h	2016-10-03 19:49:01.761386804 -0700
@@ -157,9 +157,7 @@
  * in this class correspond to PHY-level traces and come to us via WifiPhyHelper
  *
  */
-class YansWifiPhyHelper : public WifiPhyHelper,
-                          public PcapHelperForDevice,
-                          public AsciiTraceHelperForDevice
+class YansWifiPhyHelper : public WifiPhyHelper
 {
 public:
   /**
@@ -185,75 +183,6 @@
    * Every PHY created by a call to Install is associated to this channel.
    */
   void SetChannel (std::string channelName);
-  /**
-   * \param name the name of the attribute to set
-   * \param v the value of the attribute
-   *
-   * Set an attribute of the underlying PHY object.
-   */
-  void Set (std::string name, const AttributeValue &v);
-  /**
-   * \param name the name of the error rate model to set.
-   * \param n0 the name of the attribute to set
-   * \param v0 the value of the attribute to set
-   * \param n1 the name of the attribute to set
-   * \param v1 the value of the attribute to set
-   * \param n2 the name of the attribute to set
-   * \param v2 the value of the attribute to set
-   * \param n3 the name of the attribute to set
-   * \param v3 the value of the attribute to set
-   * \param n4 the name of the attribute to set
-   * \param v4 the value of the attribute to set
-   * \param n5 the name of the attribute to set
-   * \param v5 the value of the attribute to set
-   * \param n6 the name of the attribute to set
-   * \param v6 the value of the attribute to set
-   * \param n7 the name of the attribute to set
-   * \param v7 the value of the attribute to set
-   *
-   * Set the error rate model and its attributes to use when Install is called.
-   */
-  void SetErrorRateModel (std::string name,
-                          std::string n0 = "", const AttributeValue &v0 = EmptyAttributeValue (),
-                          std::string n1 = "", const AttributeValue &v1 = EmptyAttributeValue (),
-                          std::string n2 = "", const AttributeValue &v2 = EmptyAttributeValue (),
-                          std::string n3 = "", const AttributeValue &v3 = EmptyAttributeValue (),
-                          std::string n4 = "", const AttributeValue &v4 = EmptyAttributeValue (),
-                          std::string n5 = "", const AttributeValue &v5 = EmptyAttributeValue (),
-                          std::string n6 = "", const AttributeValue &v6 = EmptyAttributeValue (),
-                          std::string n7 = "", const AttributeValue &v7 = EmptyAttributeValue ());
-
-  /**
-   * An enumeration of the pcap data link types (DLTs) which this helper
-   * supports.  See http://wiki.wireshark.org/Development/LibpcapFileFormat
-   * for more information on these formats.
-   */
-  enum SupportedPcapDataLinkTypes
-  {
-    DLT_IEEE802_11       = PcapHelper::DLT_IEEE802_11,       /**< IEEE 802.11 Wireless LAN headers on packets */
-    DLT_PRISM_HEADER     = PcapHelper::DLT_PRISM_HEADER,     /**< Include Prism monitor mode information */
-    DLT_IEEE802_11_RADIO = PcapHelper::DLT_IEEE802_11_RADIO  /**< Include Radiotap link layer information */
-  };
-
-  /**
-   * Set the data link type of PCAP traces to be used. This function has to be
-   * called before EnablePcap(), so that the header of the pcap file can be
-   * written correctly.
-   *
-   * @see SupportedPcapDataLinkTypes
-   *
-   * @param dlt The data link type of the pcap file (and packets) to be used
-   */
-  void SetPcapDataLinkType (enum SupportedPcapDataLinkTypes dlt);
-
-  /**
-   * Get the data link type of PCAP traces to be used.
-   *
-   * @see SupportedPcapDataLinkTypes
-   *
-   * @returns The data link type of the pcap file (and packets) to be used
-   */
-  uint32_t GetPcapDataLinkType (void) const;
 
 private:
   /**
@@ -265,42 +194,7 @@
    */
   virtual Ptr<WifiPhy> Create (Ptr<Node> node, Ptr<NetDevice> device) const;
 
-  /**
-   * @brief Enable pcap output the indicated net device.
-   *
-   * NetDevice-specific implementation mechanism for hooking the trace and
-   * writing to the trace file.
-   *
-   * @param prefix Filename prefix to use for pcap files.
-   * @param nd Net device for which you want to enable tracing.
-   * @param promiscuous If true capture all possible packets available at the device.
-   * @param explicitFilename Treat the prefix as an explicit filename if true
-   */
-  virtual void EnablePcapInternal (std::string prefix,
-                                   Ptr<NetDevice> nd,
-                                   bool promiscuous,
-                                   bool explicitFilename);
-
-  /**
-   * \brief Enable ascii trace output on the indicated net device.
-   *
-   * NetDevice-specific implementation mechanism for hooking the trace and
-   * writing to the trace file.
-   *
-   * \param stream The output stream object to use when logging ascii traces.
-   * \param prefix Filename prefix to use for ascii trace files.
-   * \param nd Net device for which you want to enable tracing.
-   * \param explicitFilename Treat the prefix as an explicit filename if true
-   */
-  virtual void EnableAsciiInternal (Ptr<OutputStreamWrapper> stream,
-                                    std::string prefix,
-                                    Ptr<NetDevice> nd,
-                                    bool explicitFilename);
-
-  ObjectFactory m_phy;
-  ObjectFactory m_errorRateModel;
   Ptr<YansWifiChannel> m_channel;
-  uint32_t m_pcapDlt;
 };
 
 } //namespace ns3
diff -Naur ns-3.25/src/wifi/model/aarfcd-wifi-manager.cc ns-3.26/src/wifi/model/aarfcd-wifi-manager.cc
--- ns-3.25/src/wifi/model/aarfcd-wifi-manager.cc	2016-10-03 20:57:08.473245877 -0700
+++ ns-3.26/src/wifi/model/aarfcd-wifi-manager.cc	2016-10-03 19:49:01.764386781 -0700
@@ -404,5 +404,26 @@
   station->m_rtsWnd = m_minRtsWnd;
 }
 
+void
+AarfcdWifiManager::SetHtSupported (bool enable)
+{
+  //HT is not supported by this algorithm.
+  if (enable)
+    {
+      NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support HT rates");
+    }
+}
+
+void
+AarfcdWifiManager::SetVhtSupported (bool enable)
+{
+  //VHT is not supported by this algorithm.
+  if (enable)
+    {
+      NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support VHT rates");
+    }
+}
+
+
 
 } //namespace ns3
diff -Naur ns-3.25/src/wifi/model/aarfcd-wifi-manager.h ns-3.26/src/wifi/model/aarfcd-wifi-manager.h
--- ns-3.25/src/wifi/model/aarfcd-wifi-manager.h	2016-10-03 20:57:08.474245870 -0700
+++ ns-3.26/src/wifi/model/aarfcd-wifi-manager.h	2016-10-03 19:49:01.764386781 -0700
@@ -35,6 +35,10 @@
  * The implementation available here was done by Federico Maguolo for a very early development
  * version of ns-3. Federico died before merging this work in ns-3 itself so his code was ported
  * to ns-3 later without his supervision.
+ *
+ * This RAA does not support HT or VHT modes and will error exit
+ * if the user tries to configure this RAA with a Wi-Fi MAC that
+ * has VhtSupported or HtSupported set.
  */
 class AarfcdWifiManager : public WifiRemoteStationManager
 {
@@ -43,6 +47,10 @@
   AarfcdWifiManager ();
   virtual ~AarfcdWifiManager ();
 
+  // Inherited from WifiRemoteStationManager
+  virtual void SetHtSupported (bool enable);
+  virtual void SetVhtSupported (bool enable);
+
 private:
   // overriden from base class
   virtual WifiRemoteStation * DoCreateStation (void) const;
diff -Naur ns-3.25/src/wifi/model/aarf-wifi-manager.cc ns-3.26/src/wifi/model/aarf-wifi-manager.cc
--- ns-3.25/src/wifi/model/aarf-wifi-manager.cc	2016-10-03 20:57:08.472245885 -0700
+++ ns-3.26/src/wifi/model/aarf-wifi-manager.cc	2016-10-03 19:49:01.762386796 -0700
@@ -273,4 +273,24 @@
   return true;
 }
 
+void
+AarfWifiManager::SetHtSupported (bool enable)
+{
+  //HT is not supported by this algorithm.
+  if (enable)
+    {
+      NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support HT rates");
+    }
+}
+
+void
+AarfWifiManager::SetVhtSupported (bool enable)
+{
+  //VHT is not supported by this algorithm.
+  if (enable)
+    {
+      NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support VHT rates");
+    }
+}
+
 } //namespace ns3
diff -Naur ns-3.25/src/wifi/model/aarf-wifi-manager.h ns-3.26/src/wifi/model/aarf-wifi-manager.h
--- ns-3.25/src/wifi/model/aarf-wifi-manager.h	2016-10-03 20:57:08.473245877 -0700
+++ ns-3.26/src/wifi/model/aarf-wifi-manager.h	2016-10-03 19:49:01.763386789 -0700
@@ -33,6 +33,10 @@
  * was initially described in <i>IEEE 802.11 Rate Adaptation:
  * A Practical Approach</i>, by M. Lacage, M.H. Manshaei, and
  * T. Turletti.
+ *
+ * This RAA does not support HT or VHT modes and will error exit
+ * if the user tries to configure this RAA with a Wi-Fi MAC that
+ * has VhtSupported or HtSupported set.
  */
 class AarfWifiManager : public WifiRemoteStationManager
 {
@@ -40,6 +44,10 @@
   static TypeId GetTypeId (void);
   AarfWifiManager ();
   virtual ~AarfWifiManager ();
+
+  // Inherited from WifiRemoteStationManager
+  virtual void SetHtSupported (bool enable);
+  virtual void SetVhtSupported (bool enable);
 private:
   //overriden from base class
   virtual WifiRemoteStation * DoCreateStation (void) const;
diff -Naur ns-3.25/src/wifi/model/adhoc-wifi-mac.cc ns-3.26/src/wifi/model/adhoc-wifi-mac.cc
--- ns-3.25/src/wifi/model/adhoc-wifi-mac.cc	2016-10-03 20:57:08.474245870 -0700
+++ ns-3.26/src/wifi/model/adhoc-wifi-mac.cc	2016-10-03 19:49:01.764386781 -0700
@@ -26,7 +26,6 @@
 #include "ns3/string.h"
 #include "ns3/boolean.h"
 #include "ns3/trace-source-accessor.h"
-#include "qos-tag.h"
 #include "mac-low.h"
 #include "dcf-manager.h"
 #include "mac-rx-middle.h"
@@ -178,6 +177,22 @@
   NS_ASSERT (!hdr->IsCtl ());
   Mac48Address from = hdr->GetAddr2 ();
   Mac48Address to = hdr->GetAddr1 ();
+  if (m_stationManager->IsBrandNew (from))
+    {
+      //In ad hoc mode, we assume that every destination supports all
+      //the rates we support.
+      if (m_htSupported || m_vhtSupported)
+        {
+          m_stationManager->AddAllSupportedMcs (from);
+          m_stationManager->AddStationHtCapabilities (from, GetHtCapabilities());
+        }
+      if (m_vhtSupported)
+        {
+          m_stationManager->AddStationVhtCapabilities (from, GetVhtCapabilities());
+        }
+      m_stationManager->AddAllSupportedModes (from);
+      m_stationManager->RecordDisassociated (from);
+    }
   if (hdr->IsData ())
     {
       if (hdr->IsQosData () && hdr->IsQosAmsdu ())
diff -Naur ns-3.25/src/wifi/model/ampdu-subframe-header.cc ns-3.26/src/wifi/model/ampdu-subframe-header.cc
--- ns-3.25/src/wifi/model/ampdu-subframe-header.cc	2016-10-03 20:57:08.475245862 -0700
+++ ns-3.26/src/wifi/model/ampdu-subframe-header.cc	2016-10-03 19:49:01.765386773 -0700
@@ -20,6 +20,7 @@
 
 #include "ampdu-subframe-header.h"
 #include "ns3/address-utils.h"
+#include <iomanip>
 
 namespace ns3 {
 
@@ -81,7 +82,10 @@
 void
 AmpduSubframeHeader::Print (std::ostream &os) const
 {
-  os << "EOF = " << m_eof << "length = " << m_length << ", CRC = " << m_crc << ", Signature = " << m_sig;
+  os << "EOF = " << m_eof << ", length = " << m_length;
+  char previousFillChar = os.fill ('0');
+  os << ", CRC = 0x" << std::hex << std::setw (2) << (uint16_t) m_crc << ", Signature = 0x" << (uint16_t) m_sig << std::dec;
+  os.fill (previousFillChar);
 }
 
 void
@@ -93,6 +97,7 @@
 void
 AmpduSubframeHeader::SetSig ()
 {
+  // Per 802.11 standard, the unique pattern is set to the value 0x4E.
   m_sig = 0x4E;
 }
 
diff -Naur ns-3.25/src/wifi/model/ampdu-tag.cc ns-3.26/src/wifi/model/ampdu-tag.cc
--- ns-3.25/src/wifi/model/ampdu-tag.cc	2016-10-03 20:57:08.476245854 -0700
+++ ns-3.26/src/wifi/model/ampdu-tag.cc	2016-10-03 19:49:01.766386766 -0700
@@ -15,7 +15,8 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- * Author: Ghada Badawy <gbadawy@gmail.com>
+ * Authors: Ghada Badawy <gbadawy@gmail.com>
+ *          Sébastien Deronne <sebastien.deronne@gmail.com>
  */
 
 #include "ampdu-tag.h"
@@ -33,7 +34,7 @@
     .SetParent<Tag> ()
     .SetGroupName ("Wifi")
     .AddConstructor<AmpduTag> ()
-    .AddAttribute ("Ampdu Exists", "The value that indicates that the packet contains an AMPDU",
+    .AddAttribute ("AmpduExists", "The value that indicates that the packet contains an AMPDU",
                    UintegerValue (false),
                    MakeUintegerAccessor (&AmpduTag::GetAmpdu),
                    MakeUintegerChecker<uint8_t> ())
@@ -48,7 +49,9 @@
 }
 
 AmpduTag::AmpduTag ()
-  : m_ampdu (0)
+  : m_ampdu (0),
+    m_nbOfMpdus (0),
+    m_duration (Seconds(0))
 {
 }
 
@@ -59,30 +62,42 @@
 }
 
 void
-AmpduTag::SetNoOfMpdus (uint8_t noofmpdus)
+AmpduTag::SetRemainingNbOfMpdus (uint8_t nbofmpdus)
 {
-  NS_ASSERT (noofmpdus <= 64);
-  m_noOfMpdus = noofmpdus;
+  NS_ASSERT (nbofmpdus <= 64);
+  m_nbOfMpdus = nbofmpdus;
+}
+
+void
+AmpduTag::SetRemainingAmpduDuration (Time duration)
+{
+  NS_ASSERT (m_duration <= MilliSeconds(10));
+  m_duration = duration;
 }
 
 uint32_t
 AmpduTag::GetSerializedSize (void) const
 {
-  return 2;
+  return (2 + sizeof (Time));
 }
 
 void
 AmpduTag::Serialize (TagBuffer i) const
 {
   i.WriteU8 (m_ampdu);
-  i.WriteU8 (m_noOfMpdus);
+  i.WriteU8 (m_nbOfMpdus);
+  int64_t duration = m_duration.GetTimeStep ();
+  i.Write ((const uint8_t *)&duration, sizeof(int64_t));
 }
 
 void
 AmpduTag::Deserialize (TagBuffer i)
 {
   m_ampdu = i.ReadU8 ();
-  m_noOfMpdus = i.ReadU8 ();
+  m_nbOfMpdus = i.ReadU8 ();
+  int64_t duration;
+  i.Read ((uint8_t *)&duration, 8);
+  m_duration = Time (duration);
 }
 
 bool
@@ -92,15 +107,23 @@
 }
 
 uint8_t
-AmpduTag::GetNoOfMpdus () const
+AmpduTag::GetRemainingNbOfMpdus () const
+{
+  return m_nbOfMpdus;
+}
+
+Time
+AmpduTag::GetRemainingAmpduDuration () const
 {
-  return m_noOfMpdus;
+  return m_duration;
 }
 
 void
 AmpduTag::Print (std::ostream &os) const
 {
-  os << "A-MPDU exists=" << m_ampdu;
+  os << "A-MPDU exists=" << m_ampdu
+     << " Remaining number of MPDUs=" << m_nbOfMpdus
+     << " Remaining A-MPDU duration=" << m_duration;
 }
 
 } //namespace ns3
diff -Naur ns-3.25/src/wifi/model/ampdu-tag.h ns-3.26/src/wifi/model/ampdu-tag.h
--- ns-3.25/src/wifi/model/ampdu-tag.h	2016-10-03 20:57:08.476245854 -0700
+++ ns-3.26/src/wifi/model/ampdu-tag.h	2016-10-03 19:49:01.766386766 -0700
@@ -15,13 +15,15 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- * Author: Ghada Badawy <gbadawy@gmail.com>
+ * Authors: Ghada Badawy <gbadawy@gmail.com>
+ *          Sébastien Deronne <sebastien.deronne@gmail.com>
  */
 
 #ifndef AMPDU_TAG_H
 #define AMPDU_TAG_H
 
 #include "ns3/packet.h"
+#include "ns3/nstime.h"
 
 namespace ns3 {
 
@@ -48,11 +50,17 @@
    */
   void SetAmpdu (bool supported);
   /**
-   * \param noofmpdus the number of MPDUs
+   * \param nbofmpdus the remaining number of MPDUs
    *
-   * Set the number of MPDUs in the A-MPDU.
+   * Set the remaining number of MPDUs in the A-MPDU.
    */
-  void SetNoOfMpdus (uint8_t noofmpdus);
+  void SetRemainingNbOfMpdus (uint8_t nbofmpdus);
+  /**
+   * \param duration the remaining duration of the A-MPDU
+   *
+   * Set the remaining duration of the A-MPDU.
+   */
+  void SetRemainingAmpduDuration (Time duration);
 
   virtual void Serialize (TagBuffer i) const;
   virtual void Deserialize (TagBuffer i);
@@ -67,15 +75,22 @@
    */
   bool GetAmpdu (void) const;
   /**
-   * \return the number of MPDUs in an A-MPDU
+   * \return the remaining number of MPDUs in an A-MPDU
+   *
+   * Returns the remaining number of MPDUs in an A-MPDU
+   */
+  uint8_t GetRemainingNbOfMpdus (void) const;
+  /**
+   * \return the remaining duration of an A-MPDU
    *
-   * Returns the number of MPDUs in an A-MPDU
+   * Returns the remaining duration of an A-MPDU
    */
-  uint8_t GetNoOfMpdus (void) const;
+  Time GetRemainingAmpduDuration (void) const;
 
 private:
   uint8_t m_ampdu;     //!< Flag whether it is an A-MPDU
-  uint8_t m_noOfMpdus; //!< number of MPDUs in the A-MPDU
+  uint8_t m_nbOfMpdus; //!< Remaining number of MPDUs in the A-MPDU
+  Time m_duration;     //!< Remaining duration of the A-MPDU in nanoseconds
 };
 
 } //namespace ns3
diff -Naur ns-3.25/src/wifi/model/amrr-wifi-manager.cc ns-3.26/src/wifi/model/amrr-wifi-manager.cc
--- ns-3.25/src/wifi/model/amrr-wifi-manager.cc	2016-10-03 20:57:08.476245854 -0700
+++ ns-3.26/src/wifi/model/amrr-wifi-manager.cc	2016-10-03 19:49:01.767386759 -0700
@@ -375,4 +375,25 @@
   return true;
 }
 
+void
+AmrrWifiManager::SetHtSupported (bool enable)
+{
+  //HT is not supported by this algorithm.
+  if (enable)
+    {
+      NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support HT rates");
+    }
+}
+
+void
+AmrrWifiManager::SetVhtSupported (bool enable)
+{
+  //VHT is not supported by this algorithm.
+  if (enable)
+    {
+      NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support VHT rates");
+    }
+}
+
+
 } //namespace ns3
diff -Naur ns-3.25/src/wifi/model/amrr-wifi-manager.h ns-3.26/src/wifi/model/amrr-wifi-manager.h
--- ns-3.25/src/wifi/model/amrr-wifi-manager.h	2016-10-03 20:57:08.477245846 -0700
+++ ns-3.26/src/wifi/model/amrr-wifi-manager.h	2016-10-03 19:49:01.767386759 -0700
@@ -36,6 +36,10 @@
  * was initially described in <i>IEEE 802.11 Rate Adaptation:
  * A Practical Approach</i>, by M. Lacage, M.H. Manshaei, and
  * T. Turletti.
+ *
+ * This RAA does not support HT or VHT modes and will error exit
+ * if the user tries to configure this RAA with a Wi-Fi MAC that
+ * has VhtSupported or HtSupported set.
  */
 class AmrrWifiManager : public WifiRemoteStationManager
 {
@@ -44,6 +48,9 @@
 
   AmrrWifiManager ();
 
+  // Inherited from WifiRemoteStationManager
+  virtual void SetHtSupported (bool enable);
+  virtual void SetVhtSupported (bool enable);
 
 private:
   //overriden from base class
diff -Naur ns-3.25/src/wifi/model/aparf-wifi-manager.cc ns-3.26/src/wifi/model/aparf-wifi-manager.cc
--- ns-3.25/src/wifi/model/aparf-wifi-manager.cc	2016-10-03 20:57:08.480245823 -0700
+++ ns-3.26/src/wifi/model/aparf-wifi-manager.cc	2016-10-03 19:49:01.770386736 -0700
@@ -62,12 +62,12 @@
     .SetParent<WifiRemoteStationManager> ()
     .SetGroupName ("Wifi")
     .AddConstructor<AparfWifiManager> ()
-    .AddAttribute ("SuccessThreshold 1",
+    .AddAttribute ("SuccessThreshold1",
                    "The minimum number of successful transmissions in \"High\" state to try a new power or rate.",
                    UintegerValue (3),
                    MakeUintegerAccessor (&AparfWifiManager::m_succesMax1),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("SuccessThreshold 2",
+    .AddAttribute ("SuccessThreshold2",
                    "The minimum number of successful transmissions in \"Low\" state to try a new power or rate.",
                    UintegerValue (10),
                    MakeUintegerAccessor (&AparfWifiManager::m_succesMax2),
@@ -82,22 +82,22 @@
                    UintegerValue (10),
                    MakeUintegerAccessor (&AparfWifiManager::m_powerMax),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("Power decrement step",
+    .AddAttribute ("PowerDecrementStep",
                    "Step size for decrement the power.",
                    UintegerValue (1),
                    MakeUintegerAccessor (&AparfWifiManager::m_powerDec),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("Power increment step",
+    .AddAttribute ("PowerIncrementStep",
                    "Step size for increment the power.",
                    UintegerValue (1),
                    MakeUintegerAccessor (&AparfWifiManager::m_powerInc),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("Rate decrement step",
+    .AddAttribute ("RateDecrementStep",
                    "Step size for decrement the rate.",
                    UintegerValue (1),
                    MakeUintegerAccessor (&AparfWifiManager::m_rateDec),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("Rate increment step",
+    .AddAttribute ("RateIncrementStep",
                    "Step size for increment the rate.",
                    UintegerValue (1),
                    MakeUintegerAccessor (&AparfWifiManager::m_rateInc),
@@ -364,4 +364,24 @@
   return true;
 }
 
+void
+AparfWifiManager::SetHtSupported (bool enable)
+{
+  //HT is not supported by this algorithm.
+  if (enable)
+    {
+      NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support HT rates");
+    }
+}
+
+void
+AparfWifiManager::SetVhtSupported (bool enable)
+{
+  //VHT is not supported by this algorithm.
+  if (enable)
+    {
+      NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support VHT rates");
+    }
+}
+
 } //namespace ns3
diff -Naur ns-3.25/src/wifi/model/aparf-wifi-manager.h ns-3.26/src/wifi/model/aparf-wifi-manager.h
--- ns-3.25/src/wifi/model/aparf-wifi-manager.h	2016-10-03 20:57:08.480245823 -0700
+++ ns-3.26/src/wifi/model/aparf-wifi-manager.h	2016-10-03 19:49:01.771386729 -0700
@@ -38,6 +38,9 @@
  * Networks, Springer, 2005, 12, 123-145.
  * http://www.cs.mun.ca/~yzchen/papers/papers/rate_adaptation/80211_dynamic_rate_power_adjustment_chevillat_j2005.pdf
  *
+ * This RAA does not support HT or VHT modes and will error exit
+ * if the user tries to configure this RAA with a Wi-Fi MAC that
+ * has VhtSupported or HtSupported set.
  */
 class AparfWifiManager : public WifiRemoteStationManager
 {
@@ -50,7 +53,10 @@
   AparfWifiManager ();
   virtual ~AparfWifiManager ();
 
+  // Inherited from WifiRemoteStationManager
   virtual void SetupPhy (Ptr<WifiPhy> phy);
+  virtual void SetHtSupported (bool enable);
+  virtual void SetVhtSupported (bool enable);
 
   /**
    * Enumeration of the possible states of the channel.
diff -Naur ns-3.25/src/wifi/model/ap-wifi-mac.cc ns-3.26/src/wifi/model/ap-wifi-mac.cc
--- ns-3.25/src/wifi/model/ap-wifi-mac.cc	2016-10-03 20:57:08.479245831 -0700
+++ ns-3.26/src/wifi/model/ap-wifi-mac.cc	2016-10-03 19:49:01.769386744 -0700
@@ -27,7 +27,6 @@
 #include "ns3/string.h"
 #include "ns3/pointer.h"
 #include "ns3/boolean.h"
-#include "qos-tag.h"
 #include "wifi-phy.h"
 #include "dcf-manager.h"
 #include "mac-rx-middle.h"
@@ -284,8 +283,7 @@
       hdr.SetQosAckPolicy (WifiMacHeader::NORMAL_ACK);
       hdr.SetQosNoEosp ();
       hdr.SetQosNoAmsdu ();
-      //Transmission of multiple frames in the same TXOP is not
-      //supported for now
+      //Transmission of multiple frames in the same Polled TXOP is not supported for now
       hdr.SetQosTxopLimit (0);
       //Fill in the QoS control field in the MAC header
       hdr.SetQosTid (tid);
@@ -357,7 +355,7 @@
     {
       for (uint32_t i = 0; i < m_phy->GetNBssMembershipSelectors (); i++)
         {
-          rates.SetBasicRate (m_phy->GetBssMembershipSelector (i));
+          rates.AddBssMembershipSelectorRate (m_phy->GetBssMembershipSelector (i));
         }
     }
   // 
@@ -391,6 +389,18 @@
   return rates;
 }
 
+DsssParameterSet
+ApWifiMac::GetDsssParameterSet (void) const
+{
+  DsssParameterSet dsssParameters;
+  if (m_dsssSupported)
+    {
+      dsssParameters.SetDsssSupported (1);
+      dsssParameters.SetCurrentChannel (m_phy->GetChannelNumber ());
+    }
+  return dsssParameters;
+}
+
 CapabilityInformation
 ApWifiMac::GetCapabilities (void) const
 {
@@ -421,6 +431,51 @@
   return information;
 }
 
+EdcaParameterSet
+ApWifiMac::GetEdcaParameterSet (void) const
+{
+  EdcaParameterSet edcaParameters;
+  edcaParameters.SetQosSupported (1);
+  if (m_qosSupported)
+    {
+      Ptr<EdcaTxopN> edca;
+      Time txopLimit;
+
+      edca = m_edca.find (AC_BE)->second;
+      txopLimit = edca->GetTxopLimit ();
+      edcaParameters.SetBeAci(0);
+      edcaParameters.SetBeCWmin(edca->GetMinCw ());
+      edcaParameters.SetBeCWmax(edca->GetMaxCw ());
+      edcaParameters.SetBeAifsn(edca->GetAifsn ());
+      edcaParameters.SetBeTXOPLimit(txopLimit.GetMicroSeconds () / 32);
+      
+      edca = m_edca.find (AC_BK)->second;
+      txopLimit = edca->GetTxopLimit ();
+      edcaParameters.SetBkAci(1);
+      edcaParameters.SetBkCWmin(edca->GetMinCw ());
+      edcaParameters.SetBkCWmax(edca->GetMaxCw ());
+      edcaParameters.SetBkAifsn(edca->GetAifsn ());
+      edcaParameters.SetBkTXOPLimit(txopLimit.GetMicroSeconds () / 32);
+      
+      edca = m_edca.find (AC_VI)->second;
+      txopLimit = edca->GetTxopLimit ();
+      edcaParameters.SetViAci(2);
+      edcaParameters.SetViCWmin(edca->GetMinCw ());
+      edcaParameters.SetViCWmax(edca->GetMaxCw ());
+      edcaParameters.SetViAifsn(edca->GetAifsn ());
+      edcaParameters.SetViTXOPLimit(txopLimit.GetMicroSeconds () / 32);
+      
+      edca = m_edca.find (AC_VO)->second;
+      txopLimit = edca->GetTxopLimit ();
+      edcaParameters.SetVoAci(3);
+      edcaParameters.SetVoCWmin(edca->GetMinCw ());
+      edcaParameters.SetVoCWmax(edca->GetMaxCw ());
+      edcaParameters.SetVoAifsn(edca->GetAifsn ());
+      edcaParameters.SetVoTXOPLimit(txopLimit.GetMicroSeconds () / 32);
+    }
+  return edcaParameters;
+}
+
 HtOperations
 ApWifiMac::GetHtOperations (void) const
 {
@@ -459,10 +514,18 @@
   probe.SetCapabilities (GetCapabilities ());
   m_stationManager->SetShortPreambleEnabled (GetShortPreambleEnabled ());
   m_stationManager->SetShortSlotTimeEnabled (GetShortSlotTimeEnabled ());
+  if (m_dsssSupported)
+    {
+      probe.SetDsssParameterSet (GetDsssParameterSet ());
+    }
   if (m_erpSupported)
     {
       probe.SetErpInformation (GetErpInformation ());
     }
+  if (m_qosSupported)
+    {
+      probe.SetEdcaParameterSet (GetEdcaParameterSet ());
+    }
   if (m_htSupported || m_vhtSupported)
     {
       probe.SetHtCapabilities (GetHtCapabilities ());
@@ -512,6 +575,10 @@
     {
       assoc.SetErpInformation (GetErpInformation ());
     }
+  if (m_qosSupported)
+    {
+      assoc.SetEdcaParameterSet (GetEdcaParameterSet ());
+    }
   if (m_htSupported || m_vhtSupported)
     {
       assoc.SetHtCapabilities (GetHtCapabilities ());
@@ -550,10 +617,18 @@
   beacon.SetCapabilities (GetCapabilities ());
   m_stationManager->SetShortPreambleEnabled (GetShortPreambleEnabled ());
   m_stationManager->SetShortSlotTimeEnabled (GetShortSlotTimeEnabled ());
+  if (m_dsssSupported)
+    {
+      beacon.SetDsssParameterSet (GetDsssParameterSet ());
+    }
   if (m_erpSupported)
     {
       beacon.SetErpInformation (GetErpInformation ());
     }
+  if (m_qosSupported)
+    {
+      beacon.SetEdcaParameterSet (GetEdcaParameterSet ());
+    }
   if (m_htSupported || m_vhtSupported)
     {
       beacon.SetHtCapabilities (GetHtCapabilities ());
diff -Naur ns-3.25/src/wifi/model/ap-wifi-mac.h ns-3.26/src/wifi/model/ap-wifi-mac.h
--- ns-3.25/src/wifi/model/ap-wifi-mac.h	2016-10-03 20:57:08.479245831 -0700
+++ ns-3.26/src/wifi/model/ap-wifi-mac.h	2016-10-03 19:49:01.770386736 -0700
@@ -30,7 +30,9 @@
 #include "vht-capabilities.h"
 #include "amsdu-subframe-header.h"
 #include "supported-rates.h"
+#include "dsss-parameter-set.h"
 #include "erp-information.h"
+#include "edca-parameter-set.h"
 #include "ns3/random-variable-stream.h"
 
 namespace ns3 {
@@ -209,6 +211,12 @@
    */
   ErpInformation GetErpInformation (void) const;
   /**
+   * Return the EDCA Parameter Set of the current AP.
+   *
+   * \return the EDCA Parameter Set that we support
+   */
+  EdcaParameterSet GetEdcaParameterSet (void) const;
+  /**
    * Return the HT operations of the current AP.
    *
    * \return the HT operations that we support
@@ -222,6 +230,12 @@
    */
   SupportedRates GetSupportedRates (void) const;
   /**
+   * Return the DSSS Parameter Set that we support.
+   *
+   * \return the DSSS Parameter Set that we support
+   */
+  DsssParameterSet GetDsssParameterSet (void) const;
+  /**
    * Enable or disable beacon generation of the AP.
    *
    * \param enable enable or disable beacon generation
diff -Naur ns-3.25/src/wifi/model/arf-wifi-manager.cc ns-3.26/src/wifi/model/arf-wifi-manager.cc
--- ns-3.25/src/wifi/model/arf-wifi-manager.cc	2016-10-03 20:57:08.480245823 -0700
+++ ns-3.26/src/wifi/model/arf-wifi-manager.cc	2016-10-03 19:49:01.771386729 -0700
@@ -249,4 +249,24 @@
   return true;
 }
 
+void
+ArfWifiManager::SetHtSupported (bool enable)
+{
+  //HT is not supported by this algorithm.
+  if (enable)
+    {
+      NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support HT rates");
+    }
+}
+
+void
+ArfWifiManager::SetVhtSupported (bool enable)
+{
+  //VHT is not supported by this algorithm.
+  if (enable)
+    {
+      NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support VHT rates");
+    }
+}
+
 } //namespace ns3
diff -Naur ns-3.25/src/wifi/model/arf-wifi-manager.h ns-3.26/src/wifi/model/arf-wifi-manager.h
--- ns-3.25/src/wifi/model/arf-wifi-manager.h	2016-10-03 20:57:08.481245815 -0700
+++ ns-3.26/src/wifi/model/arf-wifi-manager.h	2016-10-03 19:49:01.772386721 -0700
@@ -39,6 +39,10 @@
  * in XXX (I cannot find back the original paper which described how
  * the time-based timer could be easily replaced with a packet-based
  * timer.)
+ *
+ * This RAA does not support HT or VHT modes and will error exit
+ * if the user tries to configure this RAA with a Wi-Fi MAC that
+ * has VhtSupported or HtSupported set.
  */
 class ArfWifiManager : public WifiRemoteStationManager
 {
@@ -47,6 +51,9 @@
   ArfWifiManager ();
   virtual ~ArfWifiManager ();
 
+  // Inherited from WifiRemoteStationManager
+  virtual void SetHtSupported (bool enable);
+  virtual void SetVhtSupported (bool enable);
 
 private:
   //overriden from base class
diff -Naur ns-3.25/src/wifi/model/block-ack-manager.cc ns-3.26/src/wifi/model/block-ack-manager.cc
--- ns-3.25/src/wifi/model/block-ack-manager.cc	2016-10-03 20:57:08.483245800 -0700
+++ ns-3.26/src/wifi/model/block-ack-manager.cc	2016-10-03 19:49:01.774386706 -0700
@@ -322,9 +322,68 @@
   return packet;
 }
 
+Ptr<const Packet>
+BlockAckManager::PeekNextPacket (WifiMacHeader &hdr)
+{
+  NS_LOG_FUNCTION (this << &hdr);
+  Ptr<const Packet> packet = 0;
+  uint8_t tid;
+  Mac48Address recipient;
+  CleanupBuffers ();
+  if (!m_retryPackets.empty ())
+    {
+      NS_LOG_DEBUG ("Retry buffer size is " << m_retryPackets.size ());
+      std::list<PacketQueueI>::iterator it = m_retryPackets.begin ();
+      while (it != m_retryPackets.end ())
+        {
+          if ((*it)->hdr.IsQosData ())
+            {
+              tid = (*it)->hdr.GetQosTid ();
+            }
+          else
+            {
+              NS_FATAL_ERROR ("Packet in blockAck manager retry queue is not Qos Data");
+            }
+          recipient = (*it)->hdr.GetAddr1 ();
+          AgreementsI agreement = m_agreements.find (std::make_pair (recipient, tid));
+          NS_ASSERT (agreement != m_agreements.end ());
+          packet = (*it)->packet->Copy ();
+          hdr = (*it)->hdr;
+          hdr.SetRetry ();
+          if (hdr.IsQosData ())
+            {
+              tid = hdr.GetQosTid ();
+            }
+          else
+            {
+              NS_FATAL_ERROR ("Packet in blockAck manager retry queue is not Qos Data");
+            }
+          recipient = hdr.GetAddr1 ();
+          if (!agreement->second.first.IsHtSupported ()
+              && (ExistsAgreementInState (recipient, tid, OriginatorBlockAckAgreement::ESTABLISHED)
+                  || SwitchToBlockAckIfNeeded (recipient, tid, hdr.GetSequenceNumber ())))
+            {
+              hdr.SetQosAckPolicy (WifiMacHeader::BLOCK_ACK);
+            }
+          else
+            {
+              /* From section 9.10.3 in IEEE802.11e standard:
+               * In order to improve efficiency, originators using the Block Ack facility
+               * may send MPDU frames with the Ack Policy subfield in QoS control frames
+               * set to Normal Ack if only a few MPDUs are available for transmission.[...]
+               * When there are sufficient number of MPDUs, the originator may switch back to
+               * the use of Block Ack.
+               */
+              hdr.SetQosAckPolicy (WifiMacHeader::NORMAL_ACK);
+            }
+          break;
+        }
+    }
+  return packet;
+}
 
 Ptr<const Packet>
-BlockAckManager::PeekNextPacket (WifiMacHeader &hdr, Mac48Address recipient, uint8_t tid, Time *tstamp)
+BlockAckManager::PeekNextPacketByTidAndAddress (WifiMacHeader &hdr, Mac48Address recipient, uint8_t tid, Time *tstamp)
 {
   NS_LOG_FUNCTION (this);
   Ptr<const Packet> packet = 0;
diff -Naur ns-3.25/src/wifi/model/block-ack-manager.h ns-3.26/src/wifi/model/block-ack-manager.h
--- ns-3.25/src/wifi/model/block-ack-manager.h	2016-10-03 20:57:08.484245792 -0700
+++ ns-3.26/src/wifi/model/block-ack-manager.h	2016-10-03 19:49:01.775386699 -0700
@@ -152,6 +152,15 @@
    * corresponding block ack bitmap.
    */
   Ptr<const Packet> GetNextPacket (WifiMacHeader &hdr);
+  /**
+   * \param hdr 802.11 header of returned packet (if exists).
+   *
+   * \return the packet
+   *
+   * This methods returns a packet (if exists) indicated as not received in
+   * corresponding block ack bitmap. This method doesn't remove the packet from this queue.
+   */
+  Ptr<const Packet> PeekNextPacket (WifiMacHeader &hdr);
   bool HasBar (struct Bar &bar);
   /**
    * Returns true if there are packets that need of retransmission or at least a
@@ -320,9 +329,11 @@
    */
   bool RemovePacket (uint8_t tid, Mac48Address recipient, uint16_t seqnumber);
   /*
-   * Peek in retransmit queue and get the next packet without removing it from the queue
+   * Peek in retransmit queue and get the next packet having address indicated
+   * by <i>type</i> equals to <i>addr</i>, and tid equals to <i>tid</i>.
+   * This method doesn't remove the packet from this queue.
    */
-  Ptr<const Packet> PeekNextPacket (WifiMacHeader &hdr, Mac48Address recipient, uint8_t tid, Time *timestamp);
+  Ptr<const Packet> PeekNextPacketByTidAndAddress (WifiMacHeader &hdr, Mac48Address recipient, uint8_t tid, Time *timestamp);
   /**
    * This function returns true if the lifetime of the packets a BAR refers to didn't expire yet else it returns false.
    * If it return false then the BAR will be discarded (i.e. will not be re-transmitted)
diff -Naur ns-3.25/src/wifi/model/cara-wifi-manager.cc ns-3.26/src/wifi/model/cara-wifi-manager.cc
--- ns-3.25/src/wifi/model/cara-wifi-manager.cc	2016-10-03 20:57:08.485245784 -0700
+++ ns-3.26/src/wifi/model/cara-wifi-manager.cc	2016-10-03 19:49:01.776386692 -0700
@@ -232,4 +232,24 @@
   return true;
 }
 
+void
+CaraWifiManager::SetHtSupported (bool enable)
+{
+  //HT is not supported by this algorithm.
+  if (enable)
+    {
+      NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support HT rates");
+    }
+}
+
+void
+CaraWifiManager::SetVhtSupported (bool enable)
+{
+  //VHT is not supported by this algorithm.
+  if (enable)
+    {
+      NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support VHT rates");
+    }
+}
+
 } //namespace ns3
diff -Naur ns-3.25/src/wifi/model/cara-wifi-manager.h ns-3.26/src/wifi/model/cara-wifi-manager.h
--- ns-3.25/src/wifi/model/cara-wifi-manager.h	2016-10-03 20:57:08.486245777 -0700
+++ ns-3.26/src/wifi/model/cara-wifi-manager.h	2016-10-03 19:49:01.776386692 -0700
@@ -35,6 +35,10 @@
  *
  * Originally implemented by Federico Maguolo for a very early
  * prototype version of ns-3.
+ *
+ * This RAA does not support HT or VHT modes and will error exit
+ * if the user tries to configure this RAA with a Wi-Fi MAC that
+ * has VhtSupported or HtSupported set.
  */
 class CaraWifiManager : public WifiRemoteStationManager
 {
@@ -43,6 +47,9 @@
   CaraWifiManager ();
   virtual ~CaraWifiManager ();
 
+  // Inherited from WifiRemoteStationManager
+  virtual void SetHtSupported (bool enable);
+  virtual void SetVhtSupported (bool enable);
 
 private:
   //overriden from base class
diff -Naur ns-3.25/src/wifi/model/dca-txop.cc ns-3.26/src/wifi/model/dca-txop.cc
--- ns-3.25/src/wifi/model/dca-txop.cc	2016-10-03 20:57:08.488245761 -0700
+++ ns-3.26/src/wifi/model/dca-txop.cc	2016-10-03 19:49:01.779386669 -0700
@@ -119,9 +119,12 @@
   {
     m_txop->MissedAck ();
   }
+  virtual void StartNextFragment (void)
+  {
+    m_txop->StartNextFragment ();
+  }
   virtual void StartNext (void)
   {
-    m_txop->StartNext ();
   }
   virtual void Cancel (void)
   {
@@ -254,6 +257,13 @@
   m_dcf->SetAifsn (aifsn);
 }
 
+void
+DcaTxop::SetTxopLimit (Time txopLimit)
+{
+  NS_LOG_FUNCTION (this << txopLimit);
+  m_dcf->SetTxopLimit (txopLimit);
+}
+
 uint32_t
 DcaTxop::GetMinCw (void) const
 {
@@ -275,6 +285,13 @@
   return m_dcf->GetAifsn ();
 }
 
+Time
+DcaTxop::GetTxopLimit (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_dcf->GetTxopLimit ();
+}
+
 void
 DcaTxop::Queue (Ptr<const Packet> packet, const WifiMacHeader &hdr)
 {
@@ -501,7 +518,6 @@
 DcaTxop::NotifyCollision (void)
 {
   NS_LOG_FUNCTION (this);
-  NS_LOG_DEBUG ("collision");
   m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
   RestartAccessIfNeeded ();
 }
@@ -619,7 +635,7 @@
 }
 
 void
-DcaTxop::StartNext (void)
+DcaTxop::StartNextFragment (void)
 {
   NS_LOG_FUNCTION (this);
   NS_LOG_DEBUG ("start next packet fragment");
diff -Naur ns-3.25/src/wifi/model/dca-txop.h ns-3.26/src/wifi/model/dca-txop.h
--- ns-3.25/src/wifi/model/dca-txop.h	2016-10-03 20:57:08.489245753 -0700
+++ ns-3.26/src/wifi/model/dca-txop.h	2016-10-03 19:49:01.780386662 -0700
@@ -129,9 +129,11 @@
   virtual void SetMinCw (uint32_t minCw);
   virtual void SetMaxCw (uint32_t maxCw);
   virtual void SetAifsn (uint32_t aifsn);
+  virtual void SetTxopLimit (Time txopLimit);
   virtual uint32_t GetMinCw (void) const;
   virtual uint32_t GetMaxCw (void) const;
   virtual uint32_t GetAifsn (void) const;
+  virtual Time GetTxopLimit (void) const;
 
   /**
    * \param packet packet to send
@@ -235,7 +237,7 @@
    * Start transmission for the next fragment.
    * This is called for fragment only.
    */
-  void StartNext (void);
+  void StartNextFragment (void);
   /**
    * Cancel the transmission.
    */
diff -Naur ns-3.25/src/wifi/model/dcf.cc ns-3.26/src/wifi/model/dcf.cc
--- ns-3.25/src/wifi/model/dcf.cc	2016-10-03 20:57:08.490245745 -0700
+++ ns-3.26/src/wifi/model/dcf.cc	2016-10-03 19:49:01.781386654 -0700
@@ -33,6 +33,7 @@
 {
   static TypeId tid = TypeId ("ns3::Dcf")
     .SetParent<Object> ()
+    .SetGroupName ("Wifi")
     .AddAttribute ("MinCw", "The minimum value of the contention window.",
                    UintegerValue (15),
                    MakeUintegerAccessor (&Dcf::SetMinCw,
@@ -48,6 +49,11 @@
                    MakeUintegerAccessor (&Dcf::SetAifsn,
                                          &Dcf::GetAifsn),
                    MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("TxopLimit", "The TXOP limit: the default value conforms to simple DCA.",
+                   TimeValue (MilliSeconds (0)),
+                   MakeTimeAccessor (&Dcf::SetTxopLimit,
+                                     &Dcf::GetTxopLimit),
+                   MakeTimeChecker ())
   ;
   return tid;
 }
diff -Naur ns-3.25/src/wifi/model/dcf.h ns-3.26/src/wifi/model/dcf.h
--- ns-3.25/src/wifi/model/dcf.h	2016-10-03 20:57:08.491245738 -0700
+++ ns-3.26/src/wifi/model/dcf.h	2016-10-03 19:49:01.782386647 -0700
@@ -22,6 +22,7 @@
 #define DCF_H
 
 #include "ns3/object.h"
+#include "ns3/nstime.h"
 
 namespace ns3 {
 
@@ -53,6 +54,13 @@
    * Calling this method after DcfManager::Add has been called is not recommended.
    */
   virtual void SetAifsn (uint32_t aifsn) = 0;
+  /*
+   * Set the TXOP limit.
+   *
+   * \param txopLimit the TXOP limit.
+   * Value zero corresponds to default DCF.
+   */
+  virtual void SetTxopLimit (Time txopLimit) = 0;
   /**
    * Return the minimum contention window size.
    *
@@ -71,6 +79,12 @@
    * \return the number of slots that make up an AIFS
    */
   virtual uint32_t GetAifsn (void) const = 0;
+  /**
+   * Return the TXOP limit.
+   *
+   * \return the TXOP limit
+   */
+  virtual Time GetTxopLimit (void) const = 0;
 };
 
 } //namespace ns3
diff -Naur ns-3.25/src/wifi/model/dcf-manager.cc ns-3.26/src/wifi/model/dcf-manager.cc
--- ns-3.25/src/wifi/model/dcf-manager.cc	2016-10-03 20:57:08.489245753 -0700
+++ ns-3.26/src/wifi/model/dcf-manager.cc	2016-10-03 19:49:01.781386654 -0700
@@ -59,6 +59,13 @@
 }
 
 void
+DcfState::SetTxopLimit (Time txopLimit)
+{
+  NS_ASSERT_MSG ((txopLimit.GetMicroSeconds () % 32 == 0), "The TXOP limit must be expressed in multiple of 32 microseconds!");
+  m_txopLimit = txopLimit;
+}
+
+void
 DcfState::SetCwMin (uint32_t minCw)
 {
   bool changed = (m_cwMin != minCw);
@@ -86,6 +93,12 @@
   return m_aifsn;
 }
 
+Time
+DcfState::GetTxopLimit (void) const
+{
+  return m_txopLimit;
+}
+
 uint32_t
 DcfState::GetCwMin (void) const
 {
@@ -122,8 +135,14 @@
 void
 DcfState::StartBackoffNow (uint32_t nSlots)
 {
-  NS_ASSERT (m_backoffSlots == 0);
-  MY_DEBUG ("start backoff=" << nSlots << " slots");
+  if (m_backoffSlots != 0)
+    {
+      MY_DEBUG ("reset backoff from " << m_backoffSlots << " to " << nSlots << " slots");
+    }
+  else
+    {
+      MY_DEBUG ("start backoff=" << nSlots << " slots");
+    }
   m_backoffSlots = nSlots;
   m_backoffStart = Simulator::Now ();
 }
@@ -480,6 +499,26 @@
     {
       return true;
     }
+  // CCA busy
+  Time lastCCABusyEnd = m_lastBusyStart + m_lastBusyDuration;
+  if (lastCCABusyEnd > Simulator::Now ())
+    {
+      return true;
+    }
+  return false;
+}
+
+bool
+DcfManager::IsWithinAifs (DcfState *state) const
+{
+  NS_LOG_FUNCTION (this << state);
+  Time ifsEnd = GetAccessGrantStart () + MicroSeconds (state->GetAifsn () * m_slotTimeUs);
+  if (ifsEnd > Simulator::Now ())
+    {
+      NS_LOG_DEBUG ("IsWithinAifs () true; ifsEnd is at " << ifsEnd.GetSeconds ());
+      return true;
+    }
+  NS_LOG_DEBUG ("IsWithinAifs () false; ifsEnd was at " << ifsEnd.GetSeconds ());
   return false;
 }
 
@@ -495,18 +534,37 @@
   UpdateBackoff ();
   NS_ASSERT (!state->IsAccessRequested ());
   state->NotifyAccessRequested ();
+  // If currently transmitting; end of transmission (ACK or no ACK) will cause
+  // a later access request if needed from EndTxNoAck, GotAck, or MissedAck
+  Time lastTxEnd = m_lastTxStart + m_lastTxDuration;
+  if (lastTxEnd > Simulator::Now ())
+    {
+      NS_LOG_DEBUG ("Internal collision (currently transmitting)");
+      state->NotifyInternalCollision ();
+      DoRestartAccessTimeoutIfNeeded ();
+      return;
+    }
   /**
    * If there is a collision, generate a backoff
    * by notifying the collision to the user.
    */
-  if (state->GetBackoffSlots () == 0
-      && IsBusy ())
+  if (state->GetBackoffSlots () == 0)
     {
-      MY_DEBUG ("medium is busy: collision");
-      /* someone else has accessed the medium.
-       * generate a backoff.
-       */
-      state->NotifyCollision ();
+      if (IsBusy ())
+        {
+          MY_DEBUG ("medium is busy: collision");
+          // someone else has accessed the medium; generate a backoff.
+          state->NotifyCollision ();
+          DoRestartAccessTimeoutIfNeeded ();
+          return;
+        }
+      else if (IsWithinAifs (state))
+        {
+          MY_DEBUG ("busy within AIFS");
+          state->NotifyCollision ();
+          DoRestartAccessTimeoutIfNeeded ();
+          return;
+        }
     }
   DoGrantAccess ();
   DoRestartAccessTimeoutIfNeeded ();
@@ -628,6 +686,10 @@
 Time
 DcfManager::GetBackoffEndFor (DcfState *state)
 {
+  NS_LOG_FUNCTION (this << state);
+  NS_LOG_DEBUG ("Backoff start: " << GetBackoffStartFor (state).As (Time::US) <<
+    " end: " << (GetBackoffStartFor (state) + 
+    MicroSeconds (state->GetBackoffSlots () * m_slotTimeUs)).As (Time::US)); 
   return GetBackoffStartFor (state) + MicroSeconds (state->GetBackoffSlots () * m_slotTimeUs);
 }
 
@@ -691,6 +753,7 @@
             }
         }
     }
+  NS_LOG_DEBUG ("Access timeout needed: " << accessTimeoutNeeded);
   if (accessTimeoutNeeded)
     {
       MY_DEBUG ("expected backoff end=" << expectedBackoffEnd);
@@ -745,13 +808,27 @@
   NS_LOG_FUNCTION (this << duration);
   if (m_rxing)
     {
-      //this may be caused only if PHY has started to receive a packet
-      //inside SIFS, so, we check that lastRxStart was maximum a SIFS ago
-      NS_ASSERT (Simulator::Now () - m_lastRxStart <= m_sifs);
-      m_lastRxEnd = Simulator::Now ();
-      m_lastRxDuration = m_lastRxEnd - m_lastRxStart;
-      m_lastRxReceivedOk = true;
-      m_rxing = false;
+      if (Simulator::Now () - m_lastRxStart <= m_sifs)
+        {
+          //this may be caused if PHY has started to receive a packet
+          //inside SIFS, so, we check that lastRxStart was within a SIFS ago
+          m_lastRxEnd = Simulator::Now ();
+          m_lastRxDuration = m_lastRxEnd - m_lastRxStart;
+          m_lastRxReceivedOk = true;
+          m_rxing = false;
+        }
+      else
+        {
+          // Bug 2477:  It is possible for the DCF to fall out of 
+          //            sync with the PHY state if there are problems
+          //            receiving A-MPDUs.  PHY will cancel the reception
+          //            and start to transmit
+          NS_LOG_DEBUG ("Phy is transmitting despite DCF being in receive state");
+          m_lastRxEnd = Simulator::Now ();
+          m_lastRxDuration = m_lastRxEnd - m_lastRxStart;
+          m_lastRxReceivedOk = false;
+          m_rxing = false;
+        }
     }
   MY_DEBUG ("tx start for " << duration);
   UpdateBackoff ();
@@ -876,7 +953,6 @@
   UpdateBackoff ();
   m_lastNavStart = Simulator::Now ();
   m_lastNavDuration = duration;
-  UpdateBackoff ();
   /**
    * If the nav reset indicates an end-of-nav which is earlier
    * than the previous end-of-nav, the expected end of backoff
diff -Naur ns-3.25/src/wifi/model/dcf-manager.h ns-3.26/src/wifi/model/dcf-manager.h
--- ns-3.25/src/wifi/model/dcf-manager.h	2016-10-03 20:57:08.490245745 -0700
+++ ns-3.26/src/wifi/model/dcf-manager.h	2016-10-03 19:49:01.781386654 -0700
@@ -79,6 +79,12 @@
    */
   void SetCwMax (uint32_t maxCw);
   /**
+   * Set the TXOP limit.
+   *
+   * \param txopLimit the TXOP limit
+   */
+  void SetTxopLimit (Time txopLimit);
+  /**
    * Return the number of slots that make up an AIFS.
    *
    * \return the number of slots that make up an AIFS
@@ -97,6 +103,13 @@
    */
   uint32_t GetCwMax (void) const;
   /**
+   * Return the TXOP limit.
+   *
+   * \return the TXOP limit
+   */
+  Time GetTxopLimit (void) const;
+
+  /**
    * Update the value of the CW variable to take into account
    * a transmission success or a transmission abort (stop transmission
    * of a packet after the maximum number of retransmissions has been
@@ -202,6 +215,9 @@
    * that a normal collision occured, that is, that
    * the medium was busy when access was requested.
    *
+   * This may also be called if the request for access occurred within
+   * the DIFS or AIFS between two frames.
+   *
    * The subclass is expected to start a new backoff by
    * calling DcfState::StartBackoffNow and DcfManager::RequestAccess
    * is access is still needed.
@@ -240,6 +256,7 @@
   uint32_t m_cwMin;
   uint32_t m_cwMax;
   uint32_t m_cw;
+  Time m_txopLimit;
   bool m_accessRequested;
 };
 
@@ -515,12 +532,20 @@
   void DoGrantAccess (void);
   /**
    * Check if the device is busy sending or receiving,
-   * or NAV busy.
+   * or NAV or CCA busy.
    *
    * \return true if the device is busy,
    *         false otherwise
    */
   bool IsBusy (void) const;
+  /**
+   * Check if the device is between frames (in DIFS or AIFS interval)
+   *
+   * \param state the state to check
+   * \return true if the device is within AIFS,
+   *         false otherwise
+   */
+  bool IsWithinAifs (DcfState* state) const;
 
   /**
    * typedef for a vector of DcfStates
diff -Naur ns-3.25/src/wifi/model/dsss-parameter-set.cc ns-3.26/src/wifi/model/dsss-parameter-set.cc
--- ns-3.25/src/wifi/model/dsss-parameter-set.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/wifi/model/dsss-parameter-set.cc	2016-10-03 19:49:01.783386640 -0700
@@ -0,0 +1,116 @@
+/* -*- 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 "dsss-parameter-set.h"
+#include "ns3/assert.h"
+#include "ns3/log.h"
+#include <cmath>
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("DsssParameterSet");
+
+DsssParameterSet::DsssParameterSet ()
+  : m_currentChannel (0),
+    m_dsssSupported (0)
+{
+}
+
+WifiInformationElementId
+DsssParameterSet::ElementId () const
+{
+  return IE_DS_PARAMETER_SET;
+}
+
+void
+DsssParameterSet::SetDsssSupported (uint8_t dsssSupported)
+{
+  m_dsssSupported = dsssSupported;
+}
+
+void
+DsssParameterSet::SetCurrentChannel (uint8_t currentChannel)
+{
+  m_currentChannel = currentChannel;
+}
+
+uint8_t
+DsssParameterSet::GetCurrentChannel (void) const
+{
+  return m_currentChannel;
+}
+
+uint8_t
+DsssParameterSet::GetInformationFieldSize () const
+{
+  NS_ASSERT (m_dsssSupported > 0);
+  return 1;
+}
+
+Buffer::Iterator
+DsssParameterSet::Serialize (Buffer::Iterator i) const
+{
+  if (m_dsssSupported < 1)
+    {
+      return i;
+    }
+  return WifiInformationElement::Serialize (i);
+}
+
+uint16_t
+DsssParameterSet::GetSerializedSize () const
+{
+  if (m_dsssSupported < 1)
+    {
+      return 0;
+    }
+  return WifiInformationElement::GetSerializedSize ();
+}
+
+void
+DsssParameterSet::SerializeInformationField (Buffer::Iterator start) const
+{
+  if (m_dsssSupported == 1)
+    {
+      start.WriteU8 (m_currentChannel);
+    }
+}
+
+uint8_t
+DsssParameterSet::DeserializeInformationField (Buffer::Iterator start, uint8_t length)
+{
+  Buffer::Iterator i = start;
+  m_currentChannel = i.ReadU8 ();
+  return length;
+}
+
+ATTRIBUTE_HELPER_CPP (DsssParameterSet);
+
+std::ostream & operator << (std::ostream &os, const DsssParameterSet &DsssParameterSet)
+{
+  return os;
+}
+
+std::istream &operator >> (std::istream &is, DsssParameterSet &DsssParameterSet)
+{
+  return is;
+}
+
+} //namespace ns3
diff -Naur ns-3.25/src/wifi/model/dsss-parameter-set.h ns-3.26/src/wifi/model/dsss-parameter-set.h
--- ns-3.25/src/wifi/model/dsss-parameter-set.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/wifi/model/dsss-parameter-set.h	2016-10-03 19:49:01.783386640 -0700
@@ -0,0 +1,94 @@
+/* -*- 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 DSSS_PARAMETER_SET_H
+#define DSSS_PARAMETER_SET_H
+
+#include <stdint.h>
+#include <ostream>
+#include "ns3/buffer.h"
+#include "ns3/wifi-information-element.h"
+
+namespace ns3 {
+
+/**
+ * \brief The DSSS Parameter Set
+ * \ingroup wifi
+ *
+ * This class knows how to serialise and deserialise the DSSS Parameter Set.
+ */
+class DsssParameterSet : public WifiInformationElement
+{
+public:
+  DsssParameterSet ();
+  void SetDsssSupported (uint8_t DsssSupported);
+  
+  /**
+   * Set the Current Channel field in the DsssParameterSet information element.
+   *
+   * \param qosInfo the CurrentChannel field in the DsssParameterSet information element
+   */
+  void SetCurrentChannel (uint8_t currentChannel);
+  
+  /*
+   * Return the Current Channel field in the DsssParameterSet information element.
+   *
+   * \return the Current Channel field in the DsssParameterSet information element
+   */
+  uint8_t GetCurrentChannel (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 does support DSSS. 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 DSSS Parameter Set.
+   *
+   * \return the serialized size of this DSSS Parameter Set
+   */
+  uint16_t GetSerializedSize () const;
+
+private:
+  uint8_t m_currentChannel;
+
+  //This is used to decide whether this element should be added to the frame or not
+  bool m_dsssSupported;
+};
+
+std::ostream &operator << (std::ostream &os, const DsssParameterSet &dsssParameterSet);
+std::istream &operator >> (std::istream &is, DsssParameterSet &dsssParameterSet);
+
+ATTRIBUTE_HELPER_HEADER (DsssParameterSet);
+
+} //namespace ns3
+
+#endif /* DSSS_PARAMETER_SET_H */
diff -Naur ns-3.25/src/wifi/model/edca-parameter-set.cc ns-3.26/src/wifi/model/edca-parameter-set.cc
--- ns-3.25/src/wifi/model/edca-parameter-set.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/wifi/model/edca-parameter-set.cc	2016-10-03 19:49:01.784386632 -0700
@@ -0,0 +1,435 @@
+/* -*- 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 "edca-parameter-set.h"
+#include "ns3/assert.h"
+#include "ns3/log.h"
+#include <cmath>
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("EdcaParameterSet");
+
+EdcaParameterSet::EdcaParameterSet ()
+  : m_qosInfo (0),
+    m_reserved (0),
+    m_acBE (0),
+    m_acBK (0),
+    m_acVI (0),
+    m_acVO (0),
+    m_qosSupported (0)
+{
+}
+
+WifiInformationElementId
+EdcaParameterSet::ElementId () const
+{
+  return IE_EDCA_PARAMETER_SET;
+}
+
+void
+EdcaParameterSet::SetQosSupported (uint8_t qosSupported)
+{
+  m_qosSupported = qosSupported;
+}
+
+void
+EdcaParameterSet::SetQosInfo (uint8_t qosInfo)
+{
+  m_qosInfo = qosInfo;
+}
+
+void
+EdcaParameterSet::SetBeAifsn (uint8_t aifsn)
+{
+  m_acBE |= (aifsn & 0x0f);
+}
+
+void
+EdcaParameterSet::SetBeAcm (uint8_t acm)
+{
+  m_acBE |= (acm & 0x01) << 4;
+}
+
+void
+EdcaParameterSet::SetBeAci (uint8_t aci)
+{
+  m_acBE |= (aci & 0x03) << 5;
+}
+
+void
+EdcaParameterSet::SetBeCWmin (uint8_t cwMin)
+{
+  uint8_t ECWmin = log2 (cwMin + 1);
+  m_acBE |= (ECWmin & 0x0f) << 8;
+}
+
+void
+EdcaParameterSet::SetBeCWmax (uint8_t cwMax)
+{
+  uint8_t ECWmax = log2 (cwMax + 1);
+  m_acBE |= (ECWmax & 0x0f) << 12;
+}
+
+void
+EdcaParameterSet::SetBeTXOPLimit (uint16_t txop)
+{
+  m_acBE |= txop << 16;
+}
+
+void
+EdcaParameterSet::SetBkAifsn (uint8_t aifsn)
+{
+  m_acBK |= (aifsn & 0x0f);
+}
+
+void
+EdcaParameterSet::SetBkAcm (uint8_t acm)
+{
+  m_acBK |= (acm & 0x01) << 4;
+}
+
+void
+EdcaParameterSet::SetBkAci (uint8_t aci)
+{
+  m_acBK |= (aci & 0x03) << 5;
+}
+
+void
+EdcaParameterSet::SetBkCWmin (uint8_t cwMin)
+{
+  uint8_t ECWmin = log2 (cwMin + 1);
+  m_acBK |= (ECWmin & 0x0f) << 8;
+}
+
+void
+EdcaParameterSet::SetBkCWmax (uint8_t cwMax)
+{
+  uint8_t ECWmax = log2 (cwMax + 1);
+  m_acBK |= (ECWmax & 0x0f) << 12;
+}
+
+void
+EdcaParameterSet::SetBkTXOPLimit (uint16_t txop)
+{
+  m_acBK |= txop << 16;
+}
+
+void
+EdcaParameterSet::SetViAifsn (uint8_t aifsn)
+{
+  m_acVI |= (aifsn & 0x0f);
+}
+
+void
+EdcaParameterSet::SetViAcm (uint8_t acm)
+{
+  m_acVI |= (acm & 0x01) << 4;
+}
+
+void
+EdcaParameterSet::SetViAci (uint8_t aci)
+{
+  m_acVI |= (aci & 0x03) << 5;
+}
+
+void
+EdcaParameterSet::SetViCWmin (uint8_t cwMin)
+{
+  uint8_t ECWmin = log2 (cwMin + 1);
+  m_acVI |= (ECWmin & 0x0f) << 8;
+}
+
+void
+EdcaParameterSet::SetViCWmax (uint8_t cwMax)
+{
+  uint8_t ECWmax = log2 (cwMax + 1);
+  m_acVI |= (ECWmax & 0x0f) << 12;
+}
+
+void
+EdcaParameterSet::SetViTXOPLimit (uint16_t txop)
+{
+  m_acVI |= txop << 16;
+}
+
+void
+EdcaParameterSet::SetVoAifsn (uint8_t aifsn)
+{
+  m_acVO |= (aifsn & 0x0f);
+}
+
+void
+EdcaParameterSet::SetVoAcm (uint8_t acm)
+{
+  m_acVO |= (acm & 0x01) << 4;
+}
+
+void
+EdcaParameterSet::SetVoAci (uint8_t aci)
+{
+  m_acVO |= (aci & 0x03) << 5;
+}
+
+void
+EdcaParameterSet::SetVoCWmin (uint8_t cwMin)
+{
+  uint8_t ECWmin = log2 (cwMin + 1);
+  m_acVO |= (ECWmin & 0x0f) << 8;
+}
+
+void
+EdcaParameterSet::SetVoCWmax (uint8_t cwMax)
+{
+  uint8_t ECWmax = log2 (cwMax + 1);
+  m_acVO |= (ECWmax & 0x0f) << 12;
+}
+
+void
+EdcaParameterSet::SetVoTXOPLimit (uint16_t txop)
+{
+  m_acVO |= txop << 16;
+}
+
+uint8_t
+EdcaParameterSet::GetQosInfo (void) const
+{
+  return m_qosInfo;
+}
+
+uint8_t
+EdcaParameterSet::GetBeAifsn (void) const
+{
+  return (m_acBE & 0x0f);
+}
+
+uint8_t
+EdcaParameterSet::GetBeAcm (void) const
+{
+  return ((m_acBE >> 4) & 0x01);
+}
+
+uint8_t
+EdcaParameterSet::GetBeAci (void) const
+{
+  return ((m_acBE >> 5) & 0x03);
+}
+
+uint8_t
+EdcaParameterSet::GetBeCWmin (void) const
+{
+  uint8_t ECWmin = ((m_acBE >> 8) & 0x0f);
+  return (exp2 (ECWmin) - 1);
+}
+
+uint8_t
+EdcaParameterSet::GetBeCWmax (void) const
+{
+  uint8_t ECWmax = ((m_acBE >> 12) & 0x0f);
+  return (exp2 (ECWmax) - 1);
+}
+
+uint16_t
+EdcaParameterSet::GetBeTXOPLimit (void) const
+{
+  return (m_acBE >> 16);
+}
+
+uint8_t
+EdcaParameterSet::GetBkAifsn (void) const
+{
+  return (m_acBK & 0x0f);
+}
+
+uint8_t
+EdcaParameterSet::GetBkAcm (void) const
+{
+  return ((m_acBK >> 4) & 0x01);
+}
+
+uint8_t
+EdcaParameterSet::GetBkAci (void) const
+{
+  return ((m_acBK >> 5) & 0x03);
+}
+
+uint8_t
+EdcaParameterSet::GetBkCWmin (void) const
+{
+  uint8_t ECWmin = ((m_acBK >> 8) & 0x0f);
+  return (exp2 (ECWmin) - 1);
+}
+
+uint8_t
+EdcaParameterSet::GetBkCWmax (void) const
+{
+  uint8_t ECWmax = ((m_acBK >> 12) & 0x0f);
+  return (exp2 (ECWmax) - 1);
+}
+
+uint16_t
+EdcaParameterSet::GetBkTXOPLimit (void) const
+{
+  return (m_acBK >> 16);
+}
+
+uint8_t
+EdcaParameterSet::GetViAifsn (void) const
+{
+  return (m_acVI & 0x0f);
+}
+
+uint8_t
+EdcaParameterSet::GetViAcm (void) const
+{
+  return ((m_acVI >> 4) & 0x01);
+}
+
+uint8_t
+EdcaParameterSet::GetViAci (void) const
+{
+  return ((m_acVI >> 5) & 0x03);
+}
+
+uint8_t
+EdcaParameterSet::GetViCWmin (void) const
+{
+  uint8_t ECWmin = ((m_acVI >> 8) & 0x0f);
+  return (exp2 (ECWmin) - 1);
+}
+
+uint8_t
+EdcaParameterSet::GetViCWmax (void) const
+{
+  uint8_t ECWmax = ((m_acVI >> 12) & 0x0f);
+  return (exp2 (ECWmax) - 1);
+}
+
+uint16_t
+EdcaParameterSet::GetViTXOPLimit (void) const
+{
+  return (m_acVI >> 16);
+}
+
+uint8_t
+EdcaParameterSet::GetVoAifsn (void) const
+{
+  return (m_acVO & 0x0f);
+}
+
+uint8_t
+EdcaParameterSet::GetVoAcm (void) const
+{
+  return ((m_acVO >> 4) & 0x01);
+}
+
+uint8_t
+EdcaParameterSet::GetVoAci (void) const
+{
+  return ((m_acVO >> 5) & 0x03);
+}
+
+uint8_t
+EdcaParameterSet::GetVoCWmin (void) const
+{
+  uint8_t ECWmin = ((m_acVO >> 8) & 0x0f);
+  return (exp2 (ECWmin) - 1);
+}
+
+uint8_t
+EdcaParameterSet::GetVoCWmax (void) const
+{
+  uint8_t ECWmax = ((m_acVO >> 12) & 0x0f);
+  return (exp2 (ECWmax) - 1);
+}
+
+uint16_t
+EdcaParameterSet::GetVoTXOPLimit (void) const
+{
+  return (m_acVO >> 16);
+}
+
+uint8_t
+EdcaParameterSet::GetInformationFieldSize () const
+{
+  NS_ASSERT (m_qosSupported > 0);
+  return 18;
+}
+
+Buffer::Iterator
+EdcaParameterSet::Serialize (Buffer::Iterator i) const
+{
+  if (m_qosSupported < 1)
+    {
+      return i;
+    }
+  return WifiInformationElement::Serialize (i);
+}
+
+uint16_t
+EdcaParameterSet::GetSerializedSize () const
+{
+  if (m_qosSupported < 1)
+    {
+      return 0;
+    }
+  return WifiInformationElement::GetSerializedSize ();
+}
+
+void
+EdcaParameterSet::SerializeInformationField (Buffer::Iterator start) const
+{
+  if (m_qosSupported == 1)
+    {
+      start.WriteU8 (m_qosInfo);
+      start.WriteU8 (m_reserved);
+      start.WriteU32 (m_acBE);
+      start.WriteU32 (m_acBK);
+      start.WriteU32 (m_acVI);
+      start.WriteU32 (m_acVO);
+    }
+}
+
+uint8_t
+EdcaParameterSet::DeserializeInformationField (Buffer::Iterator start, uint8_t length)
+{
+  Buffer::Iterator i = start;
+  m_qosInfo = i.ReadU8 ();
+  m_reserved = i.ReadU8 ();
+  m_acBE = i.ReadU32 ();
+  m_acBK = i.ReadU32 ();
+  m_acVI = i.ReadU32 ();
+  m_acVO = i.ReadU32 ();
+  return length;
+}
+
+ATTRIBUTE_HELPER_CPP (EdcaParameterSet);
+
+std::ostream & operator << (std::ostream &os, const EdcaParameterSet &edcaParameterSet)
+{
+  return os;
+}
+
+std::istream &operator >> (std::istream &is, EdcaParameterSet &edcaParameterSet)
+{
+  return is;
+}
+
+} //namespace ns3
diff -Naur ns-3.25/src/wifi/model/edca-parameter-set.h ns-3.26/src/wifi/model/edca-parameter-set.h
--- ns-3.25/src/wifi/model/edca-parameter-set.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/wifi/model/edca-parameter-set.h	2016-10-03 19:49:01.784386632 -0700
@@ -0,0 +1,387 @@
+/* -*- 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 EDCA_PARAMETER_SET_H
+#define EDCA_PARAMETER_SET_H
+
+#include <stdint.h>
+#include <ostream>
+#include "ns3/buffer.h"
+#include "ns3/wifi-information-element.h"
+
+namespace ns3 {
+
+/**
+ * \brief The EDCA Parameter Set
+ * \ingroup wifi
+ *
+ * This class knows how to serialise and deserialise the EDCA Parameter Set.
+ */
+class EdcaParameterSet : public WifiInformationElement
+{
+public:
+  EdcaParameterSet ();
+  void SetQosSupported (uint8_t qosSupported);
+  
+  /**
+   * Set the QoS Info field in the EdcaParameterSet information element.
+   *
+   * \param qosInfo the QoS Info field in the EdcaParameterSet information element
+   */
+  void SetQosInfo (uint8_t qosInfo);
+  /**
+   * Set the AC_BE AIFSN field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_BE AIFSN field in the EdcaParameterSet information element
+   */
+  void SetBeAifsn (uint8_t aifsn);
+  /**
+   * Set the AC_BE ACM field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_BE ACM field in the EdcaParameterSet information element
+   */
+  void SetBeAcm (uint8_t acm);
+  /**
+   * Set the AC_BE ACI field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_BE ACI field in the EdcaParameterSet information element
+   */
+  void SetBeAci (uint8_t aci);
+  /**
+   * Set the AC_BE CWmin field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_BE CWmin field in the EdcaParameterSet information element
+   */
+  void SetBeCWmin (uint8_t cwMin);
+  /**
+   * Set the AC_BE CWmax field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_BE CWmax field in the EdcaParameterSet information element
+   */
+  void SetBeCWmax (uint8_t cwMax);
+  /**
+   * Set the AC_BE TXOP Limit field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_BE TXOP Limit field in the EdcaParameterSet information element
+   */
+  void SetBeTXOPLimit (uint16_t txop);
+  /**
+   * Set the AC_BK AIFSN field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_BB AIFSN field in the EdcaParameterSet information element
+   */
+  void SetBkAifsn (uint8_t aifsn);
+  /**
+   * Set the AC_BK ACM field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_BK ACM field in the EdcaParameterSet information element
+   */
+  void SetBkAcm (uint8_t acm);
+  /**
+   * Set the AC_BK ACI field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_BK ACI field in the EdcaParameterSet information element
+   */
+  void SetBkAci (uint8_t aci);
+  /**
+   * Set the AC_BK CWmin field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_BK CWmin field in the EdcaParameterSet information element
+   */
+  void SetBkCWmin (uint8_t cwMin);
+  /**
+   * Set the AC_BK CWmax field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_BK CWmax field in the EdcaParameterSet information element
+   */
+  void SetBkCWmax (uint8_t cwMax);
+  /**
+   * Set the AC_BK TXOP Limit field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_BK TXOP Limit field in the EdcaParameterSet information element
+   */
+  void SetBkTXOPLimit (uint16_t txop);
+  /**
+   * Set the AC_VI AIFSN field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_VI AIFSN field in the EdcaParameterSet information element
+   */
+  void SetViAifsn (uint8_t aifsn);
+  /**
+   * Set the AC_VI ACM field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_VI ACM field in the EdcaParameterSet information element
+   */
+  void SetViAcm (uint8_t acm);
+  /**
+   * Set the AC_VI ACI field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_VI ACI field in the EdcaParameterSet information element
+   */
+  void SetViAci (uint8_t aci);
+  /**
+   * Set the AC_VI CWmin field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_VI CWmin field in the EdcaParameterSet information element
+   */
+  void SetViCWmin (uint8_t cwMin);
+  /**
+   * Set the AC_VI CWmax field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_VI CWmax field in the EdcaParameterSet information element
+   */
+  void SetViCWmax (uint8_t cwMax);
+  /**
+   * Set the AC_VI TXOP Limit field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_VI TXOP Limit field in the EdcaParameterSet information element
+   */
+  void SetViTXOPLimit (uint16_t txop);
+  /**
+   * Set the AC_VO AIFSN field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_VO AIFSN field in the EdcaParameterSet information element
+   */
+  void SetVoAifsn (uint8_t aifsn);
+  /**
+   * Set the AC_VO ACM field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_VO ACM field in the EdcaParameterSet information element
+   */
+  void SetVoAcm (uint8_t acm);
+  /**
+   * Set the AC_VO ACI field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_VO ACI field in the EdcaParameterSet information element
+   */
+  void SetVoAci (uint8_t aci);
+  /**
+   * Set the AC_VO CWmin field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_VO CWmin field in the EdcaParameterSet information element
+   */
+  void SetVoCWmin (uint8_t cwMin);
+  /**
+   * Set the AC_VO CWmax field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_VO CWmax field in the EdcaParameterSet information element
+   */
+  void SetVoCWmax (uint8_t cwMax);
+  /**
+   * Set the AC_VO TXOP Limit field in the EdcaParameterSet information element.
+   *
+   * \param aifsn the AC_VO TXOP Limit field in the EdcaParameterSet information element
+   */
+  void SetVoTXOPLimit (uint16_t txop);
+  
+  /*
+   * Return the QoS Info field in the EdcaParameterSet information element.
+   *
+   * \return the QoS Info field in the EdcaParameterSet information element
+   */
+  uint8_t GetQosInfo (void) const;
+  /*
+   * Return the AC_BE AIFSN field in the EdcaParameterSet information element.
+   *
+   * \return the AC_BE AIFSN field in the EdcaParameterSet information element
+   */
+  uint8_t GetBeAifsn (void) const;
+  /*
+   * Return the AC_BE ACM field in the EdcaParameterSet information element.
+   *
+   * \return the AC_BE ACM field in the EdcaParameterSet information element
+   */
+  uint8_t GetBeAcm (void) const;
+  /*
+   * Return the AC_BE ACI field in the EdcaParameterSet information element.
+   *
+   * \return the AC_BE ACI field in the EdcaParameterSet information element
+   */
+  uint8_t GetBeAci (void) const;
+  /*
+   * Return the AC_BE CWmin field in the EdcaParameterSet information element.
+   *
+   * \return the AC_BE CWmin field in the EdcaParameterSet information element
+   */
+  uint8_t GetBeCWmin (void) const;
+  /*
+   * Return the AC_BE CWmax field in the EdcaParameterSet information element.
+   *
+   * \return the AC_BE CWmax field in the EdcaParameterSet information element
+   */
+  uint8_t GetBeCWmax (void) const;
+  /*
+   * Return the AC_BE TXOP Limit field in the EdcaParameterSet information element.
+   *
+   * \return the AC_BE TXOP Limit field in the EdcaParameterSet information element
+   */
+  uint16_t GetBeTXOPLimit (void) const;
+  /*
+   * Return the AC_BK AIFSN field in the EdcaParameterSet information element.
+   *
+   * \return the AC_BK AIFSN field in the EdcaParameterSet information element
+   */
+  uint8_t GetBkAifsn (void) const;
+  /*
+   * Return the AC_BK ACM field in the EdcaParameterSet information element.
+   *
+   * \return the AC_BK ACM field in the EdcaParameterSet information element
+   */
+  uint8_t GetBkAcm (void) const;
+  /*
+   * Return the AC_BK ACI field in the EdcaParameterSet information element.
+   *
+   * \return the AC_BK ACI field in the EdcaParameterSet information element
+   */
+  uint8_t GetBkAci (void) const;
+  /*
+   * Return the AC_BK CWmin field in the EdcaParameterSet information element.
+   *
+   * \return the AC_BK CWmin field in the EdcaParameterSet information element
+   */
+  uint8_t GetBkCWmin (void) const;
+  /*
+   * Return the AC_BK CWmax field in the EdcaParameterSet information element.
+   *
+   * \return the AC_BK CWmax field in the EdcaParameterSet information element
+   */
+  uint8_t GetBkCWmax (void) const;
+  /*
+   * Return the AC_BK TXOP Limit field in the EdcaParameterSet information element.
+   *
+   * \return the AC_BK TXOP Limit field in the EdcaParameterSet information element
+   */
+  uint16_t GetBkTXOPLimit (void) const;
+  /*
+   * Return the AC_VI AIFSN field in the EdcaParameterSet information element.
+   *
+   * \return the AC_VI AIFSN field in the EdcaParameterSet information element
+   */
+  uint8_t GetViAifsn (void) const;
+  /*
+   * Return the AC_VI ACM field in the EdcaParameterSet information element.
+   *
+   * \return the AC_VI ACM field in the EdcaParameterSet information element
+   */
+  uint8_t GetViAcm (void) const;
+  /*
+   * Return the AC_VI ACI field in the EdcaParameterSet information element.
+   *
+   * \return the AC_VI ACI field in the EdcaParameterSet information element
+   */
+  uint8_t GetViAci (void) const;
+  /*
+   * Return the AC_VI CWmin field in the EdcaParameterSet information element.
+   *
+   * \return the AC_VI CWmin field in the EdcaParameterSet information element
+   */
+  uint8_t GetViCWmin (void) const;
+  /*
+   * Return the AC_VI CWmax field in the EdcaParameterSet information element.
+   *
+   * \return the AC_VI CWmax field in the EdcaParameterSet information element
+   */
+  uint8_t GetViCWmax (void) const;
+  /*
+   * Return the AC_VI TXOP Limit field in the EdcaParameterSet information element.
+   *
+   * \return the AC_VI TXOP Limit field in the EdcaParameterSet information element
+   */
+  uint16_t GetViTXOPLimit (void) const;
+  /*
+   * Return the AC_VO AIFSN field in the EdcaParameterSet information element.
+   *
+   * \return the AC_VO AIFSN field in the EdcaParameterSet information element
+   */
+  uint8_t GetVoAifsn (void) const;
+  /*
+   * Return the AC_VO ACM field in the EdcaParameterSet information element.
+   *
+   * \return the AC_VO ACM field in the EdcaParameterSet information element
+   */
+  uint8_t GetVoAcm (void) const;
+  /*
+   * Return the AC_VO ACI field in the EdcaParameterSet information element.
+   *
+   * \return the AC_VO ACI field in the EdcaParameterSet information element
+   */
+  uint8_t GetVoAci (void) const;
+  /*
+   * Return the AC_VO CWmin field in the EdcaParameterSet information element.
+   *
+   * \return the AC_VO CWmin field in the EdcaParameterSet information element
+   */
+  uint8_t GetVoCWmin (void) const;
+  /*
+   * Return the AC_VO CWmax field in the EdcaParameterSet information element.
+   *
+   * \return the AC_VO CWmax field in the EdcaParameterSet information element
+   */
+  uint8_t GetVoCWmax (void) const;
+  /*
+   * Return the AC_VO TXOP Limit field in the EdcaParameterSet information element.
+   *
+   * \return the AC_VO TXOP Limit field in the EdcaParameterSet information element
+   */
+  uint16_t GetVoTXOPLimit (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 a QoS 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 EDCA Parameter Set.
+   *
+   * \return the serialized size of this EDCA Parameter Set
+   */
+  uint16_t GetSerializedSize () const;
+
+private:
+  uint8_t m_qosInfo;
+  uint8_t m_reserved;
+  uint32_t m_acBE;
+  uint32_t m_acBK;
+  uint32_t m_acVI;
+  uint32_t m_acVO;
+
+  //This is used to decide whether this element should be added to the frame or not
+  bool m_qosSupported;
+};
+
+std::ostream &operator << (std::ostream &os, const EdcaParameterSet &edcaParameterSet);
+std::istream &operator >> (std::istream &is, EdcaParameterSet &edcaParameterSet);
+
+ATTRIBUTE_HELPER_HEADER (EdcaParameterSet);
+
+} //namespace ns3
+
+#endif /* EDCA_PARAMETER_SET_H */
diff -Naur ns-3.25/src/wifi/model/edca-txop-n.cc ns-3.26/src/wifi/model/edca-txop-n.cc
--- ns-3.25/src/wifi/model/edca-txop-n.cc	2016-10-03 20:57:08.493245722 -0700
+++ ns-3.26/src/wifi/model/edca-txop-n.cc	2016-10-03 19:49:01.785386625 -0700
@@ -35,6 +35,7 @@
 #include "mpdu-aggregator.h"
 #include "mgt-headers.h"
 #include "qos-blocked-destinations.h"
+#include "ns3/simulator.h"
 
 #undef NS_LOG_APPEND_CONTEXT
 #define NS_LOG_APPEND_CONTEXT if (m_low != 0) { std::clog << "[mac=" << m_low->GetAddress () << "] "; }
@@ -123,6 +124,10 @@
   {
     m_txop->MissedBlockAck (nMpdus);
   }
+  virtual void StartNextFragment (void)
+  {
+    m_txop->StartNextFragment ();
+  }
   virtual void StartNext (void)
   {
     m_txop->StartNext ();
@@ -240,6 +245,14 @@
                    PointerValue (),
                    MakePointerAccessor (&EdcaTxopN::GetEdcaQueue),
                    MakePointerChecker<WifiMacQueue> ())
+    .AddTraceSource ("BackoffTrace",
+                     "Trace source for backoff values",
+                     MakeTraceSourceAccessor (&EdcaTxopN::m_backoffTrace),
+                     "ns3::TracedValue::Uint32Callback")
+    .AddTraceSource ("CwTrace",
+                     "Trace source for contention window values",
+                     MakeTraceSourceAccessor (&EdcaTxopN::m_cwTrace),
+                     "ns3::TracedValue::Uint32Callback")
   ;
   return tid;
 }
@@ -250,7 +263,9 @@
     m_msduAggregator (0),
     m_mpduAggregator (0),
     m_typeOfStation (STA),
-    m_blockAckType (COMPRESSED_BLOCK_ACK)
+    m_blockAckType (COMPRESSED_BLOCK_ACK),
+    m_startTxop (Seconds (0)),
+    m_isAccessRequestedForRts (false)
 {
   NS_LOG_FUNCTION (this);
   m_transmissionListener = new EdcaTxopN::TransmissionListener (this);
@@ -299,7 +314,7 @@
 }
 
 bool
-EdcaTxopN::GetBaAgreementExists (Mac48Address address, uint8_t tid)
+EdcaTxopN::GetBaAgreementExists (Mac48Address address, uint8_t tid) const
 {
   return m_baManager->ExistsAgreement (address, tid);
 }
@@ -394,6 +409,13 @@
   m_dcf->SetAifsn (aifsn);
 }
 
+void
+EdcaTxopN::SetTxopLimit (Time txopLimit)
+{
+  NS_LOG_FUNCTION (this << txopLimit);
+  m_dcf->SetTxopLimit (txopLimit);
+}
+
 uint32_t
 EdcaTxopN::GetMinCw (void) const
 {
@@ -415,6 +437,13 @@
   return m_dcf->GetAifsn ();
 }
 
+Time
+EdcaTxopN::GetTxopLimit (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_dcf->GetTxopLimit ();
+}
+
 void
 EdcaTxopN::SetTxMiddle (MacTxMiddle *txMiddle)
 {
@@ -425,7 +454,6 @@
 Ptr<MacLow>
 EdcaTxopN::Low (void)
 {
-  NS_LOG_FUNCTION (this);
   return m_low;
 }
 
@@ -456,7 +484,7 @@
 Ptr<const Packet>
 EdcaTxopN::PeekNextRetransmitPacket (WifiMacHeader &header,Mac48Address recipient, uint8_t tid, Time *timestamp)
 {
-  return m_baManager->PeekNextPacket (header,recipient,tid, timestamp);
+  return m_baManager->PeekNextPacketByTidAndAddress (header,recipient,tid, timestamp);
 }
 
 void
@@ -469,6 +497,7 @@
 EdcaTxopN::NotifyAccessGranted (void)
 {
   NS_LOG_FUNCTION (this);
+  m_isAccessRequestedForRts = false;
   if (m_currentPacket == 0)
     {
       if (m_queue->IsEmpty () && !m_baManager->HasPackets ())
@@ -544,7 +573,7 @@
           params.EnableAck ();
         }
       if (((m_currentHdr.IsQosData () && !m_currentHdr.IsQosAmsdu ())
-           ||(m_currentHdr.IsData () && !m_currentHdr.IsQosData () && m_currentHdr.IsQosAmsdu ()))
+          || (m_currentHdr.IsData () && !m_currentHdr.IsQosData ()))
           && (m_blockAckThreshold == 0 || m_blockAckType == BASIC_BLOCK_ACK)
           && NeedFragmentation ())
         {
@@ -612,6 +641,7 @@
                 }
             }
           params.DisableNextData ();
+          m_startTxop = Simulator::Now ();
           m_low->StartTransmission (m_currentPacket, &m_currentHdr,
                                     params, m_transmissionListener);
           if (!GetAmpduExist (m_currentHdr.GetAddr1 ()))
@@ -625,14 +655,84 @@
 void EdcaTxopN::NotifyInternalCollision (void)
 {
   NS_LOG_FUNCTION (this);
-  NotifyCollision ();
+  bool resetDcf = false;
+  // If an internal collision is experienced, the frame involved may still
+  // be sitting in the queue, and m_currentPacket may still be null.
+  Ptr<const Packet> packet;
+  WifiMacHeader header;
+  if (m_currentPacket == 0)
+    {
+      packet = m_queue->Peek (&header);
+      NS_ASSERT_MSG (packet, "Internal collision but no packet in queue");
+    }
+  else
+    {
+      packet = m_currentPacket;
+      header = m_currentHdr;
+    }
+  if (m_isAccessRequestedForRts)
+    {
+      if (!NeedRtsRetransmission (packet, header))
+      {
+        resetDcf = true;
+        m_stationManager->ReportFinalRtsFailed (header.GetAddr1 (), &header);
+      }
+      else
+      {
+        m_stationManager->ReportRtsFailed (header.GetAddr1 (), &header);
+      }
+    }
+  else if (header.GetAddr1 () == Mac48Address::GetBroadcast ())
+    {
+      resetDcf = false;
+    }
+  else
+    {
+      if (!NeedDataRetransmission (packet, header))
+      {
+        resetDcf = true;
+        m_stationManager->ReportFinalDataFailed (header.GetAddr1 (), &header);
+      }
+      else
+      {
+        m_stationManager->ReportDataFailed (header.GetAddr1 (), &header);
+      }
+    }
+  if (resetDcf)
+    {
+      NS_LOG_DEBUG ("reset DCF");
+      if (!m_txFailedCallback.IsNull ())
+        {
+          m_txFailedCallback (header);
+        }
+      //to reset the dcf.
+      if (m_currentPacket)
+        {
+          NS_LOG_DEBUG ("Discarding m_currentPacket");
+          m_currentPacket = 0;
+        }
+      else
+        {
+          NS_LOG_DEBUG ("Dequeueing and discarding head of queue");
+          packet = m_queue->Peek (&header);
+        }
+      m_dcf->ResetCw ();
+    }
+  else
+    {
+      m_dcf->UpdateFailedCw ();
+    }
+  m_backoffTrace = m_rng->GetNext (0, m_dcf->GetCw ());
+  m_dcf->StartBackoffNow (m_backoffTrace);
+  RestartAccessIfNeeded ();
 }
 
 void
 EdcaTxopN::NotifyCollision (void)
 {
   NS_LOG_FUNCTION (this);
-  m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
+  m_backoffTrace = m_rng->GetNext (0, m_dcf->GetCw ());
+  m_dcf->StartBackoffNow (m_backoffTrace);
   RestartAccessIfNeeded ();
 }
 
@@ -643,12 +743,77 @@
   NS_LOG_DEBUG ("got cts");
 }
 
+uint8_t
+EdcaTxopN::GetCurrentTid () const
+{
+  NS_LOG_FUNCTION (this);
+  if (m_currentHdr.IsQosData ())
+    {
+      return m_currentHdr.GetQosTid ();
+    }
+  else if (m_currentHdr.IsBlockAckReq ())
+    {
+      CtrlBAckRequestHeader baReqHdr;
+      m_currentPacket->PeekHeader (baReqHdr);
+      return baReqHdr.GetTidInfo ();
+    }
+  else if (m_currentHdr.IsBlockAck ())
+    {
+      CtrlBAckResponseHeader baRespHdr;
+      m_currentPacket->PeekHeader (baRespHdr);
+      return baRespHdr.GetTidInfo ();
+    }
+  else if (m_currentHdr.IsMgt () && m_currentHdr.IsAction ())
+    {
+      Ptr<Packet> packet = m_currentPacket->Copy ();
+      WifiActionHeader actionHdr;
+      packet->RemoveHeader (actionHdr);
+
+      if (actionHdr.GetCategory () == WifiActionHeader::BLOCK_ACK)
+        {
+          switch (actionHdr.GetAction ().blockAck)
+            {
+            case WifiActionHeader::BLOCK_ACK_ADDBA_REQUEST:
+              {
+                MgtAddBaResponseHeader reqHdr;
+                packet->RemoveHeader (reqHdr);
+                return reqHdr.GetTid ();
+              }
+            case WifiActionHeader::BLOCK_ACK_ADDBA_RESPONSE:
+              {
+                MgtAddBaResponseHeader respHdr;
+                packet->RemoveHeader (respHdr);
+                return respHdr.GetTid ();
+              }
+            case WifiActionHeader::BLOCK_ACK_DELBA:
+              {
+                MgtDelBaHeader delHdr;
+                packet->RemoveHeader (delHdr);
+                return delHdr.GetTid ();
+              }
+            default:
+              {
+                NS_FATAL_ERROR ("Don't know how to extract Traffic ID from this BA action frame");
+              }
+            }
+        }
+      else
+        {
+          NS_FATAL_ERROR ("Don't know how to extract Traffic ID from this action frame");
+        }
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Current packet has no Traffic ID");
+    }
+}
+
 void
 EdcaTxopN::MissedCts (void)
 {
   NS_LOG_FUNCTION (this);
   NS_LOG_DEBUG ("missed cts");
-  if (!NeedRtsRetransmission ())
+  if (!NeedRtsRetransmission (m_currentPacket, m_currentHdr))
     {
       NS_LOG_DEBUG ("Cts Fail");
       bool resetCurrentPacket = true;
@@ -657,24 +822,10 @@
         {
           m_txFailedCallback (m_currentHdr);
         }
-      if (GetAmpduExist (m_currentHdr.GetAddr1 ()))
+      if (GetAmpduExist (m_currentHdr.GetAddr1 ()) || m_currentHdr.IsQosData ())
         {
           m_low->FlushAggregateQueue ();
-          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
-            {
-              NS_FATAL_ERROR ("Current packet is not Qos Data nor BlockAckReq");
-            }
+          uint8_t tid = GetCurrentTid ();
 
           if (GetBaAgreementExists (m_currentHdr.GetAddr1 (), tid))
             {
@@ -708,12 +859,15 @@
           m_currentPacket = 0;
         }
       m_dcf->ResetCw ();
+      m_cwTrace = m_dcf->GetCw ();
     }
   else
     {
       m_dcf->UpdateFailedCw ();
+      m_cwTrace = m_dcf->GetCw ();
     }
-  m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
+  m_backoffTrace = m_rng->GetNext (0, m_dcf->GetCw ());
+  m_dcf->StartBackoffNow (m_backoffTrace);
   RestartAccessIfNeeded ();
 }
 
@@ -747,7 +901,6 @@
 EdcaTxopN::Queue (Ptr<const Packet> packet, const WifiMacHeader &hdr)
 {
   NS_LOG_FUNCTION (this << packet << &hdr);
-  WifiMacTrailer fcs;
   m_stationManager->PrepareForQueue (hdr.GetAddr1 (), &hdr, packet);
   m_queue->Enqueue (packet, hdr);
   StartAccessIfNeeded ();
@@ -788,10 +941,14 @@
             }
         }
       m_currentPacket = 0;
-
       m_dcf->ResetCw ();
-      m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
-      RestartAccessIfNeeded ();
+      if (!HasTxop ())
+        {
+          m_cwTrace = m_dcf->GetCw ();
+          m_backoffTrace = m_rng->GetNext (0, m_dcf->GetCw ());
+          m_dcf->StartBackoffNow (m_backoffTrace);
+          RestartAccessIfNeeded ();
+        }
     }
   else
     {
@@ -804,7 +961,7 @@
 {
   NS_LOG_FUNCTION (this);
   NS_LOG_DEBUG ("missed ack");
-  if (!NeedDataRetransmission ())
+  if (!NeedDataRetransmission (m_currentPacket, m_currentHdr))
     {
       NS_LOG_DEBUG ("Ack Fail");
       m_stationManager->ReportFinalDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr);
@@ -813,17 +970,9 @@
         {
           m_txFailedCallback (m_currentHdr);
         }
-      if (GetAmpduExist (m_currentHdr.GetAddr1 ()))
+      if (GetAmpduExist (m_currentHdr.GetAddr1 ()) || m_currentHdr.IsQosData ())
         {
-          uint8_t tid = 0;
-          if (m_currentHdr.IsQosData ())
-            {
-              tid = m_currentHdr.GetQosTid ();
-            }
-          else
-            {
-              NS_FATAL_ERROR ("Current packet is not Qos Data");
-            }
+          uint8_t tid = GetCurrentTid ();
 
           if (GetBaAgreementExists (m_currentHdr.GetAddr1 (), tid))
             {
@@ -858,14 +1007,17 @@
           m_currentPacket = 0;
         }
       m_dcf->ResetCw ();
+      m_cwTrace = m_dcf->GetCw ();
     }
   else
     {
       NS_LOG_DEBUG ("Retransmit");
       m_currentHdr.SetRetry ();
       m_dcf->UpdateFailedCw ();
+      m_cwTrace = m_dcf->GetCw ();
     }
-  m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
+  m_backoffTrace = m_rng->GetNext (0, m_dcf->GetCw ());
+  m_dcf->StartBackoffNow (m_backoffTrace);
   RestartAccessIfNeeded ();
 }
 
@@ -874,23 +1026,7 @@
 {
   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 ();
-    }
+  uint8_t tid = GetCurrentTid ();
   if (GetAmpduExist (m_currentHdr.GetAddr1 ()))
     {
       m_stationManager->ReportAmpduTxStatus (m_currentHdr.GetAddr1 (), tid, 0, nMpdus, 0, 0);
@@ -945,6 +1081,7 @@
           m_currentHdr = hdr;
         }
       m_dcf->UpdateFailedCw ();
+      m_cwTrace = m_dcf->GetCw ();
     }
   else
     {
@@ -952,8 +1089,10 @@
       //to reset the dcf.
       m_currentPacket = 0;
       m_dcf->ResetCw ();
+      m_cwTrace = m_dcf->GetCw ();
     }
-  m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
+  m_backoffTrace = m_rng->GetNext (0, m_dcf->GetCw ());
+  m_dcf->StartBackoffNow (m_backoffTrace);
   RestartAccessIfNeeded ();
 }
 
@@ -977,6 +1116,29 @@
        || !m_queue->IsEmpty () || m_baManager->HasPackets ())
       && !m_dcf->IsAccessRequested ())
     {
+      Ptr<const Packet> packet;
+      WifiMacHeader hdr;
+      if (m_currentPacket != 0)
+        {
+          packet = m_currentPacket;
+          hdr = m_currentHdr;
+        }
+      else if (m_baManager->HasPackets ())
+        {
+          packet = m_baManager->PeekNextPacket (hdr);
+        }
+      else if (m_queue->PeekFirstAvailable (&hdr, m_currentPacketTimestamp, m_qosBlockedDestinations) != 0)
+        {
+          packet = m_queue->PeekFirstAvailable (&hdr, m_currentPacketTimestamp, m_qosBlockedDestinations);
+        }
+      if (packet != 0)
+        {
+          m_isAccessRequestedForRts = m_stationManager->NeedRts (hdr.GetAddr1 (), &hdr, packet, m_low->GetDataTxVector (packet, &hdr));
+        }
+      else
+        {
+          m_isAccessRequestedForRts = false;
+        }
       m_manager->RequestAccess (m_dcf);
     }
 }
@@ -989,24 +1151,45 @@
       && (!m_queue->IsEmpty () || m_baManager->HasPackets ())
       && !m_dcf->IsAccessRequested ())
     {
+      Ptr<const Packet> packet;
+      WifiMacHeader hdr;
+      if (m_currentPacket != 0)
+        {
+          packet = m_currentPacket;
+          hdr = m_currentHdr;
+        }
+      else if (m_baManager->HasPackets ())
+        {
+          packet = m_baManager->PeekNextPacket (hdr);
+        }
+      else if (m_queue->PeekFirstAvailable (&hdr, m_currentPacketTimestamp, m_qosBlockedDestinations) != 0)
+        {
+          packet = m_queue->PeekFirstAvailable (&hdr, m_currentPacketTimestamp, m_qosBlockedDestinations);
+        }
+      if (packet != 0)
+        {
+          m_isAccessRequestedForRts = m_stationManager->NeedRts (hdr.GetAddr1 (), &hdr, packet, m_low->GetDataTxVector (packet, &hdr));
+        }
+      else
+        {
+          m_isAccessRequestedForRts = false;
+        }
       m_manager->RequestAccess (m_dcf);
     }
 }
 
 bool
-EdcaTxopN::NeedRtsRetransmission (void)
+EdcaTxopN::NeedRtsRetransmission (Ptr<const Packet> packet, const WifiMacHeader &hdr)
 {
   NS_LOG_FUNCTION (this);
-  return m_stationManager->NeedRtsRetransmission (m_currentHdr.GetAddr1 (), &m_currentHdr,
-                                                  m_currentPacket);
+  return m_stationManager->NeedRtsRetransmission (hdr.GetAddr1 (), &hdr, packet);
 }
 
 bool
-EdcaTxopN::NeedDataRetransmission (void)
+EdcaTxopN::NeedDataRetransmission (Ptr<const Packet> packet, const WifiMacHeader &hdr)
 {
   NS_LOG_FUNCTION (this);
-  return m_stationManager->NeedDataRetransmission (m_currentHdr.GetAddr1 (), &m_currentHdr,
-                                                   m_currentPacket);
+  return m_stationManager->NeedDataRetransmission (hdr.GetAddr1 (), &hdr, packet);
 }
 
 bool
@@ -1044,7 +1227,7 @@
 }
 
 void
-EdcaTxopN::StartNext (void)
+EdcaTxopN::StartNextFragment (void)
 {
   NS_LOG_FUNCTION (this);
   NS_LOG_DEBUG ("start next packet fragment");
@@ -1068,6 +1251,113 @@
 }
 
 void
+EdcaTxopN::StartNext (void)
+{
+  NS_LOG_FUNCTION (this);
+  WifiMacHeader hdr;
+  Time tstamp;
+
+  Ptr<const Packet> peekedPacket = m_queue->PeekByTidAndAddress (&hdr,
+                                                                 m_currentHdr.GetQosTid (),
+                                                                 WifiMacHeader::ADDR1,
+                                                                 m_currentHdr.GetAddr1 (),
+                                                                 &tstamp);
+  if (peekedPacket == 0)
+    {
+      return;
+    }
+    
+  MacLowTransmissionParameters params;
+  params.DisableOverrideDurationId ();
+  if (m_currentHdr.IsQosData () && m_currentHdr.IsQosBlockAck ())
+    {
+      params.DisableAck ();
+    }
+  else
+    {
+      params.EnableAck ();
+    }
+    
+  WifiTxVector dataTxVector = m_stationManager->GetDataTxVector (m_currentHdr.GetAddr1 (), &m_currentHdr, peekedPacket);
+  if (m_stationManager->NeedRts (m_currentHdr.GetAddr1 (), &m_currentHdr, peekedPacket, dataTxVector))
+    {
+      params.EnableRts ();
+    }
+  else
+    {
+      params.DisableRts ();
+    }
+
+  if (GetTxopRemaining () >= Low ()->CalculateOverallTxTime (peekedPacket, &hdr, params))
+    {
+      NS_LOG_DEBUG ("start next packet");
+      m_currentPacket = m_queue->DequeueByTidAndAddress (&hdr,
+                                                         m_currentHdr.GetQosTid (),
+                                                         WifiMacHeader::ADDR1,
+                                                         m_currentHdr.GetAddr1 ());
+      Low ()->StartTransmission (m_currentPacket, &m_currentHdr, params, m_transmissionListener);
+    }
+}
+
+Time
+EdcaTxopN::GetTxopRemaining (void)
+{
+  Time remainingTxop = GetTxopLimit ();
+  remainingTxop -= (Simulator::Now () - m_startTxop);
+  if (remainingTxop < MicroSeconds (0))
+    {
+      remainingTxop = MicroSeconds (0);
+    }
+  NS_LOG_FUNCTION (this << remainingTxop);
+  return remainingTxop;
+}
+
+bool
+EdcaTxopN::HasTxop (void)
+{
+  NS_LOG_FUNCTION (this);
+  WifiMacHeader hdr;
+  Time tstamp;
+  if (!m_currentHdr.IsQosData ())
+    {
+      return false;
+    }
+
+  Ptr<const Packet> peekedPacket = m_queue->PeekByTidAndAddress (&hdr,
+                                                                 m_currentHdr.GetQosTid (),
+                                                                 WifiMacHeader::ADDR1,
+                                                                 m_currentHdr.GetAddr1 (),
+                                                                 &tstamp);
+  if (peekedPacket == 0)
+    {
+      return false;
+    }
+
+  MacLowTransmissionParameters params;
+  params.DisableOverrideDurationId ();
+  if (m_currentHdr.IsQosData () && m_currentHdr.IsQosBlockAck ())
+    {
+      params.DisableAck ();
+    }
+  else
+    {
+      params.EnableAck ();
+    }
+
+  WifiTxVector dataTxVector = m_stationManager->GetDataTxVector (m_currentHdr.GetAddr1 (), &m_currentHdr, peekedPacket);
+  if (m_stationManager->NeedRts (m_currentHdr.GetAddr1 (), &m_currentHdr, peekedPacket, dataTxVector))
+    {
+      params.EnableRts ();
+    }
+  else
+    {
+      params.DisableRts ();
+    }
+
+  return (GetTxopRemaining () >= Low ()->CalculateOverallTxTime (peekedPacket, &hdr, params));
+}
+
+void
 EdcaTxopN::Cancel (void)
 {
   NS_LOG_FUNCTION (this);
@@ -1081,7 +1371,9 @@
   NS_LOG_DEBUG ("a transmission that did not require an ACK just finished");
   m_currentPacket = 0;
   m_dcf->ResetCw ();
-  m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
+  m_cwTrace = m_dcf->GetCw ();
+  m_backoffTrace = m_rng->GetNext (0, m_dcf->GetCw ());
+  m_dcf->StartBackoffNow (m_backoffTrace);
   StartAccessIfNeeded ();
 }
 
@@ -1089,6 +1381,17 @@
 EdcaTxopN::NeedFragmentation (void) const
 {
   NS_LOG_FUNCTION (this);
+  if (m_stationManager->HasVhtSupported ()
+      || GetAmpduExist (m_currentHdr.GetAddr1 ())
+      || (m_stationManager->HasHtSupported ()
+      && m_currentHdr.IsQosData ()
+      && GetBaAgreementExists (m_currentHdr.GetAddr1 (), GetCurrentTid ())
+      && GetMpduAggregator ()->GetMaxAmpduSize () >= m_currentPacket->GetSize ()))
+    {
+      //MSDU is not fragmented when it is transmitted using an HT-immediate or
+      //HT-delayed Block Ack agreement or when it is carried in an A-MPDU.
+      return false;
+    }
   return m_stationManager->NeedFragmentation (m_currentHdr.GetAddr1 (), &m_currentHdr,
                                               m_currentPacket);
 }
@@ -1252,7 +1555,9 @@
     }
   m_currentPacket = 0;
   m_dcf->ResetCw ();
-  m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
+  m_cwTrace = m_dcf->GetCw ();
+  m_backoffTrace = m_rng->GetNext (0, m_dcf->GetCw ());
+  m_dcf->StartBackoffNow (m_backoffTrace);
   RestartAccessIfNeeded ();
 }
 
@@ -1273,7 +1578,7 @@
     }
 }
 
-bool EdcaTxopN::GetAmpduExist (Mac48Address dest)
+bool EdcaTxopN::GetAmpduExist (Mac48Address dest) const
 {
   NS_LOG_FUNCTION (this << dest);
   if (m_aMpduEnabled.find (dest) != m_aMpduEnabled.end ())
@@ -1528,7 +1833,9 @@
 {
   NS_LOG_FUNCTION (this);
   m_dcf->ResetCw ();
-  m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
+  m_cwTrace = m_dcf->GetCw ();
+  m_backoffTrace = m_rng->GetNext (0, m_dcf->GetCw ());
+  m_dcf->StartBackoffNow (m_backoffTrace);
   ns3::Dcf::DoInitialize ();
 }
 
diff -Naur ns-3.25/src/wifi/model/edca-txop-n.h ns-3.26/src/wifi/model/edca-txop-n.h
--- ns-3.25/src/wifi/model/edca-txop-n.h	2016-10-03 20:57:08.493245722 -0700
+++ ns-3.26/src/wifi/model/edca-txop-n.h	2016-10-03 19:49:01.786386617 -0700
@@ -25,6 +25,7 @@
 #include "ns3/object.h"
 #include "ns3/mac48-address.h"
 #include "ns3/packet.h"
+#include "ns3/traced-value.h"
 #include "wifi-mode.h"
 #include "wifi-mac-header.h"
 #include "wifi-remote-station-manager.h"
@@ -157,9 +158,11 @@
   virtual void SetMinCw (uint32_t minCw);
   virtual void SetMaxCw (uint32_t maxCw);
   virtual void SetAifsn (uint32_t aifsn);
+  virtual void SetTxopLimit (Time txopLimit);
   virtual uint32_t GetMinCw (void) const;
   virtual uint32_t GetMaxCw (void) const;
   virtual uint32_t GetAifsn (void) const;
+  virtual Time GetTxopLimit (void) const;
 
   /**
    * Return the MacLow associated with this EdcaTxopN.
@@ -179,7 +182,7 @@
    * Checks if a block ack agreement exists with station addressed by
    * <i>recipient</i> for tid <i>tid</i>.
    */
-  bool GetBaAgreementExists (Mac48Address address, uint8_t tid);
+  bool GetBaAgreementExists (Mac48Address address, uint8_t tid) const;
   /**
    * \param recipient address of peer station involved in block ack mechanism.
    * \param tid traffic ID.
@@ -281,6 +284,10 @@
    * Start transmission for the next fragment.
    * This is called for fragment only.
    */
+  void StartNextFragment (void);
+  /**
+   * Start transmission for the next packet if allowed by the TxopLimit.
+   */
   void StartNext (void);
   /**
    * Cancel the transmission.
@@ -302,17 +309,21 @@
   /**
    * Check if RTS should be re-transmitted if CTS was missed.
    *
+   * \param packet current packet being transmitted
+   * \param hdr current header being transmitted
    * \return true if RTS should be re-transmitted,
    *         false otherwise
    */
-  bool NeedRtsRetransmission (void);
+  bool NeedRtsRetransmission (Ptr<const Packet> packet, const WifiMacHeader &hdr);
   /**
    * Check if DATA should be re-transmitted if ACK was missed.
    *
+   * \param packet current packet being transmitted
+   * \param hdr current header being transmitted
    * \return true if DATA should be re-transmitted,
    *         false otherwise
    */
-  bool NeedDataRetransmission (void);
+  bool NeedDataRetransmission (Ptr<const Packet> packet, const WifiMacHeader &hdr);
   /**
    * Check if Block ACK Request should be re-transmitted.
    *
@@ -417,7 +428,7 @@
   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 (Mac48Address dest);
+  bool GetAmpduExist (Mac48Address dest) const;
   void SetAmpduExist (Mac48Address dest, bool enableAmpdu);
 
   /**
@@ -523,6 +534,23 @@
    * if an established block ack agreement exists with the receiver.
    */
   void VerifyBlockAck (void);
+  /**
+   * Get Traffic ID of the current packet.
+   */
+  uint8_t GetCurrentTid () const;
+  /*
+   * Return the remaining duration in the current TXOP.
+   *
+   * \return the remaining duration in the current TXOP
+   */
+  Time GetTxopRemaining (void);
+  /*
+   * Check if the station has TXOP granted for the next MPDU.
+   *
+   * \return true if the station has TXOP granted for the next MPDU,
+   *         false otherwise
+   */
+  bool HasTxop (void);
 
   AcIndex m_ac;
   class Dcf;
@@ -562,6 +590,10 @@
   Time m_currentPacketTimestamp;
   uint16_t m_blockAckInactivityTimeout;
   struct Bar m_currentBar;
+  Time m_startTxop;
+  bool m_isAccessRequestedForRts;
+  TracedValue<uint32_t> m_backoffTrace;
+  TracedValue<uint32_t> m_cwTrace;
 };
 
 } //namespace ns3
diff -Naur ns-3.25/src/wifi/model/interference-helper.cc ns-3.26/src/wifi/model/interference-helper.cc
--- ns-3.25/src/wifi/model/interference-helper.cc	2016-10-03 20:57:08.498245683 -0700
+++ ns-3.26/src/wifi/model/interference-helper.cc	2016-10-03 19:49:01.791386580 -0700
@@ -162,6 +162,14 @@
   return event;
 }
 
+void
+InterferenceHelper::AddForeignSignal (Time duration, double rxPowerW)
+{
+  // Parameters other than duration and rxPowerW are unused for this type
+  // of signal, so we provide dummy versions
+  WifiTxVector fakeTxVector;
+  Add (0, fakeTxVector, WIFI_PREAMBLE_NONE, duration, rxPowerW);
+}
 
 void
 InterferenceHelper::SetNoiseFigure (double value)
diff -Naur ns-3.25/src/wifi/model/interference-helper.h ns-3.26/src/wifi/model/interference-helper.h
--- ns-3.25/src/wifi/model/interference-helper.h	2016-10-03 20:57:08.499245676 -0700
+++ ns-3.26/src/wifi/model/interference-helper.h	2016-10-03 19:49:01.792386572 -0700
@@ -30,11 +30,10 @@
 #include "ns3/nstime.h"
 #include "ns3/simple-ref-count.h"
 #include "ns3/wifi-tx-vector.h"
+#include "error-rate-model.h"
 
 namespace ns3 {
 
-class ErrorRateModel;
-
 /**
  * \ingroup wifi
  * \brief handles interference calculations
@@ -184,6 +183,12 @@
                                       Time duration, double rxPower);
 
   /**
+   * Add a non-Wifi signal to interference helper.
+   * \param duration the duration of the signal
+   * \param rxPower receive power (W)
+   */
+  void AddForeignSignal (Time duration, double rxPower);
+  /**
    * Calculate the SNIR at the start of the plcp payload and accumulate
    * all SNIR changes in the snir vector.
    *
diff -Naur ns-3.25/src/wifi/model/mac-low.cc ns-3.26/src/wifi/model/mac-low.cc
--- ns-3.25/src/wifi/model/mac-low.cc	2016-10-03 20:57:08.502245652 -0700
+++ ns-3.26/src/wifi/model/mac-low.cc	2016-10-03 19:49:01.795386550 -0700
@@ -26,6 +26,7 @@
 #include "ns3/tag.h"
 #include "ns3/log.h"
 #include "ns3/node.h"
+#include "ns3/socket.h"
 #include "ns3/double.h"
 #include "mac-low.h"
 #include "wifi-phy.h"
@@ -368,7 +369,6 @@
     m_listener (0),
     m_phyMacLowListener (0),
     m_ctsToSelfSupported (false),
-    m_receivedAtLeastOneMpdu (false),
     m_nTxMpdus (0)
 {
   NS_LOG_FUNCTION (this);
@@ -534,7 +534,7 @@
 MacLow::ResetPhy (void)
 {
   m_phy->SetReceiveOkCallback (MakeNullCallback<void, Ptr<Packet>, double, WifiTxVector, enum WifiPreamble> ());
-  m_phy->SetReceiveErrorCallback (MakeNullCallback<void, Ptr<Packet>, double, bool> ());
+  m_phy->SetReceiveErrorCallback (MakeNullCallback<void, Ptr<Packet>, double> ());
   RemovePhyMacLowListener (m_phy);
   m_phy = 0;
 }
@@ -742,6 +742,9 @@
    * one of the Edca of the QAP.
    */
   m_currentPacket = packet->Copy ();
+  // remove the priority tag attached, if any
+  SocketPriorityTag priorityTag;
+  m_currentPacket->RemovePacketTag (priorityTag);
   m_currentHdr = *hdr;
   CancelAllEvents ();
   m_listener = listener;
@@ -779,7 +782,7 @@
         {
           AmpduTag ampdu;
           m_currentPacket->PeekPacketTag (ampdu);
-          if (ampdu.GetNoOfMpdus () > 1)
+          if (ampdu.GetRemainingNbOfMpdus () > 0)
             {
               m_txParams.EnableCompressedBlockAck ();
             }
@@ -839,39 +842,10 @@
 }
 
 void
-MacLow::ReceiveError (Ptr<Packet> packet, double rxSnr, bool isEndOfFrame)
+MacLow::ReceiveError (Ptr<Packet> packet, double rxSnr)
 {
-  NS_LOG_FUNCTION (this << packet << rxSnr << isEndOfFrame);
+  NS_LOG_FUNCTION (this << packet << rxSnr);
   NS_LOG_DEBUG ("rx failed ");
-  if (isEndOfFrame == true && m_receivedAtLeastOneMpdu == true)
-    {
-      WifiMacHeader hdr;
-      AmpduTag ampdu;
-      if (packet->RemovePacketTag (ampdu))
-        {
-          MpduAggregator::DeaggregatedMpdus mpdu = MpduAggregator::Deaggregate (packet);
-          mpdu.begin ()->first->PeekHeader (hdr);
-        }
-      else
-        {
-          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;
-    }
   if (m_txParams.MustWaitFastAck ())
     {
       NS_ASSERT (m_fastAckFailedTimeoutEvent.IsExpired ());
@@ -1005,10 +979,7 @@
       m_stationManager->ReportDataOk (m_currentHdr.GetAddr1 (), &m_currentHdr,
                                       rxSnr, txVector.GetMode (), tag.Get ());
 
-      FlushAggregateQueue ();
-      m_ampdu = false;
       bool gotAck = false;
-
       if (m_txParams.MustWaitNormalAck ()
           && m_normalAckTimeoutEvent.IsRunning ())
         {
@@ -1030,8 +1001,16 @@
       if (m_txParams.HasNextPacket ())
         {
           m_waitSifsEvent = Simulator::Schedule (GetSifs (),
+                                                 &MacLow::WaitSifsAfterEndTxFragment, this);
+        }
+      else if (m_currentHdr.IsQosData () && !m_ampdu)
+        {
+          m_waitSifsEvent = Simulator::Schedule (GetSifs (),
                                                  &MacLow::WaitSifsAfterEndTx, this);
         }
+
+      FlushAggregateQueue ();
+      m_ampdu = false;
     }
   else if (hdr.IsBlockAck () && hdr.GetAddr1 () == m_self
            && (m_txParams.MustWaitBasicBlockAck () || m_txParams.MustWaitCompressedBlockAck ())
@@ -1064,7 +1043,8 @@
               NS_ASSERT (i != m_bAckCaches.end ());
               (*i).second.UpdateWithBlockAckReq (blockAckReq.GetStartingSequence ());
 
-              NS_ASSERT (m_sendAckEvent.IsExpired ());
+              //NS_ASSERT (m_sendAckEvent.IsExpired ());
+              m_sendAckEvent.Cancel ();
               /* See section 11.5.3 in IEEE 802.11 for mean of this timer */
               ResetBlockAckInactivityTimerIfNeeded (it->second.first);
               if ((*it).second.first.IsImmediateBlockAck ())
@@ -1082,7 +1062,6 @@
                 {
                   NS_FATAL_ERROR ("Delayed block ack not supported.");
                 }
-              m_receivedAtLeastOneMpdu = false;
             }
           else
             {
@@ -1097,7 +1076,6 @@
   else if (hdr.IsCtl ())
     {
       NS_LOG_DEBUG ("rx drop " << hdr.GetTypeString ());
-      m_receivedAtLeastOneMpdu = false;
     }
   else if (hdr.GetAddr1 () == m_self)
     {
@@ -1125,7 +1103,6 @@
                                                     hdr.GetDuration (),
                                                     txVector.GetMode (),
                                                     rxSnr);
-              m_receivedAtLeastOneMpdu = false;
             }
           else if (hdr.IsQosBlockAck ())
             {
@@ -1162,6 +1139,13 @@
         }
       else if (hdr.IsData () || hdr.IsMgt ())
         {
+          if (hdr.IsProbeResp ())
+            {
+              // Apply SNR tag for probe response quality measurements
+              SnrTag tag;
+              tag.Set (rxSnr);
+              packet->AddPacketTag (tag);
+            }
           if (hdr.IsMgt () && ampduSubframe)
             {
               NS_FATAL_ERROR ("Received management packet as part of an A-MPDU");
@@ -1176,7 +1160,6 @@
                                                     hdr.GetDuration (),
                                                     txVector.GetMode (),
                                                     rxSnr);
-              m_receivedAtLeastOneMpdu = false;
             }
         }
       goto rxPacket;
@@ -1192,7 +1175,13 @@
           if (hdr.IsData () || hdr.IsMgt ())
             {
               NS_LOG_DEBUG ("rx group from=" << hdr.GetAddr2 ());
-              m_receivedAtLeastOneMpdu = false;
+              if (hdr.IsBeacon ())
+                {
+                  // Apply SNR tag for beacon quality measurements
+                  SnrTag tag;
+                  tag.Set (rxSnr);
+                  packet->AddPacketTag (tag);
+                }
               goto rxPacket;
             }
           else
@@ -1392,7 +1381,6 @@
 MacLow::GetDataTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const
 {
   Mac48Address to = hdr->GetAddr1 ();
-  WifiMacTrailer fcs;
   return m_stationManager->GetDataTxVector (to, hdr, packet);
 }
 
@@ -1677,6 +1665,7 @@
       AmpduTag ampdutag;
       ampdutag.SetAmpdu (true);
       Time delay = Seconds (0);
+      Time remainingAmpduDuration = m_phy->CalculateTxDuration (packet->GetSize (), txVector, preamble, m_phy->GetFrequency ());
       if (queueSize > 1 || vhtSingleMpdu)
         {
           txVector.SetAggregation (true);
@@ -1695,10 +1684,7 @@
             }
 
           listenerIt->second->GetMpduAggregator ()->AddHeaderAndPad (newPacket, last, vhtSingleMpdu);
-
-          ampdutag.SetNoOfMpdus (queueSize);
-          newPacket->AddPacketTag (ampdutag);
-
+          
           if (delay == Seconds (0))
             {
               if (!vhtSingleMpdu)
@@ -1710,6 +1696,24 @@
                 {
                   mpdutype = NORMAL_MPDU;
                 }
+            }
+          
+          Time mpduDuration = m_phy->CalculateTxDuration (newPacket->GetSize (), txVector, preamble, m_phy->GetFrequency (), mpdutype, 0);
+          remainingAmpduDuration -= mpduDuration;
+
+          ampdutag.SetRemainingNbOfMpdus (queueSize - 1);
+          if (queueSize > 1)
+            {
+              ampdutag.SetRemainingAmpduDuration (remainingAmpduDuration);
+            }
+          else
+            {
+              ampdutag.SetRemainingAmpduDuration (NanoSeconds (0));
+            }
+          newPacket->AddPacketTag (ampdutag);
+
+          if (delay == Seconds (0))
+            {
               m_phy->SendPacket (newPacket, txVector, preamble, mpdutype);
             }
           else
@@ -1718,8 +1722,10 @@
             }
           if (queueSize > 1)
             {
-              delay = delay + m_phy->CalculateTxDuration (GetSize (newPacket, &newHdr), txVector, preamble, m_phy->GetFrequency (), mpdutype, 0);
+              NS_ASSERT (remainingAmpduDuration > 0);
+              delay = delay + mpduDuration;
             }
+
           preamble = WIFI_PREAMBLE_NONE;
         }
     }
@@ -1975,13 +1981,13 @@
         {
           Time delay = txDuration + GetRifs ();
           NS_ASSERT (m_waitRifsEvent.IsExpired ());
-          m_waitRifsEvent = Simulator::Schedule (delay, &MacLow::WaitSifsAfterEndTx, this);
+          m_waitRifsEvent = Simulator::Schedule (delay, &MacLow::WaitSifsAfterEndTxFragment, this);
         }
       else
         {
           Time delay = txDuration + GetSifs ();
           NS_ASSERT (m_waitSifsEvent.IsExpired ());
-          m_waitSifsEvent = Simulator::Schedule (delay, &MacLow::WaitSifsAfterEndTx, this);
+          m_waitSifsEvent = Simulator::Schedule (delay, &MacLow::WaitSifsAfterEndTxFragment, this);
         }
     }
   else
@@ -2322,6 +2328,12 @@
 }
 
 void
+MacLow::WaitSifsAfterEndTxFragment (void)
+{
+  m_listener->StartNextFragment ();
+}
+
+void
 MacLow::WaitSifsAfterEndTx (void)
 {
   m_listener->StartNext ();
@@ -2668,7 +2680,7 @@
       StartDataTxTimers (blockAckReqTxVector);
     }
 
-  NS_ASSERT (duration >= MicroSeconds (0));
+  NS_ASSERT (duration >= NanoSeconds (0));
   hdr.SetDuration (duration);
   //here should be present a control about immediate or delayed block ack
   //for now we assume immediate
@@ -2813,7 +2825,6 @@
   if (aggregatedPacket->RemovePacketTag (ampdu))
     {
       ampduSubframe = true;
-      m_currentTxVector = txVector;
       MpduAggregator::DeaggregatedMpdus packets = MpduAggregator::Deaggregate (aggregatedPacket);
       MpduAggregator::DeaggregatedMpdusCI n = packets.begin ();
 
@@ -2822,20 +2833,26 @@
       NS_LOG_DEBUG ("duration/id=" << firsthdr.GetDuration ());
       NotifyNav ((*n).first, firsthdr, preamble);
 
-      bool vhtSingleMpdu = (*n).second.GetEof ();
-      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");
-          ampduSubframe = false;
-        }
-
       if (firsthdr.GetAddr1 () == m_self)
         {
-          if (!vhtSingleMpdu)
+          bool vhtSingleMpdu = (*n).second.GetEof ();
+          if (vhtSingleMpdu)
             {
-              m_receivedAtLeastOneMpdu = true;
+              //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");
+              ampduSubframe = false;
+            }
+          else if (preamble != WIFI_PREAMBLE_NONE || !m_sendAckEvent.IsRunning ())
+            {
+              m_sendAckEvent = Simulator::Schedule (ampdu.GetRemainingAmpduDuration () + GetSifs (),
+                                                    &MacLow::SendBlockAckAfterAmpdu, this,
+                                                    firsthdr.GetQosTid (),
+                                                    firsthdr.GetAddr2 (),
+                                                    firsthdr.GetDuration (),
+                                                    txVector,
+                                                    rxSnr);
             }
+
           if (firsthdr.IsAck () || firsthdr.IsBlockAck () || firsthdr.IsBlockAckReq ())
             {
               ReceiveOk ((*n).first, rxSnr, txVector, preamble, ampduSubframe);
@@ -2854,39 +2871,31 @@
             {
               NS_FATAL_ERROR ("Received A-MPDU with invalid first MPDU type");
             }
-        }
 
-      if (ampdu.GetNoOfMpdus () == 1 && !vhtSingleMpdu)
-        {
-          if (normalAck)
+          if (ampdu.GetRemainingNbOfMpdus () == 0 && !vhtSingleMpdu)
             {
-              //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
+              if (normalAck)
                 {
-                  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 ())
+                    {
+                      /* 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 ());
+                      NS_ASSERT (m_sendAckEvent.IsRunning ());
+                    }
+                  else
+                    {
+                      NS_LOG_DEBUG ("There's not a valid agreement for this block ack request.");
+                    }
                 }
             }
-          m_receivedAtLeastOneMpdu = false;
         }
     }
   else
@@ -2905,6 +2914,7 @@
     }
 
   WifiPreamble preamble;
+  Time aPPDUMaxTime = MilliSeconds (10);
 
   uint8_t tid = GetTid (peekedPacket, peekedHdr);
   AcIndex ac = QosUtilsMapTidToAc (tid);
@@ -2913,6 +2923,7 @@
   if (m_currentTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_VHT)
     {
       preamble = WIFI_PREAMBLE_VHT;
+      aPPDUMaxTime = MicroSeconds (5484);
     }
   else if (m_phy->GetGreenfield () && m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
     {
@@ -2931,8 +2942,8 @@
       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, m_currentTxVector, preamble, m_phy->GetFrequency ()) > MilliSeconds (10))
+  //A STA shall not transmit a PPDU that has a duration that is greater than aPPDUMaxTime
+  if (m_phy->CalculateTxDuration (aggregatedPacket->GetSize () + peekedPacket->GetSize () + peekedHdr.GetSize () + WIFI_MAC_FCS_LENGTH, m_currentTxVector, preamble, m_phy->GetFrequency ()) > aPPDUMaxTime)
     {
       NS_LOG_DEBUG ("no more packets can be aggregated to satisfy PPDU <= aPPDUMaxTime");
       return true;
@@ -2957,6 +2968,17 @@
   newPacket = packet->Copy ();
   Ptr<Packet> currentAggregatedPacket;
   CtrlBAckRequestHeader blockAckReq;
+  
+  if (hdr.IsBlockAckReq ())
+    {
+      //Workaround to avoid BlockAckReq to be part of an A-MPDU. The standard says that
+      //BlockAckReq is not present in A-MPDU if any QoS data frames for that TID are present.
+      //Since an A-MPDU in non-PSMP frame exchanges aggregates MPDUs from one TID, this means
+      //we should stop aggregation here for single-TID A-MPDUs. Once PSMP and multi-TID A-MPDUs
+      //are supported, the condition of entering here should be changed.
+      return newPacket;
+    }
+  
   //missing hdr.IsAck() since we have no means of knowing the Tid of the Ack yet
   if (hdr.IsQosData () || hdr.IsBlockAck ()|| hdr.IsBlockAckReq ())
     {
@@ -3015,6 +3037,7 @@
                   packet->PeekHeader (blockAckReq);
                   startingSequenceNumber = blockAckReq.GetStartingSequence ();
                 }
+              /// \todo We should also handle Ack and BlockAck
               aggregated = false;
               bool retry = false;
               //looks for other packets to the same destination with the same Tid need to extend that to include MSDUs
@@ -3173,16 +3196,19 @@
                       listenerIt->second->GetMpduAggregator ()->Aggregate (newPacket, currentAggregatedPacket);
                       currentAggregatedPacket->AddHeader (blockAckReq);
                     }
+
                   if (qosPolicy == 0)
                     {
                       listenerIt->second->CompleteTransfer (hdr.GetAddr1 (), tid);
                     }
+
                   //Add packet tag
                   AmpduTag ampdutag;
                   ampdutag.SetAmpdu (true);
-                  ampdutag.SetNoOfMpdus (i);
+                  ampdutag.SetRemainingNbOfMpdus (i - 1);
                   newPacket = currentAggregatedPacket;
                   newPacket->AddPacketTag (ampdutag);
+
                   NS_LOG_DEBUG ("tx unicast A-MPDU");
                   listenerIt->second->SetAmpdu (hdr.GetAddr1 (), true);
                 }
@@ -3217,8 +3243,6 @@
               //Add packet tag
               AmpduTag ampdutag;
               ampdutag.SetAmpdu (true);
-              ampdutag.SetNoOfMpdus (1);
-
               newPacket = currentAggregatedPacket;
               newPacket->AddHeader (peekedHdr);
               WifiMacTrailer fcs;
diff -Naur ns-3.25/src/wifi/model/mac-low.h ns-3.26/src/wifi/model/mac-low.h
--- ns-3.25/src/wifi/model/mac-low.h	2016-10-03 20:57:08.503245645 -0700
+++ ns-3.26/src/wifi/model/mac-low.h	2016-10-03 19:49:01.796386542 -0700
@@ -126,7 +126,13 @@
    * Invoked when ns3::MacLow wants to start a new transmission
    * as configured by MacLowTransmissionParameters::EnableNextData.
    * The listener is expected to call again MacLow::StartTransmission
-   * with the "next" data to send.
+   * with the "next" fragment to send.
+   */
+  virtual void StartNextFragment (void) = 0;
+  /**
+   * Invoked when ns3::MacLow wants to continue the TXOP.
+   * The listener is expected to call again MacLow::StartTransmission
+   * with the "next" packet to send.
    */
   virtual void StartNext (void) = 0;
   /**
@@ -359,7 +365,7 @@
    *
    * Add the transmission duration of the next data to the
    * durationId of the outgoing packet and call
-   * MacLowTransmissionListener::StartNext at the end of
+   * MacLowTransmissionListener::StartNextFragment at the end of
    * the current transmission + SIFS.
    */
   void EnableNextData (uint32_t size);
@@ -703,6 +709,10 @@
                                   const WifiMacHeader* hdr,
                                   const MacLowTransmissionParameters& parameters) const;
 
+  Time CalculateOverallTxTime (Ptr<const Packet> packet,
+                               const WifiMacHeader* hdr,
+                               const MacLowTransmissionParameters &params) const;
+
   /**
    * \param packet packet to send
    * \param hdr 802.11 header for packet to send
@@ -736,7 +746,7 @@
    * This method is typically invoked by the lower PHY layer to notify
    * the MAC layer that a packet was unsuccessfully received.
    */
-  void ReceiveError (Ptr<Packet> packet, double rxSnr, bool isEndOfFrame);
+  void ReceiveError (Ptr<Packet> packet, double rxSnr);
   /**
    * \param duration switching delay duration.
    *
@@ -823,7 +833,6 @@
    */
   void FlushAggregateQueue (void);
 
-protected:
   /**
    * Return a TXVECTOR for the DATA frame given the destination.
    * The function consults WifiRemoteStationManager, which controls the rate
@@ -834,6 +843,7 @@
    * \return TXVECTOR for the given packet
    */
   virtual WifiTxVector GetDataTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
+
 private:
   /**
    * Cancel all scheduled events. Called before beginning a transmission
@@ -1026,9 +1036,6 @@
    */
   bool NeedCtsToSelf (void);
 
-  Time CalculateOverallTxTime (Ptr<const Packet> packet,
-                               const WifiMacHeader* hdr,
-                               const MacLowTransmissionParameters &params) const;
   void NotifyNav (Ptr<const Packet> packet,const WifiMacHeader &hdr, WifiPreamble preamble);
   /**
    * Reset NAV with the given duration.
@@ -1137,11 +1144,14 @@
    * \param duration
    */
   void SendDataAfterCts (Mac48Address source, Time duration);
+
   /**
    * Event handler that is usually scheduled to fired at the appropriate time
    * after completing transmissions.
    */
+  void WaitSifsAfterEndTxFragment (void);
   void WaitSifsAfterEndTx (void);
+
   /**
    * A transmission that does not require an ACK has completed.
    */
@@ -1378,7 +1388,6 @@
   uint8_t m_sentMpdus;                //!< Number of transmitted MPDUs in an A-MPDU that have not been acknowledged yet
   Ptr<WifiMacQueue> m_aggregateQueue; //!< Queue used for MPDU aggregation
   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_nTxMpdus;                //!<Holds the number of transmitted MPDUs in the last A-MPDU transmission
 };
diff -Naur ns-3.25/src/wifi/model/mgt-headers.cc ns-3.26/src/wifi/model/mgt-headers.cc
--- ns-3.25/src/wifi/model/mgt-headers.cc	2016-10-03 20:57:08.505245629 -0700
+++ ns-3.26/src/wifi/model/mgt-headers.cc	2016-10-03 19:49:01.798386528 -0700
@@ -252,6 +252,18 @@
 }
 
 void
+MgtProbeResponseHeader::SetDsssParameterSet (DsssParameterSet dsssParameterSet)
+{
+  m_dsssParameterSet = dsssParameterSet;
+}
+
+DsssParameterSet
+MgtProbeResponseHeader::GetDsssParameterSet (void) const
+{
+  return m_dsssParameterSet;
+}
+
+void
 MgtProbeResponseHeader::SetErpInformation (ErpInformation erpInformation)
 {
   m_erpInformation = erpInformation;
@@ -263,6 +275,18 @@
   return m_erpInformation;
 }
 
+void
+MgtProbeResponseHeader::SetEdcaParameterSet (EdcaParameterSet edcaparameters)
+{
+  m_edcaParameterSet = edcaparameters;
+}
+
+EdcaParameterSet
+MgtProbeResponseHeader::GetEdcaParameterSet (void) const
+{
+  return m_edcaParameterSet;
+}
+
 TypeId
 MgtProbeResponseHeader::GetTypeId (void)
 {
@@ -289,9 +313,10 @@
   size += m_capability.GetSerializedSize ();
   size += m_ssid.GetSerializedSize ();
   size += m_rates.GetSerializedSize ();
-  //size += 3; //ds parameter set
+  size += m_dsssParameterSet.GetSerializedSize ();
   size += m_erpInformation.GetSerializedSize ();
   size += m_rates.extended.GetSerializedSize ();
+  size += m_edcaParameterSet.GetSerializedSize ();
   size += m_htCapability.GetSerializedSize ();
   size += m_htOperations.GetSerializedSize ();
   size += m_vhtCapability.GetSerializedSize ();
@@ -303,6 +328,7 @@
 {
   os << "ssid=" << m_ssid << ", "
      << "rates=" << m_rates << ", "
+     << "DSSS Parameter Set=" << m_dsssParameterSet << " , "
      << "ERP information=" << m_erpInformation << ", "
      << "HT Capabilities=" << m_htCapability << " , "
      << "HT Operations=" << m_htOperations << " , "
@@ -327,9 +353,10 @@
   i = m_capability.Serialize (i);
   i = m_ssid.Serialize (i);
   i = m_rates.Serialize (i);
-  //i.WriteU8 (0, 3); //ds parameter set.
+  i = m_dsssParameterSet.Serialize (i);
   i = m_erpInformation.Serialize (i);
   i = m_rates.extended.Serialize (i);
+  i = m_edcaParameterSet.Serialize (i);
   i = m_htCapability.Serialize (i);
   i = m_htOperations.Serialize (i);
   i = m_vhtCapability.Serialize (i);
@@ -345,9 +372,10 @@
   i = m_capability.Deserialize (i);
   i = m_ssid.Deserialize (i);
   i = m_rates.Deserialize (i);
-  //i.Next (3); //ds parameter set
+  i = m_dsssParameterSet.DeserializeIfPresent (i);
   i = m_erpInformation.DeserializeIfPresent (i);
   i = m_rates.extended.DeserializeIfPresent (i);
+  i = m_edcaParameterSet.DeserializeIfPresent (i);
   i = m_htCapability.DeserializeIfPresent (i);
   i = m_htOperations.DeserializeIfPresent (i);
   i = m_vhtCapability.DeserializeIfPresent (i);
@@ -628,6 +656,17 @@
   return m_erpInformation;
 }
 
+void
+MgtAssocResponseHeader::SetEdcaParameterSet (EdcaParameterSet edcaparameters)
+{
+  m_edcaParameterSet = edcaparameters;
+}
+
+EdcaParameterSet
+MgtAssocResponseHeader::GetEdcaParameterSet (void) const
+{
+  return m_edcaParameterSet;
+}
 
 TypeId
 MgtAssocResponseHeader::GetTypeId (void)
@@ -656,6 +695,7 @@
   size += m_rates.GetSerializedSize ();
   size += m_erpInformation.GetSerializedSize ();
   size += m_rates.extended.GetSerializedSize ();
+  size += m_edcaParameterSet.GetSerializedSize ();
   size += m_htCapability.GetSerializedSize ();
   size += m_htOperations.GetSerializedSize ();
   size += m_vhtCapability.GetSerializedSize ();
@@ -683,6 +723,7 @@
   i = m_rates.Serialize (i);
   i = m_erpInformation.Serialize (i);
   i = m_rates.extended.Serialize (i);
+  i = m_edcaParameterSet.Serialize (i);
   i = m_htCapability.Serialize (i);
   i = m_htOperations.Serialize (i);
   i = m_vhtCapability.Serialize (i);
@@ -698,6 +739,7 @@
   i = m_rates.Deserialize (i);
   i = m_erpInformation.DeserializeIfPresent (i);
   i = m_rates.extended.DeserializeIfPresent (i);
+  i = m_edcaParameterSet.DeserializeIfPresent (i);
   i = m_htCapability.DeserializeIfPresent (i);
   i = m_htOperations.DeserializeIfPresent (i);
   i = m_vhtCapability.DeserializeIfPresent (i);
diff -Naur ns-3.25/src/wifi/model/mgt-headers.h ns-3.26/src/wifi/model/mgt-headers.h
--- ns-3.25/src/wifi/model/mgt-headers.h	2016-10-03 20:57:08.506245621 -0700
+++ ns-3.26/src/wifi/model/mgt-headers.h	2016-10-03 19:49:01.799386520 -0700
@@ -30,10 +30,12 @@
 #include "capability-information.h"
 #include "supported-rates.h"
 #include "ssid.h"
+#include "dsss-parameter-set.h"
 #include "ht-capabilities.h"
 #include "ht-operations.h"
 #include "vht-capabilities.h"
 #include "erp-information.h"
+#include "edca-parameter-set.h"
 
 namespace ns3 {
 
@@ -195,6 +197,12 @@
    */
   ErpInformation GetErpInformation (void) const;
   /**
+   * Return the EDCA Parameter Set.
+   *
+   * \return the EDCA Parameter Set
+   */
+  EdcaParameterSet GetEdcaParameterSet (void) const;
+  /**
    * Set the VHT capabilities.
    *
    * \param vhtcapabilities VHT capabilities
@@ -236,6 +244,12 @@
    * \param erpInformation the ERP information
    */
   void SetErpInformation (ErpInformation erpInformation);
+  /**
+   * Set the EDCA Parameter Set.
+   *
+   * \param edcaParameterSet the EDCA Parameter Set
+   */
+  void SetEdcaParameterSet (EdcaParameterSet edcaParameterSet);
 
   /**
    * Register this type.
@@ -257,7 +271,8 @@
   HtCapabilities m_htCapability; //!< HT capabilities
   HtOperations m_htOperations; //!< HT operations
   VhtCapabilities m_vhtCapability; //!< VHT capabilities
-  ErpInformation m_erpInformation;    //!< ERP information
+  ErpInformation m_erpInformation; //!< ERP information
+  EdcaParameterSet m_edcaParameterSet; //!< EDCA Parameter Set
 };
 
 
@@ -374,6 +389,12 @@
    */
   CapabilityInformation GetCapabilities (void) const;
   /**
+   * Return the DSSS Parameter Set.
+   *
+   * \return the DSSS Parameter Set
+   */
+  DsssParameterSet GetDsssParameterSet (void) const;
+  /**
    * Return the HT capabilities.
    *
    * \return HT capabilities
@@ -398,6 +419,12 @@
    */
   ErpInformation GetErpInformation (void) const;
   /**
+   * Return the EDCA Parameter Set.
+   *
+   * \return the EDCA Parameter Set
+   */
+  EdcaParameterSet GetEdcaParameterSet (void) const;
+  /**
    * Set the Capability information.
    *
    * \param capabilities Capability information
@@ -440,12 +467,24 @@
    */
   void SetSupportedRates (SupportedRates rates);
   /**
+   * Set the DSSS Parameter Set.
+   *
+   * \param dsssParameterSet the DSSS Parameter Set
+   */
+  void SetDsssParameterSet (DsssParameterSet dsssParameterSet);
+  /**
    * Set the ERP information.
    *
    * \param erpInformation the ERP information
    */
   void SetErpInformation (ErpInformation erpInformation);
   /**
+   * Set the EDCA Parameter Set.
+   *
+   * \param edcaParameterSet the EDCA Parameter Set
+   */
+  void SetEdcaParameterSet (EdcaParameterSet edcaParameterSet);
+  /**
    * Return the time stamp.
    *
    * \return time stamp
@@ -465,15 +504,17 @@
 
 
 private:
-  uint64_t m_timestamp;               //!< Timestamp
-  Ssid m_ssid;                        //!< Service set ID (SSID)
-  uint64_t m_beaconInterval;          //!< Beacon interval
-  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
+  uint64_t m_timestamp;                //!< Timestamp
+  Ssid m_ssid;                         //!< Service set ID (SSID)
+  uint64_t m_beaconInterval;           //!< Beacon interval
+  SupportedRates m_rates;              //!< List of supported rates
+  CapabilityInformation m_capability;  //!< Capability information
+  DsssParameterSet m_dsssParameterSet; //!< DSSS Parameter Set
+  HtCapabilities m_htCapability;       //!< HT capabilities
+  HtOperations m_htOperations;         //!< HT operations
+  VhtCapabilities m_vhtCapability;     //!< VHT capabilities
+  ErpInformation m_erpInformation;     //!< ERP information
+  EdcaParameterSet m_edcaParameterSet; //!< EDCA Parameter Set
 };
 
 
diff -Naur ns-3.25/src/wifi/model/minstrel-ht-wifi-manager.cc ns-3.26/src/wifi/model/minstrel-ht-wifi-manager.cc
--- ns-3.25/src/wifi/model/minstrel-ht-wifi-manager.cc	2016-10-03 20:57:08.507245613 -0700
+++ ns-3.26/src/wifi/model/minstrel-ht-wifi-manager.cc	2016-10-03 19:49:01.800386513 -0700
@@ -934,7 +934,7 @@
         }
 
       return WifiTxVector (GetMcsSupported (station, mcsIndex), GetDefaultTxPowerLevel (), GetLongRetryCount (station),
-                           group.sgi, group.streams, GetNess (station), group.chWidth, !station->m_isSampling, GetStbc (station));
+                           group.sgi, group.streams, GetNess (station), group.chWidth, GetAggregation (station) && !station->m_isSampling, GetStbc (station));
     }
 }
 
@@ -1195,7 +1195,7 @@
               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))
+              if (sampleDuration < maxTp2Duration || (sampleStreams < maxTpStreams && sampleDuration < maxProbDuration))
                 {
                   /// Set flag that we are currently sampling.
                   station->m_isSampling = true;
@@ -1430,7 +1430,8 @@
         {
           station->m_maxProbRate = index;
         }
-      if (rate.ewmaProb > group->m_ratesTable[group->m_maxProbRate].ewmaProb)
+      maxGPRateId = GetRateId (group->m_maxProbRate);
+      if (rate.ewmaProb > group->m_ratesTable[maxGPRateId].ewmaProb)
         {
           group->m_maxProbRate = index;
         }
diff -Naur ns-3.25/src/wifi/model/minstrel-wifi-manager.cc ns-3.26/src/wifi/model/minstrel-wifi-manager.cc
--- ns-3.25/src/wifi/model/minstrel-wifi-manager.cc	2016-10-03 20:57:08.509245598 -0700
+++ ns-3.26/src/wifi/model/minstrel-wifi-manager.cc	2016-10-03 19:49:01.802386498 -0700
@@ -1071,4 +1071,25 @@
   station->m_statsFile.flush ();
 }
 
+
+void
+MinstrelWifiManager::SetHtSupported (bool enable)
+{
+  //HT is not supported by this algorithm.
+  if (enable)
+    {
+      NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support HT rates");
+    }
+}
+
+void
+MinstrelWifiManager::SetVhtSupported (bool enable)
+{
+  //VHT is not supported by this algorithm.
+  if (enable)
+    {
+      NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support VHT rates");
+    }
+}
+
 } //namespace ns3
diff -Naur ns-3.25/src/wifi/model/minstrel-wifi-manager.h ns-3.26/src/wifi/model/minstrel-wifi-manager.h
--- ns-3.25/src/wifi/model/minstrel-wifi-manager.h	2016-10-03 20:57:08.510245590 -0700
+++ ns-3.26/src/wifi/model/minstrel-wifi-manager.h	2016-10-03 19:49:01.803386490 -0700
@@ -124,6 +124,8 @@
  *
  * Minstrel is appropriate for non-HT/VHT configurations; for HT/VHT
  * (i.e. 802.11n/ac), users should use MinstrelHtWifiManager instead.
+ * Minstrel will error exit if the user tries to configure it with a
+ * Wi-Fi MAC that has VhtSupported or HtSupported set.
  *
  * Some notes on this implementation follow.  The implementation has
  * been adapted to bring it closer to the Linux implementation.
@@ -161,6 +163,8 @@
   // Inherited from WifiRemoteStationManager
   virtual void SetupPhy (Ptr<WifiPhy> phy);
   virtual void SetupMac (Ptr<WifiMac> mac);
+  virtual void SetHtSupported (bool enable);
+  virtual void SetVhtSupported (bool enable);
 
   /**
    * Assign a fixed random variable stream number to the random variables
diff -Naur ns-3.25/src/wifi/model/onoe-wifi-manager.cc ns-3.26/src/wifi/model/onoe-wifi-manager.cc
--- ns-3.25/src/wifi/model/onoe-wifi-manager.cc	2016-10-03 20:57:08.514245559 -0700
+++ ns-3.26/src/wifi/model/onoe-wifi-manager.cc	2016-10-03 19:49:01.807386461 -0700
@@ -315,4 +315,24 @@
   return false;
 }
 
+void
+OnoeWifiManager::SetHtSupported (bool enable)
+{
+  //HT is not supported by this algorithm.
+  if (enable)
+    {
+      NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support HT rates");
+    }
+}
+
+void
+OnoeWifiManager::SetVhtSupported (bool enable)
+{
+  //VHT is not supported by this algorithm.
+  if (enable)
+    {
+      NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support VHT rates");
+    }
+}
+
 } //namespace ns3
diff -Naur ns-3.25/src/wifi/model/onoe-wifi-manager.h ns-3.26/src/wifi/model/onoe-wifi-manager.h
--- ns-3.25/src/wifi/model/onoe-wifi-manager.h	2016-10-03 20:57:08.514245559 -0700
+++ ns-3.26/src/wifi/model/onoe-wifi-manager.h	2016-10-03 19:49:01.807386461 -0700
@@ -38,6 +38,10 @@
  * rate control algorithm for the madwifi driver. I am not aware of
  * any publication or reference about this algorithm beyond the madwifi
  * source code.
+ *
+ * This RAA does not support HT or VHT modes and will error exit
+ * if the user tries to configure this RAA with a Wi-Fi MAC that
+ * has VhtSupported or HtSupported set.
  */
 class OnoeWifiManager : public WifiRemoteStationManager
 {
@@ -46,6 +50,9 @@
 
   OnoeWifiManager ();
 
+  // Inherited from WifiRemoteStationManager
+  virtual void SetHtSupported (bool enable);
+  virtual void SetVhtSupported (bool enable);
 
 private:
   //overriden from base class
diff -Naur ns-3.25/src/wifi/model/parf-wifi-manager.cc ns-3.26/src/wifi/model/parf-wifi-manager.cc
--- ns-3.25/src/wifi/model/parf-wifi-manager.cc	2016-10-03 20:57:08.516245544 -0700
+++ ns-3.26/src/wifi/model/parf-wifi-manager.cc	2016-10-03 19:49:01.809386446 -0700
@@ -336,4 +336,24 @@
   return true;
 }
 
+void
+ParfWifiManager::SetHtSupported (bool enable)
+{
+  //HT is not supported by this algorithm.
+  if (enable)
+    {
+      NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support HT rates");
+    }
+}
+
+void
+ParfWifiManager::SetVhtSupported (bool enable)
+{
+  //VHT is not supported by this algorithm.
+  if (enable)
+    {
+      NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support VHT rates");
+    }
+}
+
 } //namespace ns3
diff -Naur ns-3.25/src/wifi/model/parf-wifi-manager.h ns-3.26/src/wifi/model/parf-wifi-manager.h
--- ns-3.25/src/wifi/model/parf-wifi-manager.h	2016-10-03 20:57:08.516245544 -0700
+++ ns-3.26/src/wifi/model/parf-wifi-manager.h	2016-10-03 19:49:01.809386446 -0700
@@ -36,6 +36,9 @@
  * Wireless Networks, Kluwer Academic Publishers, 2007, 13, 737-755
  * http://www.cs.odu.edu/~nadeem/classes/cs795-WNS-S13/papers/enter-006.pdf
  *
+ * This RAA does not support HT or VHT modes and will error exit
+ * if the user tries to configure this RAA with a Wi-Fi MAC that
+ * has VhtSupported or HtSupported set.
  */
 class ParfWifiManager : public WifiRemoteStationManager
 {
@@ -48,7 +51,10 @@
   ParfWifiManager ();
   virtual ~ParfWifiManager ();
 
+  // Inherited from WifiRemoteStationManager
   virtual void SetupPhy (Ptr<WifiPhy> phy);
+  virtual void SetHtSupported (bool enable);
+  virtual void SetVhtSupported (bool enable);
 
 
 private:
diff -Naur ns-3.25/src/wifi/model/qos-tag.cc ns-3.26/src/wifi/model/qos-tag.cc
--- ns-3.25/src/wifi/model/qos-tag.cc	2016-10-03 20:57:08.517245536 -0700
+++ ns-3.26/src/wifi/model/qos-tag.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,101 +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
- *
- * Author: Mirko Banchi <mk.banchi@gmail.com>
- */
-
-#include "qos-tag.h"
-#include "ns3/tag.h"
-#include "ns3/uinteger.h"
-
-namespace ns3 {
-
-NS_OBJECT_ENSURE_REGISTERED (QosTag);
-
-TypeId
-QosTag::GetTypeId (void)
-{
-  static TypeId tid = TypeId ("ns3::QosTag")
-    .SetParent<Tag> ()
-    .SetGroupName ("Wifi")
-    .AddConstructor<QosTag> ()
-    .AddAttribute ("tid", "The tid that indicates AC which packet belongs",
-                   UintegerValue (0),
-                   MakeUintegerAccessor (&QosTag::GetTid),
-                   MakeUintegerChecker<uint8_t> ())
-  ;
-  return tid;
-}
-
-TypeId
-QosTag::GetInstanceTypeId (void) const
-{
-  return GetTypeId ();
-}
-
-QosTag::QosTag ()
-  : m_tid (0)
-{
-}
-QosTag::QosTag (uint8_t tid)
-  : m_tid (tid)
-{
-}
-
-void
-QosTag::SetTid (uint8_t tid)
-{
-  m_tid = tid;
-}
-
-void
-QosTag::SetUserPriority (UserPriority up)
-{
-  m_tid = up;
-}
-
-uint32_t
-QosTag::GetSerializedSize (void) const
-{
-  return 1;
-}
-
-void
-QosTag::Serialize (TagBuffer i) const
-{
-  i.WriteU8 (m_tid);
-}
-
-void
-QosTag::Deserialize (TagBuffer i)
-{
-  m_tid = (UserPriority) i.ReadU8 ();
-}
-
-uint8_t
-QosTag::GetTid () const
-{
-  return m_tid;
-}
-
-void
-QosTag::Print (std::ostream &os) const
-{
-  os << "Tid=" << m_tid;
-}
-
-} // namespace ns3
diff -Naur ns-3.25/src/wifi/model/qos-tag.h ns-3.26/src/wifi/model/qos-tag.h
--- ns-3.25/src/wifi/model/qos-tag.h	2016-10-03 20:57:08.517245536 -0700
+++ ns-3.26/src/wifi/model/qos-tag.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) 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
- *
- * Author: Mirko Banchi <mk.banchi@gmail.com>
- */
-
-#ifndef QOS_TAG_H
-#define QOS_TAG_H
-
-#include "ns3/packet.h"
-
-namespace ns3 {
-
-class Tag;
-
-
-/**
- * As per IEEE Std. 802.11-2012, Section 5.1.1.3, when EDCA is used the
- * the Traffic ID (TID) value corresponds to one of the User Priority (UP)
- * values defined by the IEEE Std. 802.1D-2004, Annex G, table G-2.
- *
- * Note that this correspondence does not hold for HCCA, since in that
- * case the mapping between UPs and TIDs should be determined by a
- * TSPEC element as per IEEE Std. 802.11-2012, Section 8.4.2.32
- */
-enum UserPriority
-{
-  UP_BK = 1, /**< background  */
-  UP_BE = 0, /**< best effort (default) */
-  UP_EE = 3, /**< excellent effort  */
-  UP_CL = 4, /**< controlled load */
-  UP_VI = 5, /**< video, < 100ms latency and jitter */
-  UP_VO = 6, /**< voice, < 10ms latency and jitter */
-  UP_NC = 7  /**< network control */
-};
-
-
-/**
- * \ingroup wifi
- *
- * The aim of the QosTag is to provide means for an Application to
- * specify the TID which will be used by a QoS-aware WifiMac for a
- * given traffic flow. Note that the current QosTag class was
- * designed to be completely mac/wifi specific without any attempt
- * at being generic.
- */
-class QosTag : public Tag
-{
-public:
-  static TypeId GetTypeId (void);
-  virtual TypeId GetInstanceTypeId (void) const;
-
-  /**
-   * Create a QosTag with the default TID = 0 (best effort traffic)
-   */
-  QosTag ();
-
-  /**
-   * Create a QosTag with the given Traffic ID
-   *
-   * \param tid the given Traffic ID
-   */
-  QosTag (uint8_t tid);
-
-  /**
-   * Set the TID to the given value. This assumes that the
-   * application is aware of the QoS support provided by the MAC
-   * layer, and is therefore able to set the correct TID.
-   *
-   * \param tid the value of the TID to set
-   */
-  void SetTid (uint8_t tid);
-
-  /**
-   * Set the TID to the value that corresponds to the requested
-   * UserPriority. Note that, since the mapping of UserPriority to TID
-   * is defined for EDCA only, you should call this method only when
-   * EDCA is used. When using HDCA, QosTag(uint8_t tid) should be used
-   * instead.
-   *
-   * \param up the requested UserPriority
-   *
-   */
-  void SetUserPriority (UserPriority up);
-
-  virtual void Serialize (TagBuffer i) const;
-  virtual void Deserialize (TagBuffer i);
-  virtual uint32_t GetSerializedSize () const;
-  virtual void Print (std::ostream &os) const;
-
-  /**
-   * Return the Type ID.
-   *
-   * \return type ID
-   */
-  uint8_t GetTid (void) const;
-
-private:
-  uint8_t m_tid;  //!< Traffic ID
-};
-
-} //namespace ns3
-
-#endif /* QOS_TAG_H */
diff -Naur ns-3.25/src/wifi/model/qos-utils.cc ns-3.26/src/wifi/model/qos-utils.cc
--- ns-3.25/src/wifi/model/qos-utils.cc	2016-10-03 20:57:08.518245528 -0700
+++ ns-3.26/src/wifi/model/qos-utils.cc	2016-10-03 19:49:01.810386438 -0700
@@ -20,7 +20,7 @@
  */
 
 #include "qos-utils.h"
-#include "qos-tag.h"
+#include "ns3/socket.h"
 
 namespace ns3 {
 
@@ -61,13 +61,13 @@
 uint8_t
 QosUtilsGetTidForPacket (Ptr<const Packet> packet)
 {
-  QosTag qos;
+  SocketPriorityTag qos;
   uint8_t tid = 8;
   if (packet->PeekPacketTag (qos))
     {
-      if (qos.GetTid () < 8)
+      if (qos.GetPriority () < 8)
         {
-          tid = qos.GetTid ();
+          tid = qos.GetPriority ();
         }
     }
   return tid;
diff -Naur ns-3.25/src/wifi/model/regular-wifi-mac.cc ns-3.26/src/wifi/model/regular-wifi-mac.cc
--- ns-3.25/src/wifi/model/regular-wifi-mac.cc	2016-10-03 20:57:08.520245513 -0700
+++ ns-3.26/src/wifi/model/regular-wifi-mac.cc	2016-10-03 19:49:01.812386423 -0700
@@ -42,7 +42,8 @@
 RegularWifiMac::RegularWifiMac () :
   m_htSupported (0),
   m_vhtSupported (0),
-  m_erpSupported (0)
+  m_erpSupported (0),
+  m_dsssSupported (0)
 {
   NS_LOG_FUNCTION (this);
   m_rxMiddle = new MacRxMiddle ();
@@ -289,28 +290,28 @@
 void
 RegularWifiMac::SetVoBlockAckThreshold (uint8_t threshold)
 {
-  NS_LOG_FUNCTION (this << threshold);
+  NS_LOG_FUNCTION (this << (uint16_t) threshold);
   GetVOQueue ()->SetBlockAckThreshold (threshold);
 }
 
 void
 RegularWifiMac::SetViBlockAckThreshold (uint8_t threshold)
 {
-  NS_LOG_FUNCTION (this << threshold);
+  NS_LOG_FUNCTION (this << (uint16_t) threshold);
   GetVIQueue ()->SetBlockAckThreshold (threshold);
 }
 
 void
 RegularWifiMac::SetBeBlockAckThreshold (uint8_t threshold)
 {
-  NS_LOG_FUNCTION (this << threshold);
+  NS_LOG_FUNCTION (this << (uint16_t) threshold);
   GetBEQueue ()->SetBlockAckThreshold (threshold);
 }
 
 void
 RegularWifiMac::SetBkBlockAckThreshold (uint8_t threshold)
 {
-  NS_LOG_FUNCTION (this << threshold);
+  NS_LOG_FUNCTION (this << (uint16_t) threshold);
   GetBKQueue ()->SetBlockAckThreshold (threshold);
 }
 
@@ -522,10 +523,27 @@
 RegularWifiMac::SetErpSupported (bool enable)
 {
   NS_LOG_FUNCTION (this);
+  if (enable)
+    {
+      SetDsssSupported (true);
+    }
   m_erpSupported = enable;
 }
 
 void
+RegularWifiMac::SetDsssSupported (bool enable)
+{
+  NS_LOG_FUNCTION (this);
+  m_dsssSupported = enable;
+}
+
+bool
+RegularWifiMac::GetDsssSupported () const
+{
+  return m_dsssSupported;
+}
+
+void
 RegularWifiMac::SetCtsToSelfSupported (bool enable)
 {
   NS_LOG_FUNCTION (this);
@@ -1091,10 +1109,14 @@
     case WIFI_PHY_STANDARD_80211ac:
       SetVhtSupported (true);
     case WIFI_PHY_STANDARD_80211n_5GHZ:
+      SetHtSupported (true);
+      cwmin = 15;
+      cwmax = 1023;
+      break;
     case WIFI_PHY_STANDARD_80211n_2_4GHZ:
       SetHtSupported (true);
     case WIFI_PHY_STANDARD_80211g:
-      m_erpSupported = true;
+      SetErpSupported (true);
     case WIFI_PHY_STANDARD_holland:
     case WIFI_PHY_STANDARD_80211a:
     case WIFI_PHY_STANDARD_80211_10MHZ:
@@ -1103,6 +1125,7 @@
       cwmax = 1023;
       break;
     case WIFI_PHY_STANDARD_80211b:
+      SetDsssSupported (true);
       cwmin = 31;
       cwmax = 1023;
       break;
@@ -1116,14 +1139,15 @@
 void
 RegularWifiMac::ConfigureContentionWindow (uint32_t cwMin, uint32_t cwMax)
 {
+  bool isDsssOnly = m_dsssSupported && !m_erpSupported;
   //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, isDsssOnly, 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, isDsssOnly, i->first);
   }
 }
 
diff -Naur ns-3.25/src/wifi/model/regular-wifi-mac.h ns-3.26/src/wifi/model/regular-wifi-mac.h
--- ns-3.25/src/wifi/model/regular-wifi-mac.h	2016-10-03 20:57:08.520245513 -0700
+++ ns-3.26/src/wifi/model/regular-wifi-mac.h	2016-10-03 19:49:01.813386416 -0700
@@ -509,6 +509,24 @@
    * \return true if ERP is supported, false otherwise
    */
   bool GetErpSupported () const;
+  
+  /**
+   * This Boolean is set \c true iff this WifiMac is to model
+   * 802.11b. It is exposed through the attribute system.
+   */
+  bool m_dsssSupported;
+  /**
+   * Enable or disable DSSS support for the device.
+   *
+   * \param enable whether DSSS is supported
+   */
+  void SetDsssSupported (bool enable);
+  /**
+   * Return whether the device supports DSSS.
+   *
+   * \return true if DSSS is supported, false otherwise
+   */
+  bool GetDsssSupported () const;
 
 
 private:
diff -Naur ns-3.25/src/wifi/model/rraa-wifi-manager.cc ns-3.26/src/wifi/model/rraa-wifi-manager.cc
--- ns-3.25/src/wifi/model/rraa-wifi-manager.cc	2016-10-03 20:57:08.521245505 -0700
+++ ns-3.26/src/wifi/model/rraa-wifi-manager.cc	2016-10-03 19:49:01.813386416 -0700
@@ -496,4 +496,24 @@
   return true;
 }
 
+void
+RraaWifiManager::SetHtSupported (bool enable)
+{
+  //HT is not supported by this algorithm.
+  if (enable)
+    {
+      NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support HT rates");
+    }
+}
+
+void
+RraaWifiManager::SetVhtSupported (bool enable)
+{
+  //VHT is not supported by this algorithm.
+  if (enable)
+    {
+      NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support VHT rates");
+    }
+}
+
 } //namespace ns3
diff -Naur ns-3.25/src/wifi/model/rraa-wifi-manager.h ns-3.26/src/wifi/model/rraa-wifi-manager.h
--- ns-3.25/src/wifi/model/rraa-wifi-manager.h	2016-10-03 20:57:08.521245505 -0700
+++ ns-3.26/src/wifi/model/rraa-wifi-manager.h	2016-10-03 19:49:01.814386409 -0700
@@ -36,6 +36,10 @@
  * "Robust rate adaptation for 802.11 wireless networks"
  * by "Starsky H. Y. Wong", "Hao Yang", "Songwu Lu", and,
  * "Vaduvur Bharghavan" published in Mobicom 06.
+ *
+ * This RAA does not support HT or VHT modes and will error exit
+ * if the user tries to configure this RAA with a Wi-Fi MAC that
+ * has VhtSupported or HtSupported set.
  */
 class RraaWifiManager : public WifiRemoteStationManager
 {
@@ -45,6 +49,9 @@
   RraaWifiManager ();
   virtual ~RraaWifiManager ();
 
+  // Inherited from WifiRemoteStationManager
+  virtual void SetHtSupported (bool enable);
+  virtual void SetVhtSupported (bool enable);
 
 private:
   struct ThresholdsItem
diff -Naur ns-3.25/src/wifi/model/spectrum-wifi-phy.cc ns-3.26/src/wifi/model/spectrum-wifi-phy.cc
--- ns-3.25/src/wifi/model/spectrum-wifi-phy.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/wifi/model/spectrum-wifi-phy.cc	2016-10-03 19:49:01.815386401 -0700
@@ -0,0 +1,830 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2005,2006 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ *          Ghada Badawy <gbadawy@gmail.com>
+ *          Sébastien Deronne <sebastien.deronne@gmail.com>
+ *
+ * Ported from yans-wifi-phy.cc by several contributors starting
+ * with Nicola Baldo and Dean Armstrong
+ */
+
+#include "spectrum-wifi-phy.h"
+#include "ns3/spectrum-channel.h"
+#include "ns3/spectrum-value.h"
+#include "ns3/wifi-spectrum-value-helper.h"
+#include "wifi-phy-state-helper.h"
+#include "ns3/simulator.h"
+#include "ns3/assert.h"
+#include "ns3/log.h"
+#include "ns3/double.h"
+#include "ns3/boolean.h"
+#include "ampdu-tag.h"
+#include "wifi-spectrum-signal-parameters.h"
+#include "wifi-phy-tag.h"
+#include "ns3/antenna-model.h"
+#include <cmath>
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("SpectrumWifiPhy");
+
+NS_OBJECT_ENSURE_REGISTERED (SpectrumWifiPhy);
+
+TypeId
+SpectrumWifiPhy::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::SpectrumWifiPhy")
+    .SetParent<WifiPhy> ()
+    .SetGroupName ("Wifi")
+    .AddConstructor<SpectrumWifiPhy> ()
+    .AddAttribute ("DisableWifiReception", "Prevent Wi-Fi frame sync from ever happening",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&SpectrumWifiPhy::m_disableWifiReception),
+                   MakeBooleanChecker ())
+    .AddTraceSource ("SignalArrival",
+                     "Signal arrival",
+                     MakeTraceSourceAccessor (&SpectrumWifiPhy::m_signalCb),
+                     "ns3::SpectrumWifiPhy::SignalArrivalCallback")
+  ;
+  return tid;
+}
+
+SpectrumWifiPhy::SpectrumWifiPhy ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+SpectrumWifiPhy::~SpectrumWifiPhy ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+SpectrumWifiPhy::DoDispose (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_channel = 0;
+  m_wifiSpectrumPhyInterface = 0;
+}
+
+void
+SpectrumWifiPhy::DoInitialize (void)
+{
+  NS_LOG_FUNCTION (this);
+  WifiPhy::DoInitialize ();
+  // This connection is deferred until frequency and channel width are set
+  if (m_channel && m_wifiSpectrumPhyInterface)
+    {
+      m_channel->AddRx (m_wifiSpectrumPhyInterface);
+    }
+  else
+    {
+      NS_FATAL_ERROR ("SpectrumWifiPhy misses channel and WifiSpectrumPhyInterface objects at initialization time");
+    }
+}
+
+bool
+SpectrumWifiPhy::DoChannelSwitch (uint16_t nch)
+{
+  if (IsInitialized () == false)
+    {
+      //this is not channel switch, this is initialization
+      NS_LOG_DEBUG ("start at channel " << nch);
+      return true;
+    }
+
+  NS_ASSERT (!IsStateSwitching ());
+  switch (m_state->GetState ())
+    {
+    case SpectrumWifiPhy::RX:
+      NS_LOG_DEBUG ("drop packet because of channel switching while reception");
+      m_endPlcpRxEvent.Cancel ();
+      m_endRxEvent.Cancel ();
+      goto switchChannel;
+      break;
+    case SpectrumWifiPhy::TX:
+      NS_LOG_DEBUG ("channel switching postponed until end of current transmission");
+      Simulator::Schedule (GetDelayUntilIdle (), &WifiPhy::SetChannelNumber, this, nch);
+      break;
+    case SpectrumWifiPhy::CCA_BUSY:
+    case SpectrumWifiPhy::IDLE:
+      goto switchChannel;
+      break;
+    case SpectrumWifiPhy::SLEEP:
+      NS_LOG_DEBUG ("channel switching ignored in sleep mode");
+      break;
+    default:
+      NS_ASSERT (false);
+      break;
+    }
+
+  return false;
+
+switchChannel:
+
+  NS_LOG_DEBUG ("switching channel " << GetChannelNumber () << " -> " << nch);
+  m_rxSpectrumModel = WifiSpectrumValueHelper::GetSpectrumModel (GetFrequency (), GetChannelWidth ());
+  m_state->SwitchToChannelSwitching (GetChannelSwitchDelay ());
+  m_interference.EraseEvents ();
+  /*
+   * Needed here to be able to correctly sensed the medium for the first
+   * time after the switching. The actual switching is not performed until
+   * after m_channelSwitchDelay. Packets received during the switching
+   * state are added to the event list and are employed later to figure
+   * out the state of the medium after the switching.
+   */
+  return true;
+}
+
+bool
+SpectrumWifiPhy::DoFrequencySwitch (uint32_t frequency)
+{
+  if (IsInitialized () == false)
+    {
+      //this is not channel switch, this is initialization
+      NS_LOG_DEBUG ("start at frequency " << frequency);
+      return true;
+    }
+
+  NS_ASSERT (!IsStateSwitching ());
+  switch (m_state->GetState ())
+    {
+    case SpectrumWifiPhy::RX:
+      NS_LOG_DEBUG ("drop packet because of channel/frequency switching while reception");
+      m_endPlcpRxEvent.Cancel ();
+      m_endRxEvent.Cancel ();
+      goto switchFrequency;
+      break;
+    case SpectrumWifiPhy::TX:
+      NS_LOG_DEBUG ("channel/frequency switching postponed until end of current transmission");
+      Simulator::Schedule (GetDelayUntilIdle (), &WifiPhy::SetFrequency, this, frequency);
+      break;
+    case SpectrumWifiPhy::CCA_BUSY:
+    case SpectrumWifiPhy::IDLE:
+      goto switchFrequency;
+      break;
+    case SpectrumWifiPhy::SLEEP:
+      NS_LOG_DEBUG ("frequency switching ignored in sleep mode");
+      break;
+    default:
+      NS_ASSERT (false);
+      break;
+    }
+
+  return false;
+
+switchFrequency:
+
+  NS_LOG_DEBUG ("switching frequency " << GetFrequency () << " -> " << frequency);
+  m_rxSpectrumModel = WifiSpectrumValueHelper::GetSpectrumModel (GetFrequency (), GetChannelWidth ());
+  m_state->SwitchToChannelSwitching (GetChannelSwitchDelay ());
+  m_interference.EraseEvents ();
+  /*
+   * Needed here to be able to correctly sensed the medium for the first
+   * time after the switching. The actual switching is not performed until
+   * after m_channelSwitchDelay. Packets received during the switching
+   * state are added to the event list and are employed later to figure
+   * out the state of the medium after the switching.
+   */
+  return true;
+}
+
+Ptr<const SpectrumModel>
+SpectrumWifiPhy::GetRxSpectrumModel () const
+{
+  NS_LOG_FUNCTION (this);
+  if (m_rxSpectrumModel)
+    {
+      return m_rxSpectrumModel;
+    }
+  else
+    {
+      if (GetFrequency () == 0)
+        {
+          NS_LOG_DEBUG ("Frequency is not set; returning 0");
+          return 0;
+        }
+      else
+        {
+          NS_LOG_DEBUG ("Creating spectrum model from frequency/width pair of (" << GetFrequency () << ", " << GetChannelWidth () << ")");
+          m_rxSpectrumModel = WifiSpectrumValueHelper::GetSpectrumModel (GetFrequency (), GetChannelWidth ());
+        }
+    }
+  return m_rxSpectrumModel;
+}
+
+Ptr<WifiChannel>
+SpectrumWifiPhy::GetChannel (void) const
+{
+  return Ptr<WifiChannel> (0);
+}
+
+void
+SpectrumWifiPhy::SetChannel (Ptr<SpectrumChannel> channel)
+{
+  m_channel = channel;
+}
+
+void
+SpectrumWifiPhy::SetPacketReceivedCallback (RxCallback callback)
+{
+  m_rxCallback = callback;
+}
+
+void
+SpectrumWifiPhy::AddOperationalChannel (uint16_t channelNumber)
+{
+  m_operationalChannelList.push_back (channelNumber);
+}
+
+std::vector<uint16_t>
+SpectrumWifiPhy::GetOperationalChannelList () const
+{
+  std::vector<uint16_t> channelList;
+  channelList.push_back (GetChannelNumber ());  // first channel of list
+  for (std::vector<uint16_t>::size_type i = 0; i != m_operationalChannelList.size (); i++)
+    {
+      if (m_operationalChannelList[i] != GetChannelNumber ())
+        {
+          channelList.push_back (m_operationalChannelList[i]);
+        }
+    }
+  return channelList;
+}
+
+void
+SpectrumWifiPhy::ClearOperationalChannelList ()
+{
+  m_operationalChannelList.clear ();
+}
+
+void
+SpectrumWifiPhy::SetSleepMode (void)
+{
+  NS_LOG_FUNCTION (this);
+  switch (m_state->GetState ())
+    {
+    case SpectrumWifiPhy::TX:
+      NS_LOG_DEBUG ("setting sleep mode postponed until end of current transmission");
+      Simulator::Schedule (GetDelayUntilIdle (), &SpectrumWifiPhy::SetSleepMode, this);
+      break;
+    case SpectrumWifiPhy::RX:
+      NS_LOG_DEBUG ("setting sleep mode postponed until end of current reception");
+      Simulator::Schedule (GetDelayUntilIdle (), &SpectrumWifiPhy::SetSleepMode, this);
+      break;
+    case SpectrumWifiPhy::SWITCHING:
+      NS_LOG_DEBUG ("setting sleep mode postponed until end of channel switching");
+      Simulator::Schedule (GetDelayUntilIdle (), &SpectrumWifiPhy::SetSleepMode, this);
+      break;
+    case SpectrumWifiPhy::CCA_BUSY:
+    case SpectrumWifiPhy::IDLE:
+      NS_LOG_DEBUG ("setting sleep mode");
+      m_state->SwitchToSleep ();
+      break;
+    case SpectrumWifiPhy::SLEEP:
+      NS_LOG_DEBUG ("already in sleep mode");
+      break;
+    default:
+      NS_ASSERT (false);
+      break;
+    }
+}
+
+void
+SpectrumWifiPhy::ResumeFromSleep (void)
+{
+  NS_LOG_FUNCTION (this);
+  switch (m_state->GetState ())
+    {
+    case SpectrumWifiPhy::TX:
+    case SpectrumWifiPhy::RX:
+    case SpectrumWifiPhy::IDLE:
+    case SpectrumWifiPhy::CCA_BUSY:
+    case SpectrumWifiPhy::SWITCHING:
+      {
+        NS_LOG_DEBUG ("not in sleep mode, there is nothing to resume");
+        break;
+      }
+    case SpectrumWifiPhy::SLEEP:
+      {
+        NS_LOG_DEBUG ("resuming from sleep mode");
+        Time delayUntilCcaEnd = m_interference.GetEnergyDuration (DbmToW (GetCcaMode1Threshold ()));
+        m_state->SwitchFromSleep (delayUntilCcaEnd);
+        break;
+      }
+    default:
+      {
+        NS_ASSERT (false);
+        break;
+      }
+    }
+}
+
+void
+SpectrumWifiPhy::SetReceiveOkCallback (RxOkCallback callback)
+{
+  m_state->SetReceiveOkCallback (callback);
+}
+
+void
+SpectrumWifiPhy::SetReceiveErrorCallback (RxErrorCallback callback)
+{
+  m_state->SetReceiveErrorCallback (callback);
+}
+
+void
+SpectrumWifiPhy::SwitchMaybeToCcaBusy (void)
+{
+  NS_LOG_FUNCTION (this);
+  //We are here because we have received the first bit of a packet and we are
+  //not going to be able to synchronize on it
+  //In this model, CCA becomes busy when the aggregation of all signals as
+  //tracked by the InterferenceHelper class is higher than the CcaBusyThreshold
+
+  Time delayUntilCcaEnd = m_interference.GetEnergyDuration (DbmToW (GetCcaMode1Threshold ()));
+  if (!delayUntilCcaEnd.IsZero ())
+    {
+      NS_LOG_DEBUG ("Calling SwitchMaybeToCcaBusy for " << delayUntilCcaEnd.As (Time::S));
+      m_state->SwitchMaybeToCcaBusy (delayUntilCcaEnd);
+    }
+}
+
+void
+SpectrumWifiPhy::StartRx (Ptr<SpectrumSignalParameters> rxParams)
+{
+  NS_LOG_FUNCTION (this << rxParams);
+  Time rxDuration = rxParams->duration;
+  Ptr<SpectrumValue> receivedSignalPsd = rxParams->psd;
+  NS_LOG_DEBUG ("Received signal with PSD " << *receivedSignalPsd << " and duration " << rxDuration.As (Time::NS));
+  uint32_t senderNodeId = 0;
+  if (rxParams->txPhy)
+    {
+      senderNodeId = rxParams->txPhy->GetDevice ()->GetNode ()->GetId ();
+    }
+  NS_LOG_DEBUG ("Received signal from " << senderNodeId << " with unfiltered power " << WToDbm (Integral (*receivedSignalPsd)) << " dBm");
+  // Integrate over our receive bandwidth (i.e., all that the receive
+  // spectral mask representing our filtering allows) to find the
+  // total energy apparent to the "demodulator".
+  Ptr<SpectrumValue> filter = WifiSpectrumValueHelper::CreateRfFilter (GetFrequency (), GetChannelWidth ());
+  SpectrumValue filteredSignal = (*filter) * (*receivedSignalPsd);
+  // Add receiver antenna gain
+  NS_LOG_DEBUG ("Signal power received (watts) before antenna gain: " << Integral (filteredSignal));
+  double rxPowerW = Integral (filteredSignal) * DbToRatio (GetRxGain ());
+  NS_LOG_DEBUG ("Signal power received after antenna gain: " << rxPowerW << " W (" << WToDbm (rxPowerW) << " dBm)");
+
+  Ptr<WifiSpectrumSignalParameters> wifiRxParams = DynamicCast<WifiSpectrumSignalParameters> (rxParams);
+
+  // Log the signal arrival to the trace source
+  m_signalCb (wifiRxParams ? true : false, senderNodeId, WToDbm (rxPowerW), rxDuration);
+  if (wifiRxParams == 0)
+    {
+      NS_LOG_INFO ("Received non Wi-Fi signal");
+      m_interference.AddForeignSignal (rxDuration, rxPowerW);
+      SwitchMaybeToCcaBusy ();
+      return;
+    }
+  if (wifiRxParams && m_disableWifiReception)
+    {
+      NS_LOG_INFO ("Received Wi-Fi signal but blocked from syncing");
+      m_interference.AddForeignSignal (rxDuration, rxPowerW);
+      SwitchMaybeToCcaBusy ();
+      return;
+    }
+
+  NS_LOG_INFO ("Received Wi-Fi signal");
+  Ptr<Packet> packet = wifiRxParams->packet->Copy ();
+  WifiPhyTag tag;
+  bool found = packet->PeekPacketTag (tag);
+  if (!found)
+    {
+      NS_FATAL_ERROR ("Received Wi-Fi Spectrum Signal with no WifiPhyTag");
+      return;
+    }
+
+  WifiTxVector txVector = tag.GetWifiTxVector ();
+  if (txVector.GetNss () > GetNumberOfReceiveAntennas ())
+    {
+      /* failure. */
+      NotifyRxDrop (packet);
+      NS_LOG_INFO ("Reception ends in failure because less RX antennas than number of spatial streams");
+      SwitchMaybeToCcaBusy ();
+      return;
+    }
+
+  enum WifiPreamble preamble = tag.GetWifiPreamble ();
+  enum mpduType mpdutype = tag.GetMpduType ();
+
+  // At this point forward, processing parallels that of
+  // YansWifiPhy::StartReceivePreambleAndHeader ()
+
+  AmpduTag ampduTag;
+  Time endRx = Simulator::Now () + rxDuration;
+  Time preambleAndHeaderDuration = CalculatePlcpPreambleAndHeaderDuration (txVector, preamble);
+
+  Ptr<InterferenceHelper::Event> event;
+  event = m_interference.Add (packet->GetSize (),
+                              txVector,
+                              preamble,
+                              rxDuration,
+                              rxPowerW);
+
+  switch (m_state->GetState ())
+    {
+    case SpectrumWifiPhy::SWITCHING:
+      NS_LOG_DEBUG ("drop packet because of channel switching");
+      NotifyRxDrop (packet);
+      m_plcpSuccess = false;
+      /*
+       * Packets received on the upcoming channel are added to the event list
+       * during the switching state. This way the medium can be correctly sensed
+       * when the device listens to the channel for the first time after the
+       * switching e.g. after channel switching, the channel may be sensed as
+       * busy due to other devices' tramissions started before the end of
+       * the switching.
+       */
+      if (endRx > Simulator::Now () + m_state->GetDelayUntilIdle ())
+        {
+          //that packet will be noise _after_ the completion of the
+          //channel switching.
+          SwitchMaybeToCcaBusy ();
+          return;
+        }
+      break;
+    case SpectrumWifiPhy::RX:
+      NS_LOG_DEBUG ("drop packet because already in Rx (power=" <<
+                    rxPowerW << "W)");
+      NotifyRxDrop (packet);
+      if (endRx > Simulator::Now () + m_state->GetDelayUntilIdle ())
+        {
+          //that packet will be noise _after_ the reception of the
+          //currently-received packet.
+          SwitchMaybeToCcaBusy ();
+          return;
+        }
+      break;
+    case SpectrumWifiPhy::TX:
+      NS_LOG_DEBUG ("drop packet because already in Tx (power=" <<
+                    rxPowerW << "W)");
+      NotifyRxDrop (packet);
+      if (endRx > Simulator::Now () + m_state->GetDelayUntilIdle ())
+        {
+          //that packet will be noise _after_ the transmission of the
+          //currently-transmitted packet.
+          SwitchMaybeToCcaBusy ();
+          return;
+        }
+      break;
+    case SpectrumWifiPhy::CCA_BUSY:
+    case SpectrumWifiPhy::IDLE:
+      if (rxPowerW > GetEdThresholdW ()) //checked here, no need to check in the payload reception (current implementation assumes constant rx power over the packet duration)
+        {
+          if (preamble == WIFI_PREAMBLE_NONE && m_mpdusNum == 0)
+            {
+              NS_LOG_DEBUG ("drop packet because no preamble has been received");
+              NotifyRxDrop (packet);
+              SwitchMaybeToCcaBusy ();
+              return;
+            }
+          else if (preamble == WIFI_PREAMBLE_NONE && m_plcpSuccess == false) //A-MPDU reception fails
+            {
+              NS_LOG_DEBUG ("Drop MPDU because no plcp has been received");
+              NotifyRxDrop (packet);
+              SwitchMaybeToCcaBusy ();
+              return;
+            }
+          else if (preamble != WIFI_PREAMBLE_NONE && packet->PeekPacketTag (ampduTag) && m_mpdusNum == 0)
+            {
+              //received the first MPDU in an MPDU
+              m_mpdusNum = ampduTag.GetRemainingNbOfMpdus () - 1;
+              m_rxMpduReferenceNumber++;
+            }
+          else if (preamble == WIFI_PREAMBLE_NONE && packet->PeekPacketTag (ampduTag) && m_mpdusNum > 0)
+            {
+              //received the other MPDUs that are part of the A-MPDU
+              if (ampduTag.GetRemainingNbOfMpdus () < m_mpdusNum)
+                {
+                  NS_LOG_DEBUG ("Missing MPDU from the A-MPDU " << m_mpdusNum - ampduTag.GetRemainingNbOfMpdus ());
+                  m_mpdusNum = ampduTag.GetRemainingNbOfMpdus ();
+                }
+              else
+                {
+                  m_mpdusNum--;
+                }
+            }
+          else if (preamble != WIFI_PREAMBLE_NONE && m_mpdusNum > 0 )
+            {
+              NS_LOG_DEBUG ("Didn't receive the last MPDUs from an A-MPDU " << m_mpdusNum);
+              m_mpdusNum = 0;
+            }
+
+          NS_LOG_DEBUG ("sync to signal (power=" << rxPowerW << "W)");
+          //sync to signal
+          m_state->SwitchToRx (rxDuration);
+          NS_ASSERT (m_endPlcpRxEvent.IsExpired ());
+          NotifyRxBegin (packet);
+          m_interference.NotifyRxStart ();
+
+          if (preamble != WIFI_PREAMBLE_NONE)
+            {
+              NS_ASSERT (m_endPlcpRxEvent.IsExpired ());
+              m_endPlcpRxEvent = Simulator::Schedule (preambleAndHeaderDuration, &SpectrumWifiPhy::StartReceivePacket, this,
+                                                      packet, txVector, preamble, mpdutype, event);
+            }
+
+          NS_ASSERT (m_endRxEvent.IsExpired ());
+          m_endRxEvent = Simulator::Schedule (rxDuration, &SpectrumWifiPhy::EndReceive, this,
+                                              packet, preamble, mpdutype, event);
+        }
+      else
+        {
+          NS_LOG_DEBUG ("drop packet because signal power too Small (" <<
+                        rxPowerW << "<" << GetEdThresholdW () << ")");
+          NotifyRxDrop (packet);
+          m_plcpSuccess = false;
+          SwitchMaybeToCcaBusy ();
+          return;
+        }
+      break;
+    case SpectrumWifiPhy::SLEEP:
+      NS_LOG_DEBUG ("drop packet because in sleep mode");
+      NotifyRxDrop (packet);
+      m_plcpSuccess = false;
+      break;
+    }
+
+  return;
+}
+
+void
+SpectrumWifiPhy::StartReceivePacket (Ptr<Packet> packet,
+                                     WifiTxVector txVector,
+                                     enum WifiPreamble preamble,
+                                     enum mpduType mpdutype,
+                                     Ptr<InterferenceHelper::Event> event)
+{
+  NS_LOG_FUNCTION (this << packet << txVector.GetMode () << preamble << (uint32_t)mpdutype);
+  NS_ASSERT (IsStateRx ());
+  NS_ASSERT (m_endPlcpRxEvent.IsExpired ());
+  AmpduTag ampduTag;
+  WifiMode txMode = txVector.GetMode ();
+
+  struct InterferenceHelper::SnrPer snrPer;
+  snrPer = m_interference.CalculatePlcpHeaderSnrPer (event);
+
+  NS_LOG_DEBUG ("snr(dB)=" << RatioToDb (snrPer.snr) << ", per=" << snrPer.per);
+
+  if (m_random->GetValue () > snrPer.per) //plcp reception succeeded
+    {
+      if (IsModeSupported (txMode) || IsMcsSupported (txMode))
+        {
+          NS_LOG_DEBUG ("receiving plcp payload"); //endReceive is already scheduled
+          m_plcpSuccess = true;
+        }
+      else //mode is not allowed
+        {
+          NS_LOG_DEBUG ("drop packet because it was sent using an unsupported mode (" << txMode << ")");
+          NotifyRxDrop (packet);
+          m_plcpSuccess = false;
+        }
+    }
+  else //plcp reception failed
+    {
+      NS_LOG_DEBUG ("drop packet because plcp preamble/header reception failed");
+      NotifyRxDrop (packet);
+      m_plcpSuccess = false;
+    }
+}
+
+Ptr<WifiSpectrumPhyInterface>
+SpectrumWifiPhy::GetSpectrumPhy (void) const
+{
+  return m_wifiSpectrumPhyInterface;
+}
+
+Ptr<AntennaModel>
+SpectrumWifiPhy::GetRxAntenna (void) const
+{
+  return m_antenna;
+}
+
+void
+SpectrumWifiPhy::SetAntenna (Ptr<AntennaModel> a)
+{
+  NS_LOG_FUNCTION (this << a);
+  m_antenna = a;
+}
+
+void
+SpectrumWifiPhy::CreateWifiSpectrumPhyInterface (Ptr<NetDevice> device)
+{
+  NS_LOG_FUNCTION (this << device);
+  m_wifiSpectrumPhyInterface = CreateObject<WifiSpectrumPhyInterface> ();
+  m_wifiSpectrumPhyInterface->SetSpectrumWifiPhy (this);
+  m_wifiSpectrumPhyInterface->SetDevice (device);
+}
+
+void
+SpectrumWifiPhy::SendPacket (Ptr<const Packet> packet, WifiTxVector txVector, WifiPreamble preamble)
+{
+  SendPacket (packet, txVector, preamble, NORMAL_MPDU);
+}
+
+Ptr<SpectrumValue>
+SpectrumWifiPhy::GetTxPowerSpectralDensity (uint32_t centerFrequency, uint32_t channelWidth, double txPowerW) const
+{
+  NS_LOG_FUNCTION (centerFrequency << channelWidth << txPowerW);
+  Ptr<SpectrumValue> v;
+  switch (GetStandard ())
+    {
+    case WIFI_PHY_STANDARD_80211a:
+    case WIFI_PHY_STANDARD_80211g:
+    case WIFI_PHY_STANDARD_holland:
+    case WIFI_PHY_STANDARD_80211_10MHZ:
+    case WIFI_PHY_STANDARD_80211_5MHZ:
+      v = WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity (centerFrequency, channelWidth, txPowerW);
+      break;
+    case WIFI_PHY_STANDARD_80211b:
+      v = WifiSpectrumValueHelper::CreateDsssTxPowerSpectralDensity (centerFrequency, txPowerW);
+      break;
+    case WIFI_PHY_STANDARD_80211n_2_4GHZ:
+    case WIFI_PHY_STANDARD_80211n_5GHZ:
+    case WIFI_PHY_STANDARD_80211ac:
+      v = WifiSpectrumValueHelper::CreateHtOfdmTxPowerSpectralDensity (centerFrequency, channelWidth, txPowerW);
+      break;
+    default:
+      NS_FATAL_ERROR ("Standard unknown: " << GetStandard ());
+      break;
+    }
+  return v;
+}
+
+void
+SpectrumWifiPhy::SendPacket (Ptr<const Packet> packet, WifiTxVector txVector, WifiPreamble preamble, enum mpduType mpdutype)
+{
+  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
+   *    prevent it.
+   *  - we are idle
+   */
+  NS_ASSERT (!m_state->IsStateTx () && !m_state->IsStateSwitching ());
+
+  if (m_state->IsStateSleep ())
+    {
+      NS_LOG_DEBUG ("Dropping packet because in sleep mode");
+      NotifyTxDrop (packet);
+      return;
+    }
+
+  Time txDuration = CalculateTxDuration (packet->GetSize (), txVector, preamble, GetFrequency (), mpdutype, 1);
+  NS_ASSERT (txDuration > NanoSeconds (0));
+
+  if (m_state->IsStateRx ())
+    {
+      m_endPlcpRxEvent.Cancel ();
+      m_endRxEvent.Cancel ();
+      m_interference.NotifyRxEnd ();
+    }
+  NotifyTxBegin (packet);
+  uint32_t dataRate500KbpsUnits;
+  if (txVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT || txVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_VHT)
+    {
+      dataRate500KbpsUnits = 128 + txVector.GetMode ().GetMcsValue ();
+    }
+  else
+    {
+      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.type = mpdutype;
+  aMpdu.mpduRefNumber = m_txMpduReferenceNumber;
+  NotifyMonitorSniffTx (packet, (uint16_t) GetFrequency (), GetChannelNumber (), dataRate500KbpsUnits, preamble, txVector, aMpdu);
+  m_state->SwitchToTx (txDuration, packet, GetPowerDbm (txVector.GetTxPowerLevel ()), txVector, preamble);
+  //
+  // Spectrum elements added here
+  //
+  Ptr<Packet> newPacket = packet->Copy (); // obtain non-const Packet
+  WifiPhyTag oldtag;
+  newPacket->RemovePacketTag (oldtag);
+  WifiPhyTag tag (txVector, preamble, mpdutype);
+  newPacket->AddPacketTag (tag);
+
+  NS_LOG_DEBUG ("Transmission signal power before antenna gain: " << GetPowerDbm (txVector.GetTxPowerLevel ()) << " dBm");
+  double txPowerWatts = DbmToW (GetPowerDbm (txVector.GetTxPowerLevel ()) + GetTxGain ());
+
+  Ptr<SpectrumValue> txPowerSpectrum = GetTxPowerSpectralDensity (GetFrequency (), GetChannelWidth (), txPowerWatts);
+  Ptr<WifiSpectrumSignalParameters> txParams = Create<WifiSpectrumSignalParameters> ();
+  txParams->duration = txDuration;
+  txParams->psd = txPowerSpectrum;
+  NS_ASSERT_MSG (m_wifiSpectrumPhyInterface, "SpectrumPhy() is not set; maybe forgot to call CreateWifiSpectrumPhyInterface?");
+  txParams->txPhy = m_wifiSpectrumPhyInterface->GetObject<SpectrumPhy> ();
+  txParams->txAntenna = m_antenna;
+  txParams->packet = newPacket;
+  NS_LOG_DEBUG ("Starting transmission with power " << WToDbm (txPowerWatts) << " dBm on channel " << GetChannelNumber ());
+  NS_LOG_DEBUG ("Starting transmission with integrated spectrum power " << WToDbm (Integral (*txPowerSpectrum)) << " dBm; spectrum model Uid: " << txPowerSpectrum->GetSpectrumModel ()->GetUid ());
+  m_channel->StartTx (txParams);
+}
+
+void
+SpectrumWifiPhy::RegisterListener (WifiPhyListener *listener)
+{
+  m_state->RegisterListener (listener);
+}
+
+void
+SpectrumWifiPhy::UnregisterListener (WifiPhyListener *listener)
+{
+  m_state->UnregisterListener (listener);
+}
+
+void
+SpectrumWifiPhy::EndReceive (Ptr<Packet> packet, enum WifiPreamble preamble, enum mpduType mpdutype, Ptr<InterferenceHelper::Event> event)
+{
+  NS_LOG_FUNCTION (this << packet << event);
+  NS_ASSERT (IsStateRx ());
+  NS_ASSERT (event->GetEndTime () == Simulator::Now ());
+
+  struct InterferenceHelper::SnrPer snrPer;
+  snrPer = m_interference.CalculatePlcpPayloadSnrPer (event);
+  m_interference.NotifyRxEnd ();
+  bool rxSucceeded;
+
+  if (m_plcpSuccess == true)
+    {
+      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)
+        {
+          NotifyRxEnd (packet);
+          uint32_t dataRate500KbpsUnits;
+          if ((event->GetPayloadMode ().GetModulationClass () == WIFI_MOD_CLASS_HT) || (event->GetPayloadMode ().GetModulationClass () == WIFI_MOD_CLASS_VHT))
+            {
+              dataRate500KbpsUnits = 128 + event->GetPayloadMode ().GetMcsValue ();
+            }
+          else
+            {
+              dataRate500KbpsUnits = event->GetPayloadMode ().GetDataRate (event->GetTxVector ().GetChannelWidth (), event->GetTxVector ().IsShortGuardInterval (), 1) * event->GetTxVector ().GetNss () / 500000;
+            }
+          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) GetFrequency (), GetChannelNumber (), dataRate500KbpsUnits, event->GetPreambleType (), event->GetTxVector (), aMpdu, signalNoise);
+          m_state->SwitchFromRxEndOk (packet, snrPer.snr, event->GetTxVector (), event->GetPreambleType ());
+          rxSucceeded = true;
+        }
+      else
+        {
+          /* failure. */
+          NotifyRxDrop (packet);
+          m_state->SwitchFromRxEndError (packet, snrPer.snr);
+          rxSucceeded = false;
+        }
+      if (!m_rxCallback.IsNull ())
+        {
+          m_rxCallback (rxSucceeded);
+        }
+    }
+  else
+    {
+      m_state->SwitchFromRxEndError (packet, snrPer.snr);
+      if (!m_rxCallback.IsNull ())
+        {
+          m_rxCallback (false);
+        }
+    }
+
+  if (preamble == WIFI_PREAMBLE_NONE && mpdutype == LAST_MPDU_IN_AGGREGATE)
+    {
+      m_plcpSuccess = false;
+    }
+
+}
+
+} //namespace ns3
diff -Naur ns-3.25/src/wifi/model/spectrum-wifi-phy.h ns-3.26/src/wifi/model/spectrum-wifi-phy.h
--- ns-3.25/src/wifi/model/spectrum-wifi-phy.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/wifi/model/spectrum-wifi-phy.h	2016-10-03 19:49:01.815386401 -0700
@@ -0,0 +1,226 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2005,2006 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ *          Ghada Badawy <gbadawy@gmail.com>
+ *          Sébastien Deronne <sebastien.deronne@gmail.com>
+ *
+ * Ported from yans-wifi-phy.h by several contributors starting
+ * with Nicola Baldo and Dean Armstrong
+ */
+
+#ifndef SPECTRUM_WIFI_PHY_H
+#define SPECTRUM_WIFI_PHY_H
+
+#include "ns3/antenna-model.h"
+#include "wifi-phy.h"
+#include "wifi-spectrum-phy-interface.h"
+#include "ns3/spectrum-channel.h"
+#include "ns3/spectrum-interference.h"
+
+namespace ns3 {
+
+/**
+ * \brief 802.11 PHY layer model
+ * \ingroup wifi
+ *
+ * This PHY implements a spectrum-aware enhancement of the 802.11 SpectrumWifiPhy
+ * model.
+ *
+ * This PHY model depends on a channel loss and delay
+ * model as provided by the ns3::SpectrumPropagationLossModel
+ * and ns3::PropagationDelayModel classes.
+ *
+ */
+class SpectrumWifiPhy : public WifiPhy
+{
+public:
+  static TypeId GetTypeId (void);
+
+  SpectrumWifiPhy ();
+  virtual ~SpectrumWifiPhy ();
+
+  /**
+   * Set the SpectrumChannel this SpectrumWifiPhy is to be connected to.
+   *
+   * \param channel the SpectrumChannel this SpectrumWifiPhy is to be connected to
+   */
+  void SetChannel (Ptr<SpectrumChannel> channel);
+  /**
+   * Add a channel number to the list of operational channels.  This method
+   * is used to support scanning for strongest base station.
+   *
+   * \param channelNumber the channel number to add
+   */
+  void AddOperationalChannel (uint16_t channelNumber);
+  /**
+   * Return a list of channels to which it may be possible to roam
+   * By default, this method will return the current channel number followed
+   * by any other channel numbers that have been added.
+   *
+   * \return vector of channel numbers to which it may be possible to roam
+   */
+  std::vector<uint16_t> GetOperationalChannelList (void) const;
+  /**
+   * Clear the list of operational channels.
+   */
+  void ClearOperationalChannelList (void);
+
+  /**
+   * Starting receiving the payload of a packet (i.e. the first bit of the packet has arrived).
+   *
+   * \param packet the arriving packet
+   * \param txVector the TXVECTOR of the arriving packet
+   * \param preamble the preamble of the arriving packet
+   * \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,
+                           enum mpduType mpdutype,
+                           Ptr<InterferenceHelper::Event> event);
+
+  /**
+   * Input method for delivering a signal from the spectrum channel
+   * and low-level Phy interface to this SpectrumWifiPhy instance.
+   *
+   * \param rxParams Input signal parameters
+   */
+  void StartRx (Ptr<SpectrumSignalParameters> rxParams);
+  /**
+   * Method to encapsulate the creation of the WifiSpectrumPhyInterface
+   * object (used to bind the WifiSpectrumPhy to a SpectrumChannel) and
+   * to link it to this SpectrumWifiPhy instance
+   *
+   * \param device pointer to the NetDevice object including this new object
+   */
+  void CreateWifiSpectrumPhyInterface (Ptr<NetDevice> device);
+  /**
+   * \return pointer to WifiSpectrumPhyInterface associated with this Phy
+   */
+  Ptr<WifiSpectrumPhyInterface> GetSpectrumPhy (void) const;
+  /**
+   * \param antenna an AntennaModel to include in the transmitted
+   * SpectrumSignalParameters (in case any objects downstream of the
+   * SpectrumWifiPhy wish to adjust signal properties based on the
+   * transmitted antenna model.  This antenna is also used when
+   * the underlying WifiSpectrumPhyInterface::GetRxAntenna() method
+   * is called.
+   *
+   * Note:  this method may be split into separate SetTx and SetRx
+   * methods in the future if the modelling need for this arises
+   */
+  void SetAntenna (Ptr<AntennaModel> antenna);
+  /**
+   * Get the antenna model used for reception
+   *
+   * \return the AntennaModel used for reception
+   */
+  Ptr<AntennaModel> GetRxAntenna (void) const;
+  /**
+   * \return returns the SpectrumModel that this SpectrumPhy expects to be used
+   * for all SpectrumValues that are passed to StartRx. If 0 is
+   * returned, it means that any model will be accepted.
+   */
+  Ptr<const SpectrumModel> GetRxSpectrumModel () const;
+  /**
+   * Callback invoked at the end of a frame reception, to notify whether
+   * the frame was received successfully (true) or not (false)
+   */
+  typedef Callback<void,bool> RxCallback;
+  /**
+   * Set the packet received callback (invoked at the end of a frame
+   * reception), to notify whether the frame was received successfully
+   * or not.
+   *
+   * \param callback the function to hook to the callback
+   */
+  void SetPacketReceivedCallback (RxCallback callback);
+
+  /**
+   * Callback invoked when the Phy model starts to process a signal
+   *
+   * \param signalType Whether signal is WiFi (true) or foreign (false)
+   * \param senderNodeId Node Id of the sender of the signal
+   * \param rxPower received signal power (dBm)
+   * \param duration Signal duration
+   */
+  typedef void (* SignalArrivalCallback) (bool signalType, uint32_t senderNodeId, double rxPower, Time duration);
+
+  virtual void SetReceiveOkCallback (WifiPhy::RxOkCallback callback);
+  virtual void SetReceiveErrorCallback (WifiPhy::RxErrorCallback callback);
+  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);
+  virtual void ResumeFromSleep (void);
+  virtual Ptr<WifiChannel> GetChannel (void) const;
+
+protected:
+  // Inherited
+  virtual void DoDispose (void);
+  virtual void DoInitialize (void);
+  virtual bool DoChannelSwitch (uint16_t id);
+  virtual bool DoFrequencySwitch (uint32_t frequency);
+
+private:
+  /**
+   * The last bit of the packet has arrived.
+   *
+   * \param packet the packet that the last bit has arrived
+   * \param preamble the preamble of the arriving packet
+   * \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, enum mpduType mpdutype, Ptr<InterferenceHelper::Event> event);
+
+  /**
+   * Check if Phy state should move to CCA busy state based on current
+   * state of interference tracker.  In this model, CCA becomes busy when
+   * the aggregation of all signals as tracked by the InterferenceHelper
+   * class is higher than the CcaMode1Threshold
+   */
+  void SwitchMaybeToCcaBusy (void);
+
+  /**
+   * \param centerFrequency center frequency (MHz)
+   * \param channelWidth channel width (MHz) of the channel
+   * \param txPowerW power in W to spread across the bands
+   * \return Ptr to SpectrumValue
+   *
+   * This is a helper function to create the right Tx PSD corresponding
+   * to the standard in use.
+   */
+  Ptr<SpectrumValue> GetTxPowerSpectralDensity (uint32_t centerFrequency, uint32_t channelWidth, double txPowerW) const;
+
+  Ptr<SpectrumChannel> m_channel;        //!< SpectrumChannel that this SpectrumWifiPhy is connected to
+  std::vector<uint16_t> m_operationalChannelList; //!< List of possible channels
+
+  Ptr<WifiSpectrumPhyInterface> m_wifiSpectrumPhyInterface;
+  Ptr<AntennaModel> m_antenna;
+  mutable Ptr<const SpectrumModel> m_rxSpectrumModel;
+  RxCallback m_rxCallback;
+  bool m_disableWifiReception;          //!< forces this Phy to fail to sync on any signal
+  TracedCallback<bool, uint32_t, double, Time> m_signalCb;
+
+};
+
+} //namespace ns3
+
+#endif /* SPECTRUM_WIFI_PHY_H */
diff -Naur ns-3.25/src/wifi/model/sta-wifi-mac.cc ns-3.26/src/wifi/model/sta-wifi-mac.cc
--- ns-3.25/src/wifi/model/sta-wifi-mac.cc	2016-10-03 20:57:08.524245481 -0700
+++ ns-3.26/src/wifi/model/sta-wifi-mac.cc	2016-10-03 19:49:01.817386386 -0700
@@ -27,7 +27,6 @@
 #include "ns3/pointer.h"
 #include "ns3/boolean.h"
 #include "ns3/trace-source-accessor.h"
-#include "qos-tag.h"
 #include "mac-low.h"
 #include "dcf-manager.h"
 #include "mac-rx-middle.h"
@@ -495,19 +494,28 @@
       if (GetSsid ().IsBroadcast ()
           || beacon.GetSsid ().IsEqual (GetSsid ()))
         {
+          NS_LOG_LOGIC ("Beacon is for our SSID");
           goodBeacon = true;
         }
       SupportedRates rates = beacon.GetSupportedRates ();
+      bool bssMembershipSelectorMatch = false;
       for (uint32_t i = 0; i < m_phy->GetNBssMembershipSelectors (); i++)
         {
           uint32_t selector = m_phy->GetBssMembershipSelector (i);
-          if (!rates.IsSupportedRate (selector))
+          if (rates.IsBssMembershipSelectorRate (selector))
             {
-              goodBeacon = false;
+              NS_LOG_LOGIC ("Beacon is matched to our BSS membership selector");
+              bssMembershipSelectorMatch = true;
             }
         }
+      if (m_phy->GetNBssMembershipSelectors () > 0 && bssMembershipSelectorMatch == false)
+        {
+          NS_LOG_LOGIC ("No match for BSS membership selector");
+          goodBeacon = false;
+        }
       if ((IsWaitAssocResp () || IsAssociated ()) && hdr->GetAddr3 () != GetBssid ())
         {
+          NS_LOG_LOGIC ("Beacon is not for us");
           goodBeacon = false;
         }
       if (goodBeacon)
@@ -539,6 +547,15 @@
                   SetSlot (MicroSeconds (20));
                 }
             }
+            if (m_qosSupported)
+            {
+              EdcaParameterSet edcaParameters = beacon.GetEdcaParameterSet ();
+              //The value of the TXOP Limit field is specified as an unsigned integer, with the least significant octet transmitted first, in units of 32 μs.
+              SetEdcaParameters (AC_BE, edcaParameters.GetBeCWmin(), edcaParameters.GetBeCWmax(), edcaParameters.GetBeAifsn(), 32 * MicroSeconds (edcaParameters.GetBeTXOPLimit()));
+              SetEdcaParameters (AC_BK, edcaParameters.GetBkCWmin(), edcaParameters.GetBkCWmax(), edcaParameters.GetBkAifsn(), 32 * MicroSeconds (edcaParameters.GetBkTXOPLimit()));
+              SetEdcaParameters (AC_VI, edcaParameters.GetViCWmin(), edcaParameters.GetViCWmax(), edcaParameters.GetViAifsn(), 32 * MicroSeconds (edcaParameters.GetViTXOPLimit()));
+              SetEdcaParameters (AC_VO, edcaParameters.GetVoCWmin(), edcaParameters.GetVoCWmax(), edcaParameters.GetVoAifsn(), 32 * MicroSeconds (edcaParameters.GetVoTXOPLimit()));
+            }
           m_stationManager->SetShortPreambleEnabled (isShortPreambleEnabled);
           m_stationManager->SetShortSlotTimeEnabled (capabilities.IsShortSlotTime ());
         }
@@ -617,6 +634,7 @@
                       //disable short slot time
                       SetSlot (MicroSeconds (20));
                     }
+                  ConfigureContentionWindow (15, 1023);
                 }
             }
           m_stationManager->SetShortPreambleEnabled (isShortPreambleEnabled);
@@ -682,10 +700,20 @@
                           //disable short slot time
                           SetSlot (MicroSeconds (20));
                         }
+                      ConfigureContentionWindow (15, 1023);
                     }
                 }
               m_stationManager->SetShortPreambleEnabled (isShortPreambleEnabled);
               m_stationManager->SetShortSlotTimeEnabled (capabilities.IsShortSlotTime ());
+              if (m_qosSupported)
+                {
+                  EdcaParameterSet edcaParameters = assocResp.GetEdcaParameterSet ();
+                  //The value of the TXOP Limit field is specified as an unsigned integer, with the least significant octet transmitted first, in units of 32 μs.
+                  SetEdcaParameters (AC_BE, edcaParameters.GetBeCWmin(), edcaParameters.GetBeCWmax(), edcaParameters.GetBeAifsn(), 32 * MicroSeconds (edcaParameters.GetBeTXOPLimit()));
+                  SetEdcaParameters (AC_BK, edcaParameters.GetBkCWmin(), edcaParameters.GetBkCWmax(), edcaParameters.GetBkAifsn(), 32 * MicroSeconds (edcaParameters.GetBkTXOPLimit()));
+                  SetEdcaParameters (AC_VI, edcaParameters.GetViCWmin(), edcaParameters.GetViCWmax(), edcaParameters.GetViAifsn(), 32 * MicroSeconds (edcaParameters.GetViTXOPLimit()));
+                  SetEdcaParameters (AC_VO, edcaParameters.GetVoCWmin(), edcaParameters.GetVoCWmax(), edcaParameters.GetVoAifsn(), 32 * MicroSeconds (edcaParameters.GetVoTXOPLimit()));
+                }
               if (m_htSupported)
                 {
                   HtCapabilities htcapabilities = assocResp.GetHtCapabilities ();
@@ -766,7 +794,7 @@
     {
       for (uint32_t i = 0; i < m_phy->GetNBssMembershipSelectors (); i++)
         {
-          rates.SetBasicRate (m_phy->GetBssMembershipSelector (i));
+          rates.AddBssMembershipSelectorRate (m_phy->GetBssMembershipSelector (i));
         }
     }
   for (uint32_t i = 0; i < m_phy->GetNModes (); i++)
@@ -804,4 +832,14 @@
   m_state = value;
 }
 
+void
+StaWifiMac::SetEdcaParameters (AcIndex ac, uint8_t cwMin, uint8_t cwMax, uint8_t aifsn, Time txopLimit)
+{
+  Ptr<EdcaTxopN> edca = m_edca.find (ac)->second;
+  edca->SetMinCw (cwMin);
+  edca->SetMaxCw (cwMax);
+  edca->SetAifsn (aifsn);
+  edca->SetTxopLimit (txopLimit);
+}
+
 } //namespace ns3
diff -Naur ns-3.25/src/wifi/model/sta-wifi-mac.h ns-3.26/src/wifi/model/sta-wifi-mac.h
--- ns-3.25/src/wifi/model/sta-wifi-mac.h	2016-10-03 20:57:08.524245481 -0700
+++ ns-3.26/src/wifi/model/sta-wifi-mac.h	2016-10-03 19:49:01.818386379 -0700
@@ -172,6 +172,16 @@
    */
   void SetState (enum MacState value);
   /**
+   * Set the EDCA parameters.
+   *
+   * \param ac the access class
+   * \param cwMin the minimum contention window size
+   * \param cwMax the maximum contention window size
+   * \param aifsn the number of slots that make up an AIFS
+   * \param txopLimit the TXOP limit
+   */
+  void SetEdcaParameters (AcIndex ac, uint8_t cwMin, uint8_t cwMax, uint8_t aifsn, Time txopLimit);
+  /**
    * Return the Capability information of the current STA.
    *
    * \return the Capability information that we support
diff -Naur ns-3.25/src/wifi/model/supported-rates.cc ns-3.26/src/wifi/model/supported-rates.cc
--- ns-3.25/src/wifi/model/supported-rates.cc	2016-10-03 20:57:08.525245474 -0700
+++ ns-3.26/src/wifi/model/supported-rates.cc	2016-10-03 19:49:01.819386371 -0700
@@ -26,14 +26,19 @@
 
 NS_LOG_COMPONENT_DEFINE ("SupportedRates");
 
+#define BSS_MEMBERSHIP_SELECTOR_HT_PHY 127
+#define BSS_MEMBERSHIP_SELECTOR_VHT_PHY 126
+
 SupportedRates::SupportedRates ()
   : extended (this),
     m_nRates (0)
 {
+  NS_LOG_FUNCTION (this);
 }
 
 SupportedRates::SupportedRates (const SupportedRates &rates)
 {
+  NS_LOG_FUNCTION (this);
   m_nRates = rates.m_nRates;
   memcpy (m_rates, rates.m_rates, MAX_SUPPORTED_RATES);
   //reset the back pointer to this object
@@ -53,19 +58,40 @@
 void
 SupportedRates::AddSupportedRate (uint32_t bs)
 {
+  NS_LOG_FUNCTION (this << bs);
+  NS_ASSERT_MSG (IsBssMembershipSelectorRate (bs) == false, "Invalid rate");
   NS_ASSERT (m_nRates < MAX_SUPPORTED_RATES);
-  if (IsSupportedRate (bs))
+  if (bs == BSS_MEMBERSHIP_SELECTOR_HT_PHY)
     {
-      return;
+      // Encoding defined in Sec. 8.4.2.3, IEEE 802.11-2012
+      m_rates[m_nRates] = (BSS_MEMBERSHIP_SELECTOR_HT_PHY | 0x80);
+      m_nRates++;
+      NS_LOG_DEBUG ("add HT_PHY membership selector");
+    }
+  else if (bs == BSS_MEMBERSHIP_SELECTOR_VHT_PHY)
+    {
+      // Encoding defined in Sec. 8.4.2.3, IEEE 802.11-2012
+      m_rates[m_nRates] = (BSS_MEMBERSHIP_SELECTOR_VHT_PHY | 0x80);
+      m_nRates++;
+      NS_LOG_DEBUG ("add VHT_PHY membership selector");
+    }
+  else 
+    {
+      if (IsSupportedRate (bs))
+        {
+          return;
+        }
+      m_rates[m_nRates] = bs / 500000;
+      m_nRates++;
+      NS_LOG_DEBUG ("add rate=" << bs << ", n rates=" << (uint32_t)m_nRates);
     }
-  m_rates[m_nRates] = bs / 500000;
-  m_nRates++;
-  NS_LOG_DEBUG ("add rate=" << bs << ", n rates=" << (uint32_t)m_nRates);
 }
 
 void
 SupportedRates::SetBasicRate (uint32_t bs)
 {
+  NS_LOG_FUNCTION (this << bs);
+  NS_ASSERT_MSG (IsBssMembershipSelectorRate (bs) == false, "Invalid rate");
   uint8_t rate = bs / 500000;
   for (uint8_t i = 0; i < m_nRates; i++)
     {
@@ -84,9 +110,31 @@
   SetBasicRate (bs);
 }
 
+void
+SupportedRates::AddBssMembershipSelectorRate (uint32_t bs)
+{
+  NS_LOG_FUNCTION (this << bs);
+  if ((bs != BSS_MEMBERSHIP_SELECTOR_HT_PHY) && (bs != BSS_MEMBERSHIP_SELECTOR_VHT_PHY))
+    {
+      NS_ASSERT_MSG (false, "Value " << bs << " not a BSS Membership Selector");
+    }
+  uint32_t rate = (bs | 0x80); 
+  for (uint8_t i = 0; i < m_nRates; i++)
+    {
+      if (rate == m_rates[i])
+        {
+          return;
+        }
+    }
+  m_rates[m_nRates] = rate;
+  NS_LOG_DEBUG ("add BSS membership selector rate " << bs << " as rate " << m_nRates);
+  m_nRates++;
+}
+
 bool
 SupportedRates::IsBasicRate (uint32_t bs) const
 {
+  NS_LOG_FUNCTION (this << bs);
   uint8_t rate = (bs / 500000) | 0x80;
   for (uint8_t i = 0; i < m_nRates; i++)
     {
@@ -101,6 +149,7 @@
 bool
 SupportedRates::IsSupportedRate (uint32_t bs) const
 {
+  NS_LOG_FUNCTION (this << bs);
   uint8_t rate = bs / 500000;
   for (uint8_t i = 0; i < m_nRates; i++)
     {
@@ -112,6 +161,17 @@
     }
   return false;
 }
+
+bool
+SupportedRates::IsBssMembershipSelectorRate (uint32_t bs) const
+{
+  NS_LOG_FUNCTION (this << bs);
+  if ( (bs & 0x7f) == BSS_MEMBERSHIP_SELECTOR_HT_PHY || (bs & 0x7f) == BSS_MEMBERSHIP_SELECTOR_VHT_PHY)
+    {
+      return true;
+    }
+  return false;
+}
 
 uint8_t
 SupportedRates::GetNRates (void) const
diff -Naur ns-3.25/src/wifi/model/supported-rates.h ns-3.26/src/wifi/model/supported-rates.h
--- ns-3.25/src/wifi/model/supported-rates.h	2016-10-03 20:57:08.525245474 -0700
+++ ns-3.26/src/wifi/model/supported-rates.h	2016-10-03 19:49:01.819386371 -0700
@@ -129,9 +129,17 @@
    * \param bs the rate to be set
    */
   void SetBasicRate (uint32_t bs);
-
   /**
-   * Check if the given rate is supported.
+   * Add a special value to the supported rate set, corresponding to
+   * a BSS membership selector
+   *
+   * \param bs the special membership selector value (not a valid rate)
+   */
+  void AddBssMembershipSelectorRate (uint32_t bs);
+  /**
+   * Check if the given rate is supported.  The rate is encoded as it is
+   * serialized to the Supported Rates Information Element (i.e. as a
+   * multiple of 500 Kbits/sec, possibly with MSB set to 1).
    *
    * \param bs the rate to be checked
    *
@@ -139,14 +147,25 @@
    */
   bool IsSupportedRate (uint32_t bs) const;
   /**
-   * Check if the given rate is a basic rate.
+   * Check if the given rate is a basic rate.  The rate is encoded as it is
+   * serialized to the Supported Rates Information Element (i.e. as a
+   * multiple of 500 Kbits/sec, with MSB set to 1).
    *
    * \param bs the rate to be checked
    *
    * \return true if the rate is a basic rate, false otherwise
    */
   bool IsBasicRate (uint32_t bs) const;
-
+  /**
+   * Check if the given rate is a BSS membership selector value.  The rate
+   * is encoded as it is serialized to the Supporting Rates Information
+   * Element (i.e. with the MSB set to 1).
+   *
+   * \param bs the rate to be checked
+   *
+   * \return true if the rate is a BSS membership selector, false otherwise
+   */
+  bool IsBssMembershipSelectorRate (uint32_t bs) const;
   /**
    * Return the number of supported rates.
    *
@@ -155,6 +174,7 @@
   uint8_t GetNRates (void) const;
   /**
    * Return the rate at the given index.
+   * Return the rate (converted back to raw value) at the given index.
    *
    * \param i the given index
    * \return the rate
diff -Naur ns-3.25/src/wifi/model/vht-capabilities.cc ns-3.26/src/wifi/model/vht-capabilities.cc
--- ns-3.25/src/wifi/model/vht-capabilities.cc	2016-10-03 20:57:08.526245466 -0700
+++ ns-3.26/src/wifi/model/vht-capabilities.cc	2016-10-03 19:49:01.820386364 -0700
@@ -302,7 +302,7 @@
     {
       return true;
     }
-  if (mcs == 8 && m_txMcsMap[0] == 1)
+  if (mcs == 8 && (m_txMcsMap[0] == 1 || m_txMcsMap[0] == 2))
     {
       return true;
     }
@@ -321,7 +321,7 @@
     {
       return true;
     }
-  if (mcs == 8 && m_rxMcsMap[0] == 1)
+  if (mcs == 8 && (m_rxMcsMap[0] == 1 || m_rxMcsMap[0] == 2))
     {
       return true;
     }
diff -Naur ns-3.25/src/wifi/model/wifi-mac.cc ns-3.26/src/wifi/model/wifi-mac.cc
--- ns-3.25/src/wifi/model/wifi-mac.cc	2016-10-03 20:57:08.532245419 -0700
+++ ns-3.26/src/wifi/model/wifi-mac.cc	2016-10-03 19:49:01.826386319 -0700
@@ -408,7 +408,7 @@
 }
 
 void
-WifiMac::ConfigureDcf (Ptr<Dcf> dcf, uint32_t cwmin, uint32_t cwmax, enum AcIndex ac)
+WifiMac::ConfigureDcf (Ptr<Dcf> dcf, uint32_t cwmin, uint32_t cwmax, bool isDsss, enum AcIndex ac)
 {
   /* see IEE802.11 section 7.3.2.29 */
   switch (ac)
@@ -417,26 +417,45 @@
       dcf->SetMinCw ((cwmin + 1) / 4 - 1);
       dcf->SetMaxCw ((cwmin + 1) / 2 - 1);
       dcf->SetAifsn (2);
+      if (isDsss)
+        {
+          dcf->SetTxopLimit (MicroSeconds (3264));
+        }
+      else
+        {
+          dcf->SetTxopLimit (MicroSeconds (1504));
+        }
       break;
     case AC_VI:
       dcf->SetMinCw ((cwmin + 1) / 2 - 1);
       dcf->SetMaxCw (cwmin);
       dcf->SetAifsn (2);
+      if (isDsss)
+        {
+          dcf->SetTxopLimit (MicroSeconds (6016));
+        }
+      else
+        {
+          dcf->SetTxopLimit (MicroSeconds (3008));
+        }
       break;
     case AC_BE:
       dcf->SetMinCw (cwmin);
       dcf->SetMaxCw (cwmax);
       dcf->SetAifsn (3);
+      dcf->SetTxopLimit (MicroSeconds (0));
       break;
     case AC_BK:
       dcf->SetMinCw (cwmin);
       dcf->SetMaxCw (cwmax);
       dcf->SetAifsn (7);
+      dcf->SetTxopLimit (MicroSeconds (0));
       break;
     case AC_BE_NQOS:
       dcf->SetMinCw (cwmin);
       dcf->SetMaxCw (cwmax);
       dcf->SetAifsn (2);
+      dcf->SetTxopLimit (MicroSeconds (0));
       break;
     case AC_UNDEF:
       NS_FATAL_ERROR ("I don't know what to do with this");
diff -Naur ns-3.25/src/wifi/model/wifi-mac.h ns-3.26/src/wifi/model/wifi-mac.h
--- ns-3.25/src/wifi/model/wifi-mac.h	2016-10-03 20:57:08.532245419 -0700
+++ ns-3.26/src/wifi/model/wifi-mac.h	2016-10-03 19:49:01.826386319 -0700
@@ -308,11 +308,12 @@
    * \param dcf the DCF to be configured
    * \param cwmin the minimum congestion window for the DCF
    * \param cwmax the maximum congestion window for the DCF
+   * \param isDsss flag to indicate whether PHY is DSSS or HR/DSSS
    * \param ac the access category for the DCF
    *
    * Configure the DCF with appropriate values depending on the given access category.
    */
-  void ConfigureDcf (Ptr<Dcf> dcf, uint32_t cwmin, uint32_t cwmax, enum AcIndex ac);
+  void ConfigureDcf (Ptr<Dcf> dcf, uint32_t cwmin, uint32_t cwmax, bool isDsss, enum AcIndex ac);
 
 
 private:
diff -Naur ns-3.25/src/wifi/model/wifi-mac-queue.cc ns-3.26/src/wifi/model/wifi-mac-queue.cc
--- ns-3.25/src/wifi/model/wifi-mac-queue.cc	2016-10-03 20:57:08.530245435 -0700
+++ ns-3.26/src/wifi/model/wifi-mac-queue.cc	2016-10-03 19:49:01.824386334 -0700
@@ -23,6 +23,7 @@
 #include "ns3/simulator.h"
 #include "ns3/packet.h"
 #include "ns3/uinteger.h"
+#include "ns3/enum.h"
 #include "wifi-mac-queue.h"
 #include "qos-blocked-destinations.h"
 
@@ -54,6 +55,11 @@
                    TimeValue (MilliSeconds (500.0)),
                    MakeTimeAccessor (&WifiMacQueue::m_maxDelay),
                    MakeTimeChecker ())
+    .AddAttribute ("DropPolicy", "Upon enqueue with full queue, drop oldest (DropOldest) or newest (DropNewest) packet",
+                   EnumValue (DROP_NEWEST),
+                   MakeEnumAccessor (&WifiMacQueue::m_dropPolicy),
+                   MakeEnumChecker (WifiMacQueue::DROP_OLDEST, "DropOldest",
+                                    WifiMacQueue::DROP_NEWEST, "DropNewest"))
   ;
   return tid;
 }
@@ -98,7 +104,15 @@
   Cleanup ();
   if (m_size == m_maxSize)
     {
-      return;
+      if (m_dropPolicy == DROP_NEWEST)
+        {
+          return;
+        }
+      else if (m_dropPolicy == DROP_OLDEST)
+        {
+          m_queue.pop_front ();
+          m_size--;
+        }
     }
   Time now = Simulator::Now ();
   m_queue.push_back (Item (packet, hdr, now));
diff -Naur ns-3.25/src/wifi/model/wifi-mac-queue.h ns-3.26/src/wifi/model/wifi-mac-queue.h
--- ns-3.25/src/wifi/model/wifi-mac-queue.h	2016-10-03 20:57:08.531245427 -0700
+++ ns-3.26/src/wifi/model/wifi-mac-queue.h	2016-10-03 19:49:01.825386327 -0700
@@ -55,6 +55,12 @@
   WifiMacQueue ();
   ~WifiMacQueue ();
 
+  enum DropPolicy
+  {
+    DROP_NEWEST,
+    DROP_OLDEST
+  };
+
   /**
    * Set the maximum queue size.
    *
@@ -271,6 +277,7 @@
   uint32_t m_size;     //!< Current queue size
   uint32_t m_maxSize;  //!< Queue capacity
   Time m_maxDelay;     //!< Time to live for packets in the queue
+  enum DropPolicy m_dropPolicy; //!< Drop behavior of queue
 };
 
 } //namespace ns3
diff -Naur ns-3.25/src/wifi/model/wifi-mode.cc ns-3.26/src/wifi/model/wifi-mode.cc
--- ns-3.25/src/wifi/model/wifi-mode.cc	2016-10-03 20:57:08.533245412 -0700
+++ ns-3.26/src/wifi/model/wifi-mode.cc	2016-10-03 19:49:01.827386311 -0700
@@ -112,34 +112,35 @@
   NS_ASSERT (nss <= 4);
   struct WifiModeFactory::WifiModeItem *item = WifiModeFactory::GetFactory ()->Get (m_uid);
   uint64_t dataRate = 0;
+  uint32_t usableSubCarriers = 0;
+  double symbolRate = 0;
+  double codingRate = 0;
+  uint32_t numberOfBitsPerSubcarrier = log2 (GetConstellationSize ());
   if (item->modClass == WIFI_MOD_CLASS_DSSS)
     {
-      dataRate = (11000000 / 11) * log2 (GetConstellationSize ());
+      dataRate = ((11000000 / 11) * numberOfBitsPerSubcarrier);
     }
   else if (item->modClass == WIFI_MOD_CLASS_HR_DSSS)
     {
-      dataRate = (11000000 / 8) * log2 (GetConstellationSize ());
+      dataRate = ((11000000 / 8) * numberOfBitsPerSubcarrier);
     }
   else if (item->modClass == WIFI_MOD_CLASS_OFDM || item->modClass == WIFI_MOD_CLASS_ERP_OFDM)
     {
-      double symbolRate = (1 / 4.0) * 1e6;
-
-      uint32_t usableSubCarriers;
+      usableSubCarriers = 48;
       switch (channelWidth)
         {
         case 20:
         default:
-          usableSubCarriers = 48;
+          symbolRate = (1 / 4.0) * 1e6;
           break;
         case 10:
-          usableSubCarriers = 24;
+          symbolRate = (1 / 8.0) * 1e6;
           break;
         case 5:
-          usableSubCarriers = 12;
+          symbolRate = (1 / 16.0) * 1e6;
           break;
         }
 
-      double codingRate;
       switch (GetCodeRate ())
         {
         case WIFI_CODE_RATE_3_4:
@@ -157,23 +158,19 @@
           break;
         }
 
-      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->modClass == WIFI_MOD_CLASS_VHT && item->mcsValue == 9 && nss != 3)
         {
-          //VHT MCS 9 forbidden at 20 MHz (only allowed when NSS = 3)
-          NS_ASSERT (channelWidth != 20);
+          NS_ASSERT_MSG (channelWidth != 20, "VHT MCS 9 forbidden at 20 MHz (only allowed when NSS = 3)");
         }
       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);
+          NS_ASSERT_MSG (channelWidth != 80, "VHT MCS 6 forbidden at 80 MHz when NSS = 3");
         }
-      double symbolRate;
+
       if (!isShortGuardInterval)
         {
           symbolRate = (1 / 4.0) * 1e6;
@@ -183,7 +180,6 @@
           symbolRate = (1 / 3.6) * 1e6;
         }
 
-      uint32_t usableSubCarriers;
       switch (channelWidth)
         {
         case 20:
@@ -201,7 +197,6 @@
           break;
         }
 
-      double codingRate;
       switch (GetCodeRate ())
         {
         case WIFI_CODE_RATE_5_6:
@@ -222,8 +217,6 @@
           break;
         }
 
-      uint32_t numberOfBitsPerSubcarrier = log2 (GetConstellationSize ());
-
       dataRate = lrint (ceil (symbolRate * usableSubCarriers * numberOfBitsPerSubcarrier * codingRate));
     }
   else
diff -Naur ns-3.25/src/wifi/model/wifi-mode.h ns-3.26/src/wifi/model/wifi-mode.h
--- ns-3.25/src/wifi/model/wifi-mode.h	2016-10-03 20:57:08.534245404 -0700
+++ ns-3.26/src/wifi/model/wifi-mode.h	2016-10-03 19:49:01.828386304 -0700
@@ -209,6 +209,7 @@
 
 private:
   friend class WifiModeFactory;
+  friend class WifiPhyTag; // access the UID-based constructor
   /**
    * Create a WifiMode from a given unique ID.
    *
diff -Naur ns-3.25/src/wifi/model/wifi-net-device.cc ns-3.26/src/wifi/model/wifi-net-device.cc
--- ns-3.25/src/wifi/model/wifi-net-device.cc	2016-10-03 20:57:08.534245404 -0700
+++ ns-3.26/src/wifi/model/wifi-net-device.cc	2016-10-03 19:49:01.828386304 -0700
@@ -19,12 +19,14 @@
  */
 
 #include "wifi-net-device.h"
-#include "wifi-mac.h"
+#include "regular-wifi-mac.h"
 #include "wifi-phy.h"
 #include "wifi-remote-station-manager.h"
 #include "wifi-channel.h"
+#include "qos-utils.h"
 #include "ns3/llc-snap-header.h"
 #include "ns3/packet.h"
+#include "ns3/socket.h"
 #include "ns3/uinteger.h"
 #include "ns3/pointer.h"
 #include "ns3/node.h"
@@ -94,6 +96,7 @@
   m_mac = 0;
   m_phy = 0;
   m_stationManager = 0;
+  m_queueInterface = 0;
   NetDevice::DoDispose ();
 }
 
@@ -128,6 +131,42 @@
 }
 
 void
+WifiNetDevice::NotifyNewAggregate (void)
+{
+  NS_LOG_FUNCTION (this);
+  if (m_queueInterface == 0)
+    {
+      Ptr<NetDeviceQueueInterface> ndqi = this->GetObject<NetDeviceQueueInterface> ();
+      //verify that it's a valid netdevice queue interface and that
+      //the netdevice queue interface was not set before
+      if (ndqi != 0)
+        {
+          m_queueInterface = ndqi;
+          if (m_mac == 0)
+            {
+              NS_LOG_WARN ("A mac has not been installed yet, using a single tx queue");
+            }
+          else
+            {
+              Ptr<RegularWifiMac> mac = DynamicCast<RegularWifiMac> (m_mac);
+              if (mac != 0)
+                {
+                  BooleanValue qosSupported;
+                  mac->GetAttributeFailSafe ("QosSupported", qosSupported);
+                  if (qosSupported.Get ())
+                    {
+                      m_queueInterface->SetTxQueuesN (4);
+                      // register the select queue callback
+                      m_queueInterface->SetSelectQueueCallback (MakeCallback (&WifiNetDevice::SelectQueue, this));
+                    }
+                }
+            }
+        }
+    }
+  NetDevice::NotifyNewAggregate ();
+}
+
+void
 WifiNetDevice::SetMac (Ptr<WifiMac> mac)
 {
   m_mac = mac;
@@ -275,6 +314,7 @@
 bool
 WifiNetDevice::Send (Ptr<Packet> packet, const Address& dest, uint16_t protocolNumber)
 {
+  NS_LOG_FUNCTION (this << packet << dest << protocolNumber);
   NS_ASSERT (Mac48Address::IsMatchingType (dest));
 
   Mac48Address realTo = Mac48Address::ConvertFrom (dest);
@@ -316,6 +356,7 @@
 void
 WifiNetDevice::ForwardUp (Ptr<Packet> packet, Mac48Address from, Mac48Address to)
 {
+  NS_LOG_FUNCTION (this << packet << from << to);
   LlcSnapHeader llc;
   enum NetDevice::PacketType type;
   if (to.IsBroadcast ())
@@ -370,6 +411,7 @@
 bool
 WifiNetDevice::SendFrom (Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocolNumber)
 {
+  NS_LOG_FUNCTION (this << packet << source << dest << protocolNumber);
   NS_ASSERT (Mac48Address::IsMatchingType (dest));
   NS_ASSERT (Mac48Address::IsMatchingType (source));
 
@@ -399,4 +441,36 @@
   return m_mac->SupportsSendFrom ();
 }
 
+uint8_t
+WifiNetDevice::SelectQueue (Ptr<QueueItem> item) const
+{
+  NS_LOG_FUNCTION (this << item);
+
+  NS_ASSERT (m_queueInterface != 0);
+
+  if (m_queueInterface->GetNTxQueues () == 1)
+    {
+      return 0;
+    }
+
+  uint8_t dscp, priority = 0;
+  if (item->GetUint8Value (QueueItem::IP_DSFIELD, dscp))
+    {
+      // if the QoS map element is implemented, it should be used here
+      // to set the priority.
+      // User priority is set to the three most significant bits of the DS field
+      priority = dscp >> 5;
+    }
+
+  // replace the priority tag
+  SocketPriorityTag priorityTag;
+  priorityTag.SetPriority (priority);
+  item->GetPacket ()->ReplacePacketTag (priorityTag);
+
+  // if the admission control were implemented, here we should check whether
+  // the access category assigned to the packet should be downgraded
+
+  return QosUtilsMapTidToAc (priority);
+}
+
 } //namespace ns3
diff -Naur ns-3.25/src/wifi/model/wifi-net-device.h ns-3.26/src/wifi/model/wifi-net-device.h
--- ns-3.25/src/wifi/model/wifi-net-device.h	2016-10-03 20:57:08.535245396 -0700
+++ ns-3.26/src/wifi/model/wifi-net-device.h	2016-10-03 19:49:01.829386297 -0700
@@ -114,6 +114,7 @@
 protected:
   virtual void DoDispose (void);
   virtual void DoInitialize (void);
+  virtual void NotifyNewAggregate (void);
   /**
    * Receive a packet from the lower layer and pass the
    * packet up the stack.
@@ -150,10 +151,54 @@
    */
   void CompleteConfig (void);
 
+  /**
+   * \brief Determine the tx queue for a given packet
+   * \param item the packet
+   *
+   * Modelled after the Linux function ieee80211_select_queue (net/mac80211/wme.c).
+   * A SocketPriority tag is attached to the packet (or the existing one is
+   * replaced) to carry the user priority, which is set to the three most
+   * significant bits of the DS field (TOS field in case of IPv4 and Traffic
+   * Class field in case of IPv6). The Access Category corresponding to the
+   * user priority according to the QosUtilsMapTidToAc function is returned.
+   *
+   * The following table shows the mapping for the Diffserv Per Hop Behaviors.
+   *
+   * PHB  | TOS (binary) | UP  | Access Category
+   * -----|--------------|-----|-----------------
+   * EF   |   101110xx   |  5  |     AC_VI
+   * AF11 |   001010xx   |  1  |     AC_BK
+   * AF21 |   010010xx   |  2  |     AC_BK
+   * AF31 |   011010xx   |  3  |     AC_BE
+   * AF41 |   100010xx   |  4  |     AC_VI
+   * AF12 |   001100xx   |  1  |     AC_BK
+   * AF22 |   010100xx   |  2  |     AC_BK
+   * AF32 |   011100xx   |  3  |     AC_BE
+   * AF42 |   100100xx   |  4  |     AC_VI
+   * AF13 |   001110xx   |  1  |     AC_BK
+   * AF23 |   010110xx   |  2  |     AC_BK
+   * AF33 |   011110xx   |  3  |     AC_BE
+   * AF43 |   100110xx   |  4  |     AC_VI
+   * CS0  |   000000xx   |  0  |     AC_BE
+   * CS1  |   001000xx   |  1  |     AC_BK
+   * CS2  |   010000xx   |  2  |     AC_BK
+   * CS3  |   011000xx   |  3  |     AC_BE
+   * CS4  |   100000xx   |  4  |     AC_VI
+   * CS5  |   101000xx   |  5  |     AC_VI
+   * CS6  |   110000xx   |  6  |     AC_VO
+   * CS7  |   111000xx   |  7  |     AC_VO
+   *
+   * This method is called by the traffic control layer before enqueuing a
+   * packet in the queue disc, if a queue disc is installed on the outgoing
+   * device, or passing a packet to the device, otherwise.
+   */
+  uint8_t SelectQueue (Ptr<QueueItem> item) const;
+
   Ptr<Node> m_node;
   Ptr<WifiPhy> m_phy;
   Ptr<WifiMac> m_mac;
   Ptr<WifiRemoteStationManager> m_stationManager;
+  Ptr<NetDeviceQueueInterface> m_queueInterface;   //!< NetDevice queue interface
   NetDevice::ReceiveCallback m_forwardUp;
   NetDevice::PromiscReceiveCallback m_promiscRx;
 
diff -Naur ns-3.25/src/wifi/model/wifi-phy.cc ns-3.26/src/wifi/model/wifi-phy.cc
--- ns-3.25/src/wifi/model/wifi-phy.cc	2016-10-03 20:57:08.538245373 -0700
+++ ns-3.26/src/wifi/model/wifi-phy.cc	2016-10-03 19:49:01.833386267 -0700
@@ -23,14 +23,17 @@
 #include "wifi-mode.h"
 #include "wifi-channel.h"
 #include "wifi-preamble.h"
+#include "wifi-phy-state-helper.h"
 #include "ns3/simulator.h"
-#include "ns3/packet.h"
 #include "ns3/assert.h"
 #include "ns3/log.h"
+#include "ns3/boolean.h"
 #include "ns3/double.h"
 #include "ns3/uinteger.h"
 #include "ns3/enum.h"
+#include "ns3/pointer.h"
 #include "ns3/trace-source-accessor.h"
+#include "ns3/fatal-error.h"
 #include <cmath>
 
 namespace ns3 {
@@ -51,12 +54,243 @@
 
 NS_OBJECT_ENSURE_REGISTERED (WifiPhy);
 
+/**
+ * This table maintains the mapping of valid ChannelNumber to
+ * Frequency/ChannelWidth pairs.  If you want to make a channel applicable
+ * to all standards, then you may use the WIFI_PHY_STANDARD_UNSPECIFIED
+ * standard to represent this, as a wildcard.  If you want to limit the 
+ * configuration of a particular channel/frequency/width to a particular 
+ * standard(s), then you can specify one or more such bindings. 
+ */
+WifiPhy::ChannelToFrequencyWidthMap WifiPhy::m_channelToFrequencyWidth =
+{
+  // 802.11b uses width of 22, while OFDM modes use width of 20
+  { std::make_pair (1, WIFI_PHY_STANDARD_80211b), std::make_pair (2412, 22) },
+  { std::make_pair (1, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (2412, 20) },
+  { std::make_pair (2, WIFI_PHY_STANDARD_80211b), std::make_pair (2417, 22) },
+  { std::make_pair (2, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (2417, 20) },
+  { std::make_pair (3, WIFI_PHY_STANDARD_80211b), std::make_pair (2422, 22) },
+  { std::make_pair (3, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (2422, 20) },
+  { std::make_pair (4, WIFI_PHY_STANDARD_80211b), std::make_pair (2427, 22) },
+  { std::make_pair (4, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (2427, 20) },
+  { std::make_pair (5, WIFI_PHY_STANDARD_80211b), std::make_pair (2432, 22) },
+  { std::make_pair (5, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (2432, 20) },
+  { std::make_pair (6, WIFI_PHY_STANDARD_80211b), std::make_pair (2437, 22) },
+  { std::make_pair (6, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (2437, 20) },
+  { std::make_pair (7, WIFI_PHY_STANDARD_80211b), std::make_pair (2442, 22) },
+  { std::make_pair (7, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (2442, 20) },
+  { std::make_pair (8, WIFI_PHY_STANDARD_80211b), std::make_pair (2447, 22) },
+  { std::make_pair (8, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (2447, 20) },
+  { std::make_pair (9, WIFI_PHY_STANDARD_80211b), std::make_pair (2452, 22) },
+  { std::make_pair (9, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (2452, 20) },
+  { std::make_pair (10, WIFI_PHY_STANDARD_80211b), std::make_pair (2457, 22) },
+  { std::make_pair (10, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (2457, 20) },
+  { std::make_pair (11, WIFI_PHY_STANDARD_80211b), std::make_pair (2462, 22) },
+  { std::make_pair (11, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (2462, 20) },
+  { std::make_pair (12, WIFI_PHY_STANDARD_80211b), std::make_pair (2467, 22) },
+  { std::make_pair (12, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (2467, 20) },
+  { std::make_pair (13, WIFI_PHY_STANDARD_80211b), std::make_pair (2472, 22) },
+  { std::make_pair (13, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (2472, 20) },
+  // Only defined for 802.11b
+  { std::make_pair (14, WIFI_PHY_STANDARD_80211b), std::make_pair (2484, 22) },
+
+  // Now the 5GHz channels; UNSPECIFIED for 802.11a/n channels, but limited
+  // to 802.11ac for the 80/160 MHz channels
+  // 20 MHz channels
+  { std::make_pair (36, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5180, 20) },
+  { std::make_pair (40, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5200, 20) },
+  { std::make_pair (44, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5220, 20) },
+  { std::make_pair (48, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5240, 20) },
+  { std::make_pair (52, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5260, 20) },
+  { std::make_pair (56, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5280, 20) },
+  { std::make_pair (60, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5300, 20) },
+  { std::make_pair (64, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5320, 20) },
+  { std::make_pair (100, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5500, 20) },
+  { std::make_pair (104, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5520, 20) },
+  { std::make_pair (108, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5540, 20) },
+  { std::make_pair (112, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5560, 20) },
+  { std::make_pair (116, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5580, 20) },
+  { std::make_pair (120, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5600, 20) },
+  { std::make_pair (124, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5620, 20) },
+  { std::make_pair (128, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5640, 20) },
+  { std::make_pair (132, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5660, 20) },
+  { std::make_pair (136, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5680, 20) },
+  { std::make_pair (140, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5700, 20) },
+  { std::make_pair (144, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5720, 20) },
+  { std::make_pair (149, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5745, 20) },
+  { std::make_pair (153, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5765, 20) },
+  { std::make_pair (157, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5785, 20) },
+  { std::make_pair (161, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5805, 20) },
+  { std::make_pair (165, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5825, 20) },
+  // 40 MHz channels
+  { std::make_pair (38, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5190, 40) },
+  { std::make_pair (46, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5230, 40) },
+  { std::make_pair (54, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5230, 40) },
+  { std::make_pair (62, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5310, 40) },
+  { std::make_pair (102, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5510, 40) },
+  { std::make_pair (110, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5550, 40) },
+  { std::make_pair (118, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5590, 40) },
+  { std::make_pair (126, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5590, 40) },
+  { std::make_pair (134, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5670, 40) },
+  { std::make_pair (142, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5710, 40) },
+  { std::make_pair (151, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5755, 40) },
+  { std::make_pair (159, WIFI_PHY_STANDARD_UNSPECIFIED), std::make_pair (5795, 40) },
+  // 80 MHz channels
+  { std::make_pair (42, WIFI_PHY_STANDARD_80211ac), std::make_pair (5210, 80) },
+  { std::make_pair (58, WIFI_PHY_STANDARD_80211ac), std::make_pair (5290, 80) },
+  { std::make_pair (106, WIFI_PHY_STANDARD_80211ac), std::make_pair (5530, 80) },
+  { std::make_pair (122, WIFI_PHY_STANDARD_80211ac), std::make_pair (5610, 80) },
+  { std::make_pair (138, WIFI_PHY_STANDARD_80211ac), std::make_pair (5690, 80) },
+  { std::make_pair (155, WIFI_PHY_STANDARD_80211ac), std::make_pair (5775, 80) },
+  // 160 MHz channels
+  { std::make_pair (50, WIFI_PHY_STANDARD_80211ac), std::make_pair (5250, 160) },
+  { std::make_pair (114, WIFI_PHY_STANDARD_80211ac), std::make_pair (5570, 160) },
+
+  // 802.11p (10 MHz channels at the 5.855-5.925 band 
+  { std::make_pair (172, WIFI_PHY_STANDARD_80211_10MHZ), std::make_pair (5860, 10) },
+  { std::make_pair (174, WIFI_PHY_STANDARD_80211_10MHZ), std::make_pair (5870, 10) },
+  { std::make_pair (176, WIFI_PHY_STANDARD_80211_10MHZ), std::make_pair (5880, 10) },
+  { std::make_pair (178, WIFI_PHY_STANDARD_80211_10MHZ), std::make_pair (5890, 10) },
+  { std::make_pair (180, WIFI_PHY_STANDARD_80211_10MHZ), std::make_pair (5900, 10) },
+  { std::make_pair (182, WIFI_PHY_STANDARD_80211_10MHZ), std::make_pair (5910, 10) },
+  { std::make_pair (184, WIFI_PHY_STANDARD_80211_10MHZ), std::make_pair (5920, 10) }
+};
+
 TypeId
 WifiPhy::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::WifiPhy")
     .SetParent<Object> ()
     .SetGroupName ("Wifi")
+    .AddAttribute ("Frequency",
+                   "The operating center frequency (MHz)",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&WifiPhy::GetFrequency,
+                                         &WifiPhy::SetFrequency),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("ChannelWidth",
+                   "Whether 5MHz, 10MHz, 20MHz, 22MHz, 40MHz, 80 MHz or 160 MHz.",
+                   UintegerValue (20),
+                   MakeUintegerAccessor (&WifiPhy::GetChannelWidth,
+                                         &WifiPhy::SetChannelWidth),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("ChannelNumber",
+                   "If set to non-zero defined value, will control Frequency and ChannelWidth assignment",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&WifiPhy::SetChannelNumber,
+                                         &WifiPhy::GetChannelNumber),
+                   MakeUintegerChecker<uint16_t> ())
+    .AddAttribute ("EnergyDetectionThreshold",
+                   "The energy of a received signal should be higher than "
+                   "this threshold (dbm) to allow the PHY layer to detect the signal.",
+                   DoubleValue (-96.0),
+                   MakeDoubleAccessor (&WifiPhy::SetEdThreshold,
+                                       &WifiPhy::GetEdThreshold),
+                   MakeDoubleChecker<double> ())
+    .AddAttribute ("CcaMode1Threshold",
+                   "The energy of a received signal should be higher than "
+                   "this threshold (dbm) to allow the PHY layer to declare CCA BUSY state.",
+                   DoubleValue (-99.0),
+                   MakeDoubleAccessor (&WifiPhy::SetCcaMode1Threshold,
+                                       &WifiPhy::GetCcaMode1Threshold),
+                   MakeDoubleChecker<double> ())
+    .AddAttribute ("TxGain",
+                   "Transmission gain (dB).",
+                   DoubleValue (1.0),
+                   MakeDoubleAccessor (&WifiPhy::SetTxGain,
+                                       &WifiPhy::GetTxGain),
+                   MakeDoubleChecker<double> ())
+    .AddAttribute ("RxGain",
+                   "Reception gain (dB).",
+                   DoubleValue (1.0),
+                   MakeDoubleAccessor (&WifiPhy::SetRxGain,
+                                       &WifiPhy::GetRxGain),
+                   MakeDoubleChecker<double> ())
+    .AddAttribute ("TxPowerLevels",
+                   "Number of transmission power levels available between "
+                   "TxPowerStart and TxPowerEnd included.",
+                   UintegerValue (1),
+                   MakeUintegerAccessor (&WifiPhy::m_nTxPower),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("TxPowerEnd",
+                   "Maximum available transmission level (dbm).",
+                   DoubleValue (16.0206),
+                   MakeDoubleAccessor (&WifiPhy::SetTxPowerEnd,
+                                       &WifiPhy::GetTxPowerEnd),
+                   MakeDoubleChecker<double> ())
+    .AddAttribute ("TxPowerStart",
+                   "Minimum available transmission level (dbm).",
+                   DoubleValue (16.0206),
+                   MakeDoubleAccessor (&WifiPhy::SetTxPowerStart,
+                                       &WifiPhy::GetTxPowerStart),
+                   MakeDoubleChecker<double> ())
+    .AddAttribute ("RxNoiseFigure",
+                   "Loss (dB) in the Signal-to-Noise-Ratio due to non-idealities in the receiver."
+                   " According to Wikipedia (http://en.wikipedia.org/wiki/Noise_figure), this is "
+                   "\"the difference in decibels (dB) between"
+                   " the noise output of the actual receiver to the noise output of an "
+                   " ideal receiver with the same overall gain and bandwidth when the receivers "
+                   " are connected to sources at the standard noise temperature T0 (usually 290 K)\".",
+                   DoubleValue (7),
+                   MakeDoubleAccessor (&WifiPhy::SetRxNoiseFigure,
+                                       &WifiPhy::GetRxNoiseFigure),
+                   MakeDoubleChecker<double> ())
+    .AddAttribute ("State",
+                   "The state of the PHY layer.",
+                   PointerValue (),
+                   MakePointerAccessor (&WifiPhy::m_state),
+                   MakePointerChecker<WifiPhyStateHelper> ())
+    .AddAttribute ("ChannelSwitchDelay",
+                   "Delay between two short frames transmitted on different frequencies.",
+                   TimeValue (MicroSeconds (250)),
+                   MakeTimeAccessor (&WifiPhy::m_channelSwitchDelay),
+                   MakeTimeChecker ())
+    .AddAttribute ("TxAntennas",
+                   "The number of supported Tx antennas.",
+                   UintegerValue (1),
+                   MakeUintegerAccessor (&WifiPhy::GetNumberOfTransmitAntennas,
+                                         &WifiPhy::SetNumberOfTransmitAntennas),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("RxAntennas",
+                   "The number of supported Rx antennas.",
+                   UintegerValue (1),
+                   MakeUintegerAccessor (&WifiPhy::GetNumberOfReceiveAntennas,
+                                         &WifiPhy::SetNumberOfReceiveAntennas),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("ShortGuardEnabled",
+                   "Whether or not short guard interval is enabled."
+                   "This parameter is only valuable for 802.11n/ac STAs and APs.",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&WifiPhy::GetGuardInterval,
+                                        &WifiPhy::SetGuardInterval),
+                   MakeBooleanChecker ())
+    .AddAttribute ("LdpcEnabled",
+                   "Whether or not LDPC is enabled.",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&WifiPhy::GetLdpc,
+                                        &WifiPhy::SetLdpc),
+                   MakeBooleanChecker ())
+    .AddAttribute ("STBCEnabled",
+                   "Whether or not STBC is enabled.",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&WifiPhy::GetStbc,
+                                        &WifiPhy::SetStbc),
+                   MakeBooleanChecker ())
+    .AddAttribute ("GreenfieldEnabled",
+                   "Whether or not Greenfield is enabled."
+                   "This parameter is only valuable for 802.11n STAs and APs.",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&WifiPhy::GetGreenfield,
+                                        &WifiPhy::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 (&WifiPhy::GetShortPlcpPreambleSupported,
+                                        &WifiPhy::SetShortPlcpPreambleSupported),
+                   MakeBooleanChecker ())
     .AddTraceSource ("PhyTxBegin",
                      "Trace source indicating a packet "
                      "has begun transmitting over the channel medium",
@@ -66,7 +300,7 @@
                      "Trace source indicating a packet "
                      "has been completely transmitted over the channel. "
                      "NOTE: the only official WifiPhy implementation "
-                     "available to this date (YansWifiPhy) never fires "
+                     "available to this date never fires "
                      "this trace source.",
                      MakeTraceSourceAccessor (&WifiPhy::m_phyTxEndTrace),
                      "ns3::Packet::TracedCallback")
@@ -107,10 +341,25 @@
 }
 
 WifiPhy::WifiPhy ()
+  : m_mpdusNum (0),
+    m_plcpSuccess (false),
+    m_txMpduReferenceNumber (0xffffffff),
+    m_rxMpduReferenceNumber (0xffffffff),
+    m_endRxEvent (),
+    m_endPlcpRxEvent (),
+    m_standard (WIFI_PHY_STANDARD_UNSPECIFIED),
+    m_isConstructed (false),
+    m_channelCenterFrequency (0),
+    m_initialFrequency (0),
+    m_frequencyChannelNumberInitialized (false),
+    m_channelNumber (0),
+    m_initialChannelNumber (0),
+    m_totalAmpduSize (0),
+    m_totalAmpduNumSymbols (0)
 {
   NS_LOG_FUNCTION (this);
-  m_totalAmpduSize = 0;
-  m_totalAmpduNumSymbols = 0;
+  m_random = CreateObject<UniformRandomVariable> ();
+  m_state = CreateObject<WifiPhyStateHelper> ();
 }
 
 WifiPhy::~WifiPhy ()
@@ -118,6 +367,982 @@
   NS_LOG_FUNCTION (this);
 }
 
+void
+WifiPhy::DoDispose (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_device = 0;
+  m_mobility = 0;
+  m_state = 0;
+  m_deviceRateSet.clear ();
+  m_deviceMcsSet.clear ();
+}
+
+void 
+WifiPhy::DoInitialize (void)
+{
+  NS_LOG_FUNCTION (this); 
+  m_isConstructed = true;
+  if (m_frequencyChannelNumberInitialized == true)
+    {
+      NS_LOG_DEBUG ("Frequency already initialized");
+      return;
+    }
+  InitializeFrequencyChannelNumber ();
+}
+
+void
+WifiPhy::InitializeFrequencyChannelNumber (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  NS_ASSERT_MSG (m_frequencyChannelNumberInitialized == false, "Initialization called twice");
+
+  // If frequency has been set to a non-zero value during attribute
+  // construction phase, the frequency and channel width will drive the
+  // initial configuration.  If frequency has not been set, but both
+  // standard and channel number have been set, that pair will instead
+  // drive the configuration, and frequency and channel number will be 
+  // aligned
+  if (m_initialFrequency != 0)
+    {
+      SetFrequency (m_initialFrequency);
+    }
+  else if (m_initialChannelNumber != 0 && GetStandard () != WIFI_PHY_STANDARD_UNSPECIFIED)
+    {
+      SetChannelNumber (m_initialChannelNumber);
+    }
+  else if (m_initialChannelNumber != 0 && GetStandard () == WIFI_PHY_STANDARD_UNSPECIFIED)
+    {
+      NS_FATAL_ERROR ("Error, ChannelNumber " << GetChannelNumber () << " was set by user, but neither a standard nor a frequency");
+    }
+  m_frequencyChannelNumberInitialized = true;
+}
+
+void
+WifiPhy::SetEdThreshold (double threshold)
+{
+  NS_LOG_FUNCTION (this << threshold);
+  m_edThresholdW = DbmToW (threshold);
+}
+
+double
+WifiPhy::GetEdThresholdW (void) const
+{
+  return m_edThresholdW;
+}
+
+double
+WifiPhy::GetEdThreshold (void) const
+{
+  return WToDbm (m_edThresholdW);
+}
+
+void
+WifiPhy::SetCcaMode1Threshold (double threshold)
+{
+  NS_LOG_FUNCTION (this << threshold);
+  m_ccaMode1ThresholdW = DbmToW (threshold);
+}
+
+double
+WifiPhy::GetCcaMode1Threshold (void) const
+{
+  return WToDbm (m_ccaMode1ThresholdW);
+}
+
+void
+WifiPhy::SetRxNoiseFigure (double noiseFigureDb)
+{
+  NS_LOG_FUNCTION (this << noiseFigureDb);
+  m_interference.SetNoiseFigure (DbToRatio (noiseFigureDb));
+}
+
+double
+WifiPhy::GetRxNoiseFigure (void) const
+{
+  return RatioToDb (m_interference.GetNoiseFigure ());
+}
+
+void
+WifiPhy::SetTxPowerStart (double start)
+{
+  NS_LOG_FUNCTION (this << start);
+  m_txPowerBaseDbm = start;
+}
+
+double
+WifiPhy::GetTxPowerStart (void) const
+{
+  return m_txPowerBaseDbm;
+}
+
+void
+WifiPhy::SetTxPowerEnd (double end)
+{
+  NS_LOG_FUNCTION (this << end);
+  m_txPowerEndDbm = end;
+}
+
+double
+WifiPhy::GetTxPowerEnd (void) const
+{
+  return m_txPowerEndDbm;
+}
+
+void
+WifiPhy::SetNTxPower (uint32_t n)
+{
+  NS_LOG_FUNCTION (this << n);
+  m_nTxPower = n;
+}
+
+uint32_t
+WifiPhy::GetNTxPower (void) const
+{
+  return m_nTxPower;
+}
+
+void
+WifiPhy::SetTxGain (double gain)
+{
+  NS_LOG_FUNCTION (this << gain);
+  m_txGainDb = gain;
+}
+
+double
+WifiPhy::GetTxGain (void) const
+{
+  return m_txGainDb;
+}
+
+void
+WifiPhy::SetRxGain (double gain)
+{
+  NS_LOG_FUNCTION (this << gain);
+  m_rxGainDb = gain;
+}
+
+double
+WifiPhy::GetRxGain (void) const
+{
+  return m_rxGainDb;
+}
+
+void
+WifiPhy::SetLdpc (bool ldpc)
+{
+  NS_LOG_FUNCTION (this << ldpc);
+  m_ldpc = ldpc;
+}
+
+bool
+WifiPhy::GetLdpc (void) const
+{
+  return m_ldpc;
+}
+
+void
+WifiPhy::SetStbc (bool stbc)
+{
+  NS_LOG_FUNCTION (this << stbc);
+  m_stbc = stbc;
+}
+
+bool
+WifiPhy::GetStbc (void) const
+{
+  return m_stbc;
+}
+
+void
+WifiPhy::SetGreenfield (bool greenfield)
+{
+  NS_LOG_FUNCTION (this << greenfield);
+  m_greenfield = greenfield;
+}
+
+bool
+WifiPhy::GetGreenfield (void) const
+{
+  return m_greenfield;
+}
+
+void
+WifiPhy::SetGuardInterval (bool guardInterval)
+{
+  NS_LOG_FUNCTION (this << guardInterval);
+  m_guardInterval = guardInterval;
+}
+
+bool
+WifiPhy::GetGuardInterval (void) const
+{
+  return m_guardInterval;
+}
+
+void
+WifiPhy::SetShortPlcpPreambleSupported (bool enable)
+{
+  NS_LOG_FUNCTION (this << enable);
+  m_shortPreamble = enable;
+}
+
+bool
+WifiPhy::GetShortPlcpPreambleSupported (void) const
+{
+  return m_shortPreamble;
+}
+
+void
+WifiPhy::SetDevice (Ptr<NetDevice> device)
+{
+  m_device = device;
+}
+
+Ptr<NetDevice>
+WifiPhy::GetDevice (void) const
+{
+  return m_device;
+}
+
+void
+WifiPhy::SetMobility (Ptr<MobilityModel> mobility)
+{
+  m_mobility = mobility;
+}
+
+Ptr<MobilityModel>
+WifiPhy::GetMobility (void)
+{
+  if (m_mobility != 0)
+    {
+      return m_mobility;
+    }
+  else
+    {
+      return m_device->GetNode ()->GetObject<MobilityModel> ();
+    }
+}
+
+void
+WifiPhy::SetErrorRateModel (Ptr<ErrorRateModel> rate)
+{
+  m_interference.SetErrorRateModel (rate);
+}
+
+Ptr<ErrorRateModel>
+WifiPhy::GetErrorRateModel (void) const
+{
+  return m_interference.GetErrorRateModel ();
+}
+
+double
+WifiPhy::GetPowerDbm (uint8_t power) const
+{
+  NS_ASSERT (m_txPowerBaseDbm <= m_txPowerEndDbm);
+  NS_ASSERT (m_nTxPower > 0);
+  double dbm;
+  if (m_nTxPower > 1)
+    {
+      dbm = m_txPowerBaseDbm + power * (m_txPowerEndDbm - m_txPowerBaseDbm) / (m_nTxPower - 1);
+    }
+  else
+    {
+      NS_ASSERT_MSG (m_txPowerBaseDbm == m_txPowerEndDbm, "cannot have TxPowerEnd != TxPowerStart with TxPowerLevels == 1");
+      dbm = m_txPowerBaseDbm;
+    }
+  return dbm;
+}
+
+Time
+WifiPhy::GetChannelSwitchDelay (void) const
+{
+  return m_channelSwitchDelay;
+}
+
+double
+WifiPhy::CalculateSnr (WifiTxVector txVector, double ber) const
+{
+  return m_interference.GetErrorRateModel ()->CalculateSnr (txVector, ber);
+}
+
+void
+WifiPhy::ConfigureDefaultsForStandard (enum WifiPhyStandard standard)
+{
+  NS_LOG_FUNCTION (this << standard);
+  switch (standard)
+    {
+    case WIFI_PHY_STANDARD_80211a:
+      SetChannelWidth (20);
+      SetFrequency (5180);
+      // Channel number should be aligned by SetFrequency () to 36
+      NS_ASSERT (GetChannelNumber () == 36);
+      break;
+    case WIFI_PHY_STANDARD_80211b:
+      SetChannelWidth (22);
+      SetFrequency (2412);
+      // Channel number should be aligned by SetFrequency () to 1
+      NS_ASSERT (GetChannelNumber () == 1);
+      break;
+    case WIFI_PHY_STANDARD_80211g:
+      SetChannelWidth (20);
+      SetFrequency (2412);
+      // Channel number should be aligned by SetFrequency () to 1
+      NS_ASSERT (GetChannelNumber () == 1);
+      break;
+    case WIFI_PHY_STANDARD_80211_10MHZ:
+      SetChannelWidth (10);
+      SetFrequency (5860);
+      // Channel number should be aligned by SetFrequency () to 172
+      NS_ASSERT (GetChannelNumber () == 172);
+      break;
+    case WIFI_PHY_STANDARD_80211_5MHZ:
+      SetChannelWidth (5);
+      SetFrequency (5860);
+      // Channel number should be aligned by SetFrequency () to 0 
+      NS_ASSERT (GetChannelNumber () == 0);
+      break;
+    case WIFI_PHY_STANDARD_holland:
+      SetChannelWidth (20);
+      SetFrequency (5180);
+      // Channel number should be aligned by SetFrequency () to 36
+      NS_ASSERT (GetChannelNumber () == 36);
+      break;
+    case WIFI_PHY_STANDARD_80211n_2_4GHZ:
+      SetChannelWidth (20);
+      SetFrequency (2412);
+      // Channel number should be aligned by SetFrequency () to 1
+      NS_ASSERT (GetChannelNumber () == 1);
+      break;
+    case WIFI_PHY_STANDARD_80211n_5GHZ:
+      SetChannelWidth (20);
+      SetFrequency (5180);
+      // Channel number should be aligned by SetFrequency () to 36
+      NS_ASSERT (GetChannelNumber () == 36);
+      break;
+    case WIFI_PHY_STANDARD_80211ac:
+      SetChannelWidth (80);
+      SetFrequency (5210);
+      // Channel number should be aligned by SetFrequency () to 42
+      NS_ASSERT (GetChannelNumber () == 42);
+      break;
+    case WIFI_PHY_STANDARD_UNSPECIFIED:
+      NS_LOG_WARN ("Configuring unspecified standard; performing no action");
+      break;
+    default:
+      NS_ASSERT (false);
+      break;
+    }
+}
+
+void
+WifiPhy::Configure80211a (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate6Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate9Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate12Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate18Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate24Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate36Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate48Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate54Mbps ());
+}
+
+void
+WifiPhy::Configure80211b (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  m_deviceRateSet.push_back (WifiPhy::GetDsssRate1Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetDsssRate2Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetDsssRate5_5Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetDsssRate11Mbps ());
+}
+
+void
+WifiPhy::Configure80211g (void)
+{
+  NS_LOG_FUNCTION (this);
+  Configure80211b ();
+
+  m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate6Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate9Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate12Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate18Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate24Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate36Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate48Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate54Mbps ());
+}
+
+void
+WifiPhy::Configure80211_10Mhz (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate3MbpsBW10MHz ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate4_5MbpsBW10MHz ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate6MbpsBW10MHz ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate9MbpsBW10MHz ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate12MbpsBW10MHz ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate18MbpsBW10MHz ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate24MbpsBW10MHz ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate27MbpsBW10MHz ());
+}
+
+void
+WifiPhy::Configure80211_5Mhz (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate1_5MbpsBW5MHz ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate2_25MbpsBW5MHz ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate3MbpsBW5MHz ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate4_5MbpsBW5MHz ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate6MbpsBW5MHz ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate9MbpsBW5MHz ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate12MbpsBW5MHz ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate13_5MbpsBW5MHz ());
+}
+
+void
+WifiPhy::ConfigureHolland (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate6Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate12Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate18Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate36Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate54Mbps ());
+}
+
+void
+WifiPhy::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
+WifiPhy::Configure80211n (void)
+{
+  NS_LOG_FUNCTION (this);
+  if (GetFrequency () >= 2400 && GetFrequency () <= 2500) //at 2.4 GHz
+    {
+      Configure80211b ();
+      Configure80211g ();
+    }
+  if (GetFrequency () >= 5000 && GetFrequency () <= 6000) //at 5 GHz
+    {
+      Configure80211a ();
+    }
+  m_bssMembershipSelectorSet.push_back (HT_PHY);
+  ConfigureHtDeviceMcsSet ();
+}
+
+void
+WifiPhy::Configure80211ac (void)
+{
+  NS_LOG_FUNCTION (this);
+  Configure80211n ();
+
+  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs0 ());
+  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs1 ());
+  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs2 ());
+  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs3 ());
+  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs4 ());
+  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs5 ());
+  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs6 ());
+  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs7 ());
+  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs8 ());
+  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs9 ());
+
+  m_bssMembershipSelectorSet.push_back (VHT_PHY);
+}
+
+bool 
+WifiPhy::DefineChannelNumber (uint16_t channelNumber, enum WifiPhyStandard standard, uint32_t frequency, uint32_t channelWidth)
+{
+  NS_LOG_FUNCTION (this << channelNumber << standard << frequency << channelWidth);
+  ChannelNumberStandardPair p = std::make_pair (channelNumber, standard);
+  ChannelToFrequencyWidthMap::const_iterator it;
+  it = m_channelToFrequencyWidth.find (p);
+  if (it != m_channelToFrequencyWidth.end ())
+    {
+      NS_LOG_DEBUG ("channel number/standard already defined; returning false");
+      return false;
+    }
+  FrequencyWidthPair f = std::make_pair (frequency, channelWidth);
+  m_channelToFrequencyWidth[p] = f;
+  return true;
+}
+
+uint16_t 
+WifiPhy::FindChannelNumberForFrequencyWidth (uint32_t frequency, uint32_t width) const
+{
+  NS_LOG_FUNCTION (this << frequency << width);
+  bool found = false;
+  FrequencyWidthPair f = std::make_pair (frequency, width);
+  ChannelToFrequencyWidthMap::const_iterator it = m_channelToFrequencyWidth.begin ();
+  while (it != m_channelToFrequencyWidth.end ())
+    {
+      if (it->second == f)
+        {
+           found = true;
+           break;
+        }
+      ++it;
+    }
+  if (found)
+    {
+      NS_LOG_DEBUG ("Found, returning " << it->first.first);
+      return (it->first.first);
+    }
+  else
+    {
+      NS_LOG_DEBUG ("Not found, returning 0");
+      return 0;
+    }
+}
+
+void
+WifiPhy::ConfigureChannelForStandard (enum WifiPhyStandard standard)
+{
+  NS_LOG_FUNCTION (this << standard);
+  // If the user has configured both Frequency and ChannelNumber, Frequency
+  // takes precedence 
+  if (GetFrequency () != 0)
+    {
+      // If Frequency is already set, then see whether a ChannelNumber can
+      // be found that matches Frequency and ChannelWidth.  If so, configure 
+      // the ChannelNumber to that channel number.  If not, set 
+      // ChannelNumber to zero.
+      NS_LOG_DEBUG ("Frequency set; checking whether a channel number corresponds");
+      uint32_t channelNumberSearched = FindChannelNumberForFrequencyWidth (GetFrequency (), GetChannelWidth ());
+      if (channelNumberSearched)
+        {
+          NS_LOG_DEBUG ("Channel number found; setting to " << channelNumberSearched);
+          SetChannelNumber (channelNumberSearched);
+        }
+      else
+        {
+          NS_LOG_DEBUG ("Channel number not found; setting to zero");
+          SetChannelNumber (0);
+        }
+    }
+  else if (GetChannelNumber () != 0)
+    {
+      // If the channel number is known for this particular standard or for 
+      // the unspecified standard, configure using the known values;
+      // otherwise, this is a configuration error
+      NS_LOG_DEBUG ("Configuring for channel number " << GetChannelNumber ());
+      FrequencyWidthPair f = GetFrequencyWidthForChannelNumberStandard (GetChannelNumber (), standard);
+      if (f.first == 0)
+        {
+          // the specific pair of number/standard is not known
+          NS_LOG_DEBUG ("Falling back to check WIFI_PHY_STANDARD_UNSPECIFIED");
+          f = GetFrequencyWidthForChannelNumberStandard (GetChannelNumber (), WIFI_PHY_STANDARD_UNSPECIFIED);
+        }
+      if (f.first == 0)
+        {
+          NS_FATAL_ERROR ("Error, ChannelNumber " << GetChannelNumber () << " is unknown for this standard");
+        }
+      else
+        {
+          NS_LOG_DEBUG ("Setting frequency to " << f.first << "; width to " << f.second);
+          SetFrequency (f.first);
+          SetChannelWidth (f.second);
+        }
+    }
+}
+
+void
+WifiPhy::ConfigureStandard (enum WifiPhyStandard standard)
+{
+  NS_LOG_FUNCTION (this << standard);
+  m_standard = standard;
+  m_isConstructed = true;
+  if (m_frequencyChannelNumberInitialized == false)
+    {
+      InitializeFrequencyChannelNumber ();
+    }
+  if (GetFrequency () == 0 && GetChannelNumber () == 0)
+    {
+      ConfigureDefaultsForStandard (standard);
+    }
+  else
+    {
+      // The user has configured either (or both) Frequency or ChannelNumber
+      ConfigureChannelForStandard (standard);
+    }
+  switch (standard)
+    {
+    case WIFI_PHY_STANDARD_80211a:
+      Configure80211a ();
+      break;
+    case WIFI_PHY_STANDARD_80211b:
+      Configure80211b ();
+      break;
+    case WIFI_PHY_STANDARD_80211g:
+      Configure80211g ();
+      break;
+    case WIFI_PHY_STANDARD_80211_10MHZ:
+      Configure80211_10Mhz ();
+      break;
+    case WIFI_PHY_STANDARD_80211_5MHZ:
+      Configure80211_5Mhz ();
+      break;
+    case WIFI_PHY_STANDARD_holland:
+      ConfigureHolland ();
+      break;
+    case WIFI_PHY_STANDARD_80211n_2_4GHZ:
+      Configure80211n ();
+      break;
+    case WIFI_PHY_STANDARD_80211n_5GHZ:
+      Configure80211n ();
+      break;
+    case WIFI_PHY_STANDARD_80211ac:
+      Configure80211ac ();
+      break;
+    default:
+      NS_ASSERT (false);
+      break;
+    }
+}
+
+enum WifiPhyStandard
+WifiPhy::GetStandard (void) const
+{
+  return m_standard;
+}
+
+void
+WifiPhy::SetFrequency (uint32_t frequency)
+{
+  NS_LOG_FUNCTION (this << frequency);
+  if (m_isConstructed == false)
+    {
+      NS_LOG_DEBUG ("Saving frequency configuration for initialization");
+      m_initialFrequency = frequency;
+      return;
+    }
+  if (GetFrequency () == frequency)
+    {
+      NS_LOG_DEBUG ("No frequency change requested");
+      return;
+    }
+  if (frequency == 0)
+    {
+      DoFrequencySwitch (0);
+      NS_LOG_DEBUG ("Setting frequency and channel number to zero");
+      m_channelCenterFrequency = 0;
+      m_channelNumber = 0;
+      return;
+    }
+  // If the user has configured both Frequency and ChannelNumber, Frequency
+  // takes precedence.  Lookup the channel number corresponding to the
+  // requested frequency.
+  uint16_t nch = FindChannelNumberForFrequencyWidth (frequency, GetChannelWidth ());
+  if (nch != 0)
+    {
+      NS_LOG_DEBUG ("Setting frequency " << frequency << " corresponds to channel " << nch);
+      if (DoFrequencySwitch (frequency))
+        {
+          NS_LOG_DEBUG ("Channel frequency switched to " << frequency << "; channel number to " << nch);
+          m_channelCenterFrequency = frequency;
+          m_channelNumber = nch;
+        }
+      else
+        {
+          NS_LOG_DEBUG ("Suppressing reassignment of frequency");
+        }
+    }
+  else
+    {
+      NS_LOG_DEBUG ("Channel number is unknown for frequency " << frequency);
+      if (DoFrequencySwitch (frequency))
+        {
+          NS_LOG_DEBUG ("Channel frequency switched to " << frequency << "; channel number to " << 0);
+          m_channelCenterFrequency = frequency;
+          m_channelNumber = 0;
+        }
+      else
+        {
+          NS_LOG_DEBUG ("Suppressing reassignment of frequency");
+        }
+    }
+}
+
+uint32_t
+WifiPhy::GetFrequency (void) const
+{
+  return m_channelCenterFrequency;
+}
+
+void
+WifiPhy::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
+WifiPhy::GetChannelWidth (void) const
+{
+  return m_channelWidth;
+}
+
+void
+WifiPhy::SetNumberOfTransmitAntennas (uint32_t tx)
+{
+  m_numberOfTransmitters = tx;
+  ConfigureHtDeviceMcsSet ();
+}
+
+void
+WifiPhy::SetNumberOfReceiveAntennas (uint32_t rx)
+{
+  m_numberOfReceivers = rx;
+}
+
+uint32_t
+WifiPhy::GetNumberOfTransmitAntennas (void) const
+{
+  return m_numberOfTransmitters;
+}
+
+uint32_t
+WifiPhy::GetNumberOfReceiveAntennas (void) const
+{
+  return m_numberOfReceivers;
+}
+
+uint8_t 
+WifiPhy::GetSupportedRxSpatialStreams (void) const
+{
+  return (static_cast<uint8_t> (GetNumberOfReceiveAntennas ()));
+}
+
+uint8_t 
+WifiPhy::GetSupportedTxSpatialStreams (void) const
+{
+  return (static_cast<uint8_t> (GetNumberOfTransmitAntennas ()));
+}
+
+uint32_t
+WifiPhy::GetNBssMembershipSelectors (void) const
+{
+  return m_bssMembershipSelectorSet.size ();
+}
+
+uint32_t
+WifiPhy::GetBssMembershipSelector (uint32_t selector) const
+{
+  return m_bssMembershipSelectorSet[selector];
+}
+
+WifiModeList
+WifiPhy::GetMembershipSelectorModes (uint32_t selector)
+{
+  uint32_t id = GetBssMembershipSelector (selector);
+  WifiModeList supportedmodes;
+  if (id == HT_PHY || id == VHT_PHY)
+    {
+      //mandatory MCS 0 to 7
+      supportedmodes.push_back (WifiPhy::GetHtMcs0 ());
+      supportedmodes.push_back (WifiPhy::GetHtMcs1 ());
+      supportedmodes.push_back (WifiPhy::GetHtMcs2 ());
+      supportedmodes.push_back (WifiPhy::GetHtMcs3 ());
+      supportedmodes.push_back (WifiPhy::GetHtMcs4 ());
+      supportedmodes.push_back (WifiPhy::GetHtMcs5 ());
+      supportedmodes.push_back (WifiPhy::GetHtMcs6 ());
+      supportedmodes.push_back (WifiPhy::GetHtMcs7 ());
+    }
+  if (id == VHT_PHY)
+    {
+      //mandatory MCS 0 to 9
+      supportedmodes.push_back (WifiPhy::GetVhtMcs0 ());
+      supportedmodes.push_back (WifiPhy::GetVhtMcs1 ());
+      supportedmodes.push_back (WifiPhy::GetVhtMcs2 ());
+      supportedmodes.push_back (WifiPhy::GetVhtMcs3 ());
+      supportedmodes.push_back (WifiPhy::GetVhtMcs4 ());
+      supportedmodes.push_back (WifiPhy::GetVhtMcs5 ());
+      supportedmodes.push_back (WifiPhy::GetVhtMcs6 ());
+      supportedmodes.push_back (WifiPhy::GetVhtMcs7 ());
+      supportedmodes.push_back (WifiPhy::GetVhtMcs8 ());
+      supportedmodes.push_back (WifiPhy::GetVhtMcs9 ());
+    }
+  return supportedmodes;
+}
+
+void
+WifiPhy::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;
+        }
+    }
+  NS_LOG_FUNCTION ("Adding " << width << " to supported channel width set");
+  m_supportedChannelWidthSet.push_back (width);
+}
+
+std::vector<uint32_t> 
+WifiPhy::GetSupportedChannelWidthSet (void) const
+{
+  return m_supportedChannelWidthSet;
+}
+
+WifiPhy::FrequencyWidthPair
+WifiPhy::GetFrequencyWidthForChannelNumberStandard (uint16_t channelNumber, enum WifiPhyStandard standard) const
+{
+  ChannelNumberStandardPair p = std::make_pair (channelNumber, standard);
+  FrequencyWidthPair f = m_channelToFrequencyWidth[p];
+  return f;
+}
+
+void
+WifiPhy::SetChannelNumber (uint16_t nch)
+{
+  NS_LOG_FUNCTION (this << nch);
+  if (m_isConstructed == false)
+    {
+      NS_LOG_DEBUG ("Saving channel number configuration for initialization");
+      m_initialChannelNumber = nch;
+      return;
+    }
+  if (GetChannelNumber () == nch)
+    {
+      NS_LOG_DEBUG ("No channel change requested");
+      return;
+    }
+  if (nch == 0)
+    {
+      // This case corresponds to when there is not a known channel
+      // number for the requested frequency.  There is no need to call
+      // DoChannelSwitch () because DoFrequencySwitch () should have been
+      // called by the client
+      NS_LOG_DEBUG ("Setting channel number to zero");
+      m_channelNumber = 0;
+      return;
+    }
+
+  // First make sure that the channel number is defined for the standard
+  // in use
+  FrequencyWidthPair f = GetFrequencyWidthForChannelNumberStandard (nch, GetStandard ());
+  if (f.first == 0)
+    {
+      f = GetFrequencyWidthForChannelNumberStandard (nch, WIFI_PHY_STANDARD_UNSPECIFIED);
+    }
+  if (f.first != 0)
+    {
+      if (DoChannelSwitch (nch))
+        {
+          NS_LOG_DEBUG ("Setting frequency to " << f.first << "; width to " << f.second);
+          m_channelCenterFrequency = f.first;
+          SetChannelWidth (f.second);
+          m_channelNumber = nch;
+        }
+      else
+        {
+          // Subclass may have suppressed (e.g. waiting for state change)
+          NS_LOG_DEBUG ("Channel switch suppressed");
+        }
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Frequency not found for channel number " << nch);
+    }
+}
+
+uint16_t
+WifiPhy::GetChannelNumber (void) const
+{
+  return m_channelNumber;
+}
+
+bool
+WifiPhy::DoChannelSwitch (uint16_t nch)
+{
+  return true;
+}
+
+bool
+WifiPhy::DoFrequencySwitch (uint32_t frequency)
+{
+  return true;
+}
+
 WifiMode
 WifiPhy::GetHtPlcpHeaderMode (WifiMode payloadMode)
 {
@@ -480,11 +1705,11 @@
         //Add signal extension for ERP PHY
         if (payloadMode.GetModulationClass () == WIFI_MOD_CLASS_ERP_OFDM)
           {
-            return NanoSeconds (numSymbols * symbolDuration.GetNanoSeconds ()) + MicroSeconds (6);
+            return FemtoSeconds (numSymbols * symbolDuration.GetFemtoSeconds ()) + MicroSeconds (6);
           }
         else
           {
-            return NanoSeconds (numSymbols * symbolDuration.GetNanoSeconds ());
+            return FemtoSeconds (numSymbols * symbolDuration.GetFemtoSeconds ());
           }
       }
     case WIFI_MOD_CLASS_HT:
@@ -672,11 +1897,11 @@
 
         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 NanoSeconds (numSymbols * symbolDuration.GetNanoSeconds ()) + MicroSeconds (6);
+            return FemtoSeconds (numSymbols * symbolDuration.GetFemtoSeconds ()) + MicroSeconds (6);
           }
         else //at 5 GHz
           {
-            return NanoSeconds (numSymbols * symbolDuration.GetNanoSeconds ());
+            return FemtoSeconds (numSymbols * symbolDuration.GetFemtoSeconds ());
           }
       }
     case WIFI_MOD_CLASS_DSSS:
@@ -1595,6 +2820,150 @@
   return true;
 }
 
+bool
+WifiPhy::IsModeSupported (WifiMode mode) const
+{
+  for (uint32_t i = 0; i < GetNModes (); i++)
+    {
+      if (mode == GetMode (i))
+        {
+          return true;
+        }
+    }
+  return false;
+}
+
+bool
+WifiPhy::IsMcsSupported (WifiMode mcs) const
+{
+  for (uint32_t i = 0; i < GetNMcs (); i++)
+    {
+      if (mcs == GetMcs (i))
+        {
+          return true;
+        }
+    }
+  return false;
+}
+
+uint32_t
+WifiPhy::GetNModes (void) const
+{
+  return m_deviceRateSet.size ();
+}
+
+WifiMode
+WifiPhy::GetMode (uint32_t mode) const
+{
+  return m_deviceRateSet[mode];
+}
+
+uint8_t
+WifiPhy::GetNMcs (void) const
+{
+  return m_deviceMcsSet.size ();
+}
+
+WifiMode
+WifiPhy::GetMcs (uint8_t mcs) const
+{
+  return m_deviceMcsSet[mcs];
+}
+
+double
+WifiPhy::DbToRatio (double dB) const
+{
+  double ratio = std::pow (10.0, dB / 10.0);
+  return ratio;
+}
+
+double
+WifiPhy::DbmToW (double dBm) const
+{
+  double mW = std::pow (10.0, dBm / 10.0);
+  return mW / 1000.0;
+}
+
+double
+WifiPhy::WToDbm (double w) const
+{
+  return 10.0 * std::log10 (w * 1000.0);
+}
+
+double
+WifiPhy::RatioToDb (double ratio) const
+{
+  return 10.0 * std::log10 (ratio);
+}
+
+bool
+WifiPhy::IsStateCcaBusy (void)
+{
+  return m_state->IsStateCcaBusy ();
+}
+
+bool
+WifiPhy::IsStateIdle (void)
+{
+  return m_state->IsStateIdle ();
+}
+
+bool
+WifiPhy::IsStateBusy (void)
+{
+  return m_state->IsStateBusy ();
+}
+
+bool
+WifiPhy::IsStateRx (void)
+{
+  return m_state->IsStateRx ();
+}
+
+bool
+WifiPhy::IsStateTx (void)
+{
+  return m_state->IsStateTx ();
+}
+
+bool
+WifiPhy::IsStateSwitching (void)
+{
+  return m_state->IsStateSwitching ();
+}
+
+bool
+WifiPhy::IsStateSleep (void)
+{
+  return m_state->IsStateSleep ();
+}
+
+Time
+WifiPhy::GetStateDuration (void)
+{
+  return m_state->GetStateDuration ();
+}
+
+Time
+WifiPhy::GetDelayUntilIdle (void)
+{
+  return m_state->GetDelayUntilIdle ();
+}
+
+Time
+WifiPhy::GetLastRxStartTime (void) const
+{
+  return m_state->GetLastRxStartTime ();
+}
+
+int64_t
+WifiPhy::AssignStreams (int64_t stream)
+{
+  NS_LOG_FUNCTION (this << stream);
+  m_random->SetStream (stream);
+  return 1;
+}
+
 std::ostream& operator<< (std::ostream& os, enum WifiPhy::State state)
 {
   switch (state)
diff -Naur ns-3.25/src/wifi/model/wifi-phy.h ns-3.26/src/wifi/model/wifi-phy.h
--- ns-3.25/src/wifi/model/wifi-phy.h	2016-10-03 20:57:08.540245357 -0700
+++ ns-3.26/src/wifi/model/wifi-phy.h	2016-10-03 19:49:01.834386259 -0700
@@ -23,21 +23,32 @@
 #define WIFI_PHY_H
 
 #include <stdint.h>
+#include <map>
 #include "ns3/callback.h"
+#include "ns3/event-id.h"
 #include "ns3/packet.h"
 #include "ns3/object.h"
 #include "ns3/nstime.h"
 #include "ns3/ptr.h"
+#include "ns3/mobility-model.h"
+#include "ns3/random-variable-stream.h"
 #include "wifi-mode.h"
 #include "wifi-preamble.h"
 #include "wifi-phy-standard.h"
 #include "ns3/traced-callback.h"
 #include "wifi-tx-vector.h"
+#include "wifi-phy-standard.h"
+#include "interference-helper.h"
+#include "ns3/net-device.h"
+#include "ns3/node.h"
+#include "wifi-channel.h"
 
 namespace ns3 {
 
-class WifiChannel;
-class NetDevice;
+#define VHT_PHY 126
+#define HT_PHY 127
+
+class WifiPhyStateHelper;
 
 /**
  * This enumeration defines the type of an MPDU.
@@ -192,9 +203,8 @@
   /**
    * arg1: packet received unsuccessfully
    * arg2: snr of packet
-   * arg3: PHY-RXEND flag
    */
-  typedef Callback<void, Ptr<Packet>, double, bool> RxErrorCallback;
+  typedef Callback<void, Ptr<Packet>, double> RxErrorCallback;
 
   static TypeId GetTypeId (void);
 
@@ -202,23 +212,6 @@
   virtual ~WifiPhy ();
 
   /**
-   * Return the minimum available transmission power level (dBm).
-   *
-   * \return the minimum available transmission power level in dBm
-   */
-  virtual double GetTxPowerStart (void) const = 0;
-  /**
-   * Return the maximum available transmission power level (dBm).
-   *
-   * \return the maximum available transmission power level in dBm
-   */
-  virtual double GetTxPowerEnd (void) const = 0;
-  /**
-   * \return the number of tx power levels available for this PHY.
-   */
-  virtual uint32_t GetNTxPower (void) const = 0;
-
-  /**
    * \param callback the callback to invoke
    *        upon successful packet reception.
    */
@@ -274,49 +267,49 @@
   /**
    * \return true of the current state of the PHY layer is WifiPhy::IDLE, false otherwise.
    */
-  virtual bool IsStateIdle (void) = 0;
+  virtual bool IsStateIdle (void);
   /**
    * \return true of the current state of the PHY layer is WifiPhy::CCA_BUSY, false otherwise.
    */
-  virtual bool IsStateCcaBusy (void) = 0;
+  virtual bool IsStateCcaBusy (void);
   /**
    * \return true of the current state of the PHY layer is not WifiPhy::IDLE, false otherwise.
    */
-  virtual bool IsStateBusy (void) = 0;
+  virtual bool IsStateBusy (void);
   /**
    * \return true of the current state of the PHY layer is WifiPhy::RX, false otherwise.
    */
-  virtual bool IsStateRx (void) = 0;
+  virtual bool IsStateRx (void);
   /**
    * \return true of the current state of the PHY layer is WifiPhy::TX, false otherwise.
    */
-  virtual bool IsStateTx (void) = 0;
+  virtual bool IsStateTx (void);
   /**
    * \return true of the current state of the PHY layer is WifiPhy::SWITCHING, false otherwise.
    */
-  virtual bool IsStateSwitching (void) = 0;
+  virtual bool IsStateSwitching (void);
   /**
    * \return true if the current state of the PHY layer is WifiPhy::SLEEP, false otherwise.
    */
-  virtual bool IsStateSleep (void) = 0;
+  virtual bool IsStateSleep (void);
   /**
    * \return the amount of time since the current state has started.
    */
-  virtual Time GetStateDuration (void) = 0;
+  virtual Time GetStateDuration (void);
   /**
    * \return the predicted delay until this PHY can become WifiPhy::IDLE.
    *
    * The PHY will never become WifiPhy::IDLE _before_ the delay returned by
    * this method but it could become really idle later.
    */
-  virtual Time GetDelayUntilIdle (void) = 0;
+  virtual Time GetDelayUntilIdle (void);
 
   /**
    * Return the start time of the last received packet.
    *
    * \return the start time of the last received packet
    */
-  virtual Time GetLastRxStartTime (void) const = 0;
+  virtual Time GetLastRxStartTime (void) const;
 
   /**
    * \param size the number of bytes in the packet to send
@@ -451,7 +444,7 @@
    *
    * \sa WifiPhy::GetMode()
    */
-  virtual uint32_t GetNModes (void) const = 0;
+  virtual uint32_t GetNModes (void) const;
   /**
    * The WifiPhy::GetNModes() and WifiPhy::GetMode() methods are used
    * (e.g., by a WifiRemoteStationManager) to determine the set of
@@ -471,7 +464,16 @@
    *
    * \sa WifiPhy::GetNModes()
    */
-  virtual WifiMode GetMode (uint32_t mode) const = 0;
+  virtual WifiMode GetMode (uint32_t mode) const;
+  /**
+   * Check if the given WifiMode is supported by the PHY.
+   *
+   * \param mode the wifi mode to check
+   *
+   * \return true if the given mode is supported,
+   *         false otherwise
+   */
+  virtual bool IsModeSupported (WifiMode mode) const;
   /**
    * Check if the given WifiMode is supported by the PHY.
    *
@@ -480,7 +482,7 @@
    * \return true if the given mode is supported,
    *         false otherwise
    */
-  virtual bool IsModeSupported (WifiMode mode) const = 0;
+  virtual bool IsMcsSupported (WifiMode mcs) const;
 
   /**
    * \param txVector the transmission vector
@@ -489,7 +491,7 @@
    * \return the minimum snr which is required to achieve
    *          the requested ber for the specified transmission vector. (W/W)
    */
-  virtual double CalculateSnr (WifiTxVector txVector, double ber) const = 0;
+  virtual double CalculateSnr (WifiTxVector txVector, double ber) const;
 
   /**
   * The WifiPhy::NBssMembershipSelectors() method is used
@@ -500,7 +502,7 @@
   *
   * \return the memebership selector whose index is specified.
   */
-  virtual uint32_t GetNBssMembershipSelectors (void) const = 0;
+  virtual uint32_t GetNBssMembershipSelectors (void) const;
   /**
   * The WifiPhy::BssMembershipSelector() method is used
   * (e.g., by a WifiRemoteStationManager) to determine the set of
@@ -512,7 +514,7 @@
   *
   * \return the memebership selector whose index is specified.
   */
-  virtual uint32_t GetBssMembershipSelector (uint32_t selector) const = 0;
+  virtual uint32_t GetBssMembershipSelector (uint32_t selector) const;
   /**
    * The WifiPhy::GetMembershipSelectorModes() method is used
    * (e.g., by a WifiRemoteStationManager) to determine the set of
@@ -526,7 +528,7 @@
    *
    * \sa WifiPhy::GetMembershipSelectorModes()
    */
-  virtual WifiModeList GetMembershipSelectorModes (uint32_t selector) = 0;
+  virtual WifiModeList GetMembershipSelectorModes (uint32_t selector);
   /**
    * The WifiPhy::GetNMcs() method is used
    * (e.g., by a WifiRemoteStationManager) to determine the set of
@@ -536,7 +538,7 @@
    *
    * \return the MCS index whose index is specified.
    */
-  virtual uint8_t GetNMcs (void) const = 0;
+  virtual uint8_t GetNMcs (void) const;
   /**
    * The WifiPhy::GetMcs() method is used
    * (e.g., by a WifiRemoteStationManager) to determine the set of
@@ -548,7 +550,7 @@
    *
    * \return the MCS index whose index is specified.
    */
-  virtual WifiMode GetMcs (uint8_t mcs) const = 0;
+  virtual WifiMode GetMcs (uint8_t mcs) const;
 
   /**
    * \brief Set channel number.
@@ -557,27 +559,62 @@
    *
    * where Starting channel frequency is standard-dependent, see SetStandard()
    * as defined in (Section 18.3.8.4.2 "Channel numbering"; IEEE Std 802.11-2012).
+   * This method may fail to take action if the Phy model determines that
+   * the channel number cannot be switched for some reason (e.g. sleep state)
    *
    * \param id the channel number
    */
-  virtual void SetChannelNumber (uint16_t id) = 0;
+  virtual void SetChannelNumber (uint16_t id);
   /**
    * Return current channel number.
    *
    * \return the current channel number
    */
-  virtual uint16_t GetChannelNumber (void) const = 0;
+  virtual uint16_t GetChannelNumber (void) const;
   /**
    * \return the required time for channel switch operation of this WifiPhy
    */
-  virtual Time GetChannelSwitchDelay (void) const = 0;
+  virtual Time GetChannelSwitchDelay (void) const;
 
   /**
    * Configure the PHY-level parameters for different Wi-Fi standard.
    *
    * \param standard the Wi-Fi standard
    */
-  virtual void ConfigureStandard (enum WifiPhyStandard standard) = 0;
+  virtual void ConfigureStandard (enum WifiPhyStandard standard);
+
+  /**
+   * Get the configured Wi-Fi standard
+   *
+   * \return the Wi-Fi standard that has been configured
+   */
+  virtual enum WifiPhyStandard GetStandard (void) const;
+
+  /**
+   * Add a channel definition to the WifiPhy.  The pair (channelNumber,
+   * WifiPhyStandard) may then be used to lookup a pair (frequency, 
+   * channelWidth).
+   *
+   * If the channel is not already defined for the standard, the method
+   * should return true; otherwise false.
+   *
+   * \param channelNumber the channel number to define
+   * \param standard the applicable WifiPhyStandard
+   * \param frequency the frequency (MHz)
+   * \param channelWidth the channel width (MHz)
+   *
+   * \return true if the channel definition succeeded
+   */
+  bool DefineChannelNumber (uint16_t channelNumber, enum WifiPhyStandard standard, uint32_t frequency, uint32_t channelWidth);
+
+  /**
+   * A pair of a ChannelNumber and WifiPhyStandard
+   */
+  typedef std::pair<uint16_t, enum WifiPhyStandard> ChannelNumberStandardPair;
+  /**
+   * A pair of a center Frequency and a ChannelWidth
+   */
+  typedef std::pair<uint32_t, uint32_t> FrequencyWidthPair;
 
   /**
    * Return the WifiChannel this WifiPhy is connected to.
@@ -1208,99 +1245,440 @@
    * \param stream first stream index to use
    * \return the number of stream indices assigned by this model
    */
-  virtual int64_t AssignStreams (int64_t stream) = 0;
+  virtual int64_t AssignStreams (int64_t stream);
+
+  /**
+   * Sets the energy detection threshold (dBm).
+   * The energy of a received signal should be higher than
+   * this threshold (dbm) to allow the PHY layer to detect the signal.
+   *
+   * \param threshold the energy detction threshold in dBm
+   */
+  void SetEdThreshold (double threshold);
+  /**
+   * Return the energy detection threshold (dBm).
+   *
+   * \return the energy detection threshold in dBm
+   */
+  double GetEdThreshold (void) const;
+  /**
+   * Return the energy detection threshold.
+   *
+   * \return the energy detection threshold.
+   */
+  double GetEdThresholdW (void) const;
+  /**
+   * Sets the CCA threshold (dBm). The energy of a received signal
+   * should be higher than this threshold to allow the PHY
+   * layer to declare CCA BUSY state.
+   *
+   * \param threshold the CCA threshold in dBm
+   */
+  void SetCcaMode1Threshold (double threshold);
+  /**
+   * Return the CCA threshold (dBm).
+   *
+   * \return the CCA threshold in dBm
+   */
+  double GetCcaMode1Threshold (void) const;
+  /**
+   * Sets the RX loss (dB) in the Signal-to-Noise-Ratio due to non-idealities in the receiver.
+   *
+   * \param noiseFigureDb noise figure in dB
+   */
+  void SetRxNoiseFigure (double noiseFigureDb);
+  /**
+   * Return the RX noise figure (dBm).
+   *
+   * \return the RX noise figure in dBm
+   */
+  double GetRxNoiseFigure (void) const;
+  /**
+   * Sets the minimum available transmission power level (dBm).
+   *
+   * \param start the minimum transmission power level (dBm)
+   */
+  void SetTxPowerStart (double start);
+  /**
+   * Return the minimum available transmission power level (dBm).
+   *
+   * \return the minimum available transmission power level (dBm)
+   */
+  virtual double GetTxPowerStart (void) const;
+  /**
+   * Sets the maximum available transmission power level (dBm).
+   *
+   * \param end the maximum transmission power level (dBm)
+   */
+  void SetTxPowerEnd (double end);
+  /**
+   * Return the maximum available transmission power level (dBm).
+   *
+   * \return the maximum available transmission power level (dBm)
+   */
+  virtual double GetTxPowerEnd (void) const;
+  /**
+   * Sets the number of transmission power levels available between the
+   * minimum level and the maximum level. Transmission power levels are
+   * equally separated (in dBm) with the minimum and the maximum included.
+   *
+   * \param n the number of available levels
+   */
+  void SetNTxPower (uint32_t n);
+  /**
+   * Return the number of available transmission power levels.
+   *
+   * \return the number of available transmission power levels
+   */
+  virtual uint32_t GetNTxPower (void) const;
+  /**
+   * Sets the transmission gain (dB).
+   *
+   * \param gain the transmission gain in dB
+   */
+  void SetTxGain (double gain);
+  /**
+   * Return the transmission gain (dB).
+   *
+   * \return the transmission gain in dB
+   */
+  double GetTxGain (void) const;
+  /**
+   * Sets the reception gain (dB).
+   *
+   * \param gain the reception gain in dB
+   */
+  void SetRxGain (double gain);
+  /**
+   * Return the reception gain (dB).
+   *
+   * \return the reception gain in dB
+   */
+  double GetRxGain (void) const;
+  /**
+   * Sets the device this PHY is associated with.
+   *
+   * \param device the device this PHY is associated with
+   */
+  void SetDevice (Ptr<NetDevice> device);
+  /**
+   * Return the device this PHY is associated with
+   *
+   * \return the device this PHY is associated with
+   */
+  Ptr<NetDevice> GetDevice (void) const;
+  /**
+   * \brief assign a mobility model to this device
+   *
+   * This method allows a user to specify a mobility model that should be
+   * associated with this physical layer.  Calling this method is optional
+   * and only necessary if the user wants to override the mobility model
+   * that is aggregated to the node.
+   *
+   * \param mobility the mobility model this PHY is associated with
+   */
+  void SetMobility (Ptr<MobilityModel> mobility);
+  /**
+   * Return the mobility model this PHY is associated with.
+   * This method will return either the mobility model that has been
+   * explicitly set by a call to YansWifiPhy::SetMobility(), or else
+   * will return the mobility model (if any) that has been aggregated
+   * to the node.
+   *
+   * \return the mobility model this PHY is associated with
+   */
+  Ptr<MobilityModel> GetMobility (void);
 
   /**
-   * \param freq the operating frequency on this node.
+   * \param freq the operating center frequency (MHz) on this node.
    */
-  virtual void SetFrequency (uint32_t freq) = 0;
+  virtual void SetFrequency (uint32_t freq);
   /**
-   * \return the operating frequency on this node
+   * \return the operating center frequency (MHz) 
    */
-  virtual uint32_t GetFrequency (void) const = 0;
+  virtual uint32_t GetFrequency (void) const;
   /**
    * \param tx the number of transmitters on this node.
    */
-  virtual void SetNumberOfTransmitAntennas (uint32_t tx) = 0;
+  virtual void SetNumberOfTransmitAntennas (uint32_t tx);
   /**
    * \return the number of transmit antenna on this device
    */
-  virtual uint32_t GetNumberOfTransmitAntennas (void) const = 0;
+  virtual uint32_t GetNumberOfTransmitAntennas (void) const;
   /**
   * \param rx the number of receivers on this node.
   */
-  virtual void SetNumberOfReceiveAntennas (uint32_t rx) = 0;
+  virtual void SetNumberOfReceiveAntennas (uint32_t rx);
   /**
    * \return the number of receivers on this node.
    */
-  virtual uint32_t GetNumberOfReceiveAntennas (void) const = 0;
+  virtual uint32_t GetNumberOfReceiveAntennas (void) const;
+
   /**
-   * \param guardInterval Enable or disable short guard interval
+   * Enable or disable short/long guard interval.
+   *
+   * \param guardInterval Enable or disable guard interval
    */
-  virtual void SetGuardInterval (bool guardInterval) = 0;
+  virtual void SetGuardInterval (bool guardInterval);
   /**
-   * \return true if short guard interval is supported, false otherwise
+   * Return whether guard interval is being used.
+   *
+   * \return true if guard interval is being used, false otherwise
    */
-  virtual bool GetGuardInterval (void) const = 0;
+  virtual bool GetGuardInterval (void) const;
   /**
+   * Enable or disable LDPC.
    * \param ldpc Enable or disable LDPC
    */
-  virtual void SetLdpc (bool ldpc) = 0;
+  virtual void SetLdpc (bool ldpc);
   /**
+   * Return if LDPC is supported.
+   *
    * \return true if LDPC is supported, false otherwise
    */
-  virtual bool GetLdpc (void) const = 0;
+  virtual bool GetLdpc (void) const;
   /**
-   * \param stbc Enable or disable STBC is supported
+   * Enable or disable STBC.
+   *
+   * \param stbc Enable or disable STBC
    */
-  virtual void SetStbc (bool stbc) = 0;
+  virtual void SetStbc (bool stbc);
   /**
-   *  \return true if STBC is supported, false otherwise
+   * Return whether STBC is supported.
+   *
+   * \return true if STBC is supported, false otherwise
    */
-  virtual bool GetStbc (void) const = 0;
+  virtual bool GetStbc (void) const;
   /**
-   * \param greenfield Enable or disable GreenField
+   * Enable or disable Greenfield support.
+   *
+   * \param greenfield Enable or disable Greenfield
    */
-  virtual void SetGreenfield (bool greenfield) = 0;
+  virtual void SetGreenfield (bool greenfield);
   /**
+   * Return whether Greenfield is supported.
+   *
    * \return true if Greenfield is supported, false otherwise
    */
-  virtual bool GetGreenfield (void) const = 0;
+  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) = 0;
+  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;
+
+  /**
+   * Sets the error rate model.
+   *
+   * \param rate the error rate model
+   */
+  void SetErrorRateModel (Ptr<ErrorRateModel> rate);
   /**
-   * \return true if short PLCP preamble is supported, false otherwise
+   * Return the error rate model this PHY is using.
+   *
+   * \return the error rate model this PHY is using
    */
-  virtual bool GetShortPlcpPreambleSupported (void) const = 0;
+  Ptr<ErrorRateModel> GetErrorRateModel (void) const;
+
   /**
    * \return the channel width
    */
-  virtual uint32_t GetChannelWidth (void) const = 0;
+  virtual uint32_t GetChannelWidth (void) const;
   /**
    * \param channelwidth channel width
    */
-  virtual void SetChannelWidth (uint32_t channelwidth) = 0;
+  virtual void SetChannelWidth (uint32_t channelwidth);
+  /**
+   * \param channelwidth channel width (in MHz) to support
+   */
+  virtual void AddSupportedChannelWidth (uint32_t channelwidth);
+  /**
+   * \return a vector containing the supported channel widths, values in MHz
+   */
+  virtual std::vector<uint32_t> GetSupportedChannelWidthSet (void) const;
   /**
    * \return the maximum number of supported Rx spatial streams
    */
-  virtual uint8_t GetSupportedRxSpatialStreams (void) const = 0;
+  virtual uint8_t GetSupportedRxSpatialStreams (void) const;
   /**
    * \return the maximum number of supported Tx spatial streams
    */
-  virtual uint8_t GetSupportedTxSpatialStreams (void) const = 0;
+  virtual uint8_t GetSupportedTxSpatialStreams (void) const;
   /**
-   * \param width channel width (in MHz) to support
+   * Convert from dBm to Watts.
+   *
+   * \param dbm the power in dBm
+   *
+   * \return the equivalent Watts for the given dBm
    */
-  virtual void AddSupportedChannelWidth (uint32_t width) = 0;
+  double DbmToW (double dbm) const;
   /**
-   * \return a vector containing the supported channel widths, values in MHz
+   * Convert from dB to ratio.
+   *
+   * \param db
+   *
+   * \return ratio
    */
-  virtual std::vector<uint32_t> GetSupportedChannelWidthSet (void) const = 0;
+  double DbToRatio (double db) const;
+  /**
+   * Convert from Watts to dBm.
+   *
+   * \param w the power in Watts
+   *
+   * \return the equivalent dBm for the given Watts
+   */
+  double WToDbm (double w) const;
+  /**
+   * Convert from ratio to dB.
+   *
+   * \param ratio
+   *
+   * \return dB
+   */
+  double RatioToDb (double ratio) const;
+
+protected:
+  // Inherited
+  virtual void DoInitialize (void);
+  virtual void DoDispose (void);
+
+  /**
+   * The default implementation does nothing and returns true.  This method 
+   * is typically called internally by SetChannelNumber ().
+   *
+   * \brief Perform any actions necessary when user changes channel number
+   * \param id channel number to try to switch to
+   * \return true if WifiPhy can actually change the number; false if not
+   * \see SetChannelNumber
+   */
+  virtual bool DoChannelSwitch (uint16_t id);
+  /**
+   * The default implementation does nothing and returns true.  This method
+   * is typically called internally by SetFrequency ().
+   *
+   * \brief Perform any actions necessary when user changes frequency
+   * \param frequency frequency to try to switch to
+   * \return true if WifiPhy can actually change the frequency; false if not
+   * \see SetFrequency
+   */
+  virtual bool DoFrequencySwitch (uint32_t frequency);
+
+  /**
+   * Get the power of the given power level in dBm.
+   * In SpectrumWifiPhy implementation, the power levels are equally spaced (in dBm).
+   *
+   * \param power the power level
+   *
+   * \return the transmission power in dBm at the given power level
+   */
+  double GetPowerDbm (uint8_t power) const;
+  
+  InterferenceHelper m_interference;   //!< Pointer to InterferenceHelper
+  Ptr<UniformRandomVariable> m_random; //!< Provides uniform random variables.
+  Ptr<WifiPhyStateHelper> m_state;     //!< Pointer to WifiPhyStateHelper
+
+  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
+  
+  EventId m_endRxEvent;
+  EventId m_endPlcpRxEvent;
 
 private:
   /**
+   * \brief post-construction setting of frequency and/or channel number
+   *
+   * This method exists to handle the fact that two attribute values,
+   * Frequency and ChannelNumber, are coupled.  The initialization of
+   * these values needs to be deferred until after attribute construction 
+   * time, to avoid static initialization order issues.  This method is
+   * typically called either when ConfigureStandard () is called or when
+   * DoInitialize () is called.  
+   */
+  void InitializeFrequencyChannelNumber (void);
+  /**
+   * Configure WifiPhy with appropriate channel frequency and
+   * supported rates for 802.11a standard.
+   */
+  void Configure80211a (void);
+  /**
+   * Configure WifiPhy with appropriate channel frequency and
+   * supported rates for 802.11b standard.
+   */
+  void Configure80211b (void);
+  /**
+   * Configure WifiPhy with appropriate channel frequency and
+   * supported rates for 802.11g standard.
+   */
+  void Configure80211g (void);
+  /**
+   * Configure WifiPhy with appropriate channel frequency and
+   * supported rates for 802.11a standard with 10MHz channel spacing.
+   */
+  void Configure80211_10Mhz (void);
+  /**
+   * Configure WifiPhy with appropriate channel frequency and
+   * supported rates for 802.11a standard with 5MHz channel spacing.
+   */
+  void Configure80211_5Mhz ();
+  void ConfigureHolland (void);
+  /**
+   * Configure WifiPhy with appropriate channel frequency and
+   * supported rates for 802.11n standard.
+   */
+  void Configure80211n (void);
+  /**
+   * Configure WifiPhy with appropriate channel frequency and
+   * supported rates for 802.11ac standard.
+   */
+  void Configure80211ac (void);
+  /**
+   * Configure the device Mcs set with the appropriate HtMcs modes for
+   * the number of available transmit spatial streams
+   */
+  void ConfigureHtDeviceMcsSet (void);
+  /**
+   * Configure the PHY-level parameters for different Wi-Fi standard.
+   * This method is called when defaults for each standard must be 
+   * selected.
+   *
+   * \param standard the Wi-Fi standard
+   */
+  virtual void ConfigureDefaultsForStandard (enum WifiPhyStandard standard);
+  /**
+   * Configure the PHY-level parameters for different Wi-Fi standard.
+   * This method is called when the Frequency or ChannelNumber attributes
+   * are set by the user.  If the Frequency or ChannelNumber are valid for
+   * the standard, they are used instead.
+   *
+   * \param standard the Wi-Fi standard
+   */
+  virtual void ConfigureChannelForStandard (enum WifiPhyStandard standard);
+
+  /**
+   * Look for channel number matching the frequency and width
+   * \param frequency The center frequency to use
+   * \param width The channel width to use
+   * \return the channel number if found, zero if not
+   */
+  uint16_t FindChannelNumberForFrequencyWidth (uint32_t frequency, uint32_t width) const;
+  /**
+   * Lookup frequency/width pair for channelNumber/standard pair
+   * \param channelNumber The channel number to check
+   * \param standard The WifiPhyStandard to check
+   * \return the FrequencyWidthPair found
+   */
+  FrequencyWidthPair GetFrequencyWidthForChannelNumberStandard (uint16_t channelNumber, enum WifiPhyStandard standard) const;
+
+  /**
    * The trace source fired when a packet begins the transmission process on
    * the medium.
    *
@@ -1376,9 +1754,85 @@
    */
   TracedCallback<Ptr<const Packet>, uint16_t, uint16_t, uint32_t,
                  WifiPreamble, WifiTxVector, struct mpduInfo> m_phyMonitorSniffTxTrace;
-
-  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
+    
+  /**
+   * This vector holds the set of transmission modes that this
+   * WifiPhy(-derived class) can support. In conversation we call this
+   * the DeviceRateSet (not a term you'll find in the standard), and
+   * it is a superset of standard-defined parameters such as the
+   * OperationalRateSet, and the BSSBasicRateSet (which, themselves,
+   * have a superset/subset relationship).
+   *
+   * Mandatory rates relevant to this WifiPhy can be found by
+   * iterating over this vector looking for WifiMode objects for which
+   * WifiMode::IsMandatory() is true.
+   *
+   * A quick note is appropriate here (well, here is as good a place
+   * as any I can find)...
+   *
+   * In the standard there is no text that explicitly precludes
+   * production of a device that does not support some rates that are
+   * mandatory (according to the standard) for PHYs that the device
+   * happens to fully or partially support.
+   *
+   * This approach is taken by some devices which choose to only support,
+   * for example, 6 and 9 Mbps ERP-OFDM rates for cost and power
+   * consumption reasons (i.e., these devices don't need to be designed
+   * for and waste current on the increased linearity requirement of
+   * higher-order constellations when 6 and 9 Mbps more than meet their
+   * data requirements). The wording of the standard allows such devices
+   * to have an OperationalRateSet which includes 6 and 9 Mbps ERP-OFDM
+   * rates, despite 12 and 24 Mbps being "mandatory" rates for the
+   * ERP-OFDM PHY.
+   *
+   * Now this doesn't actually have any impact on code, yet. It is,
+   * however, something that we need to keep in mind for the
+   * future. Basically, the key point is that we can't be making
+   * assumptions like "the Operational Rate Set will contain all the
+   * mandatory rates".
+   */
+  WifiModeList m_deviceRateSet;
+  WifiModeList m_deviceMcsSet;
+
+  std::vector<uint32_t> m_bssMembershipSelectorSet;
+
+  enum WifiPhyStandard m_standard;     //!< WifiPhyStandard
+  bool m_isConstructed;                //!< true when ready to set frequency
+  uint32_t m_channelCenterFrequency;   //!< Center frequency in MHz
+  uint32_t m_initialFrequency;         //!< Store frequency until initialization
+  bool m_frequencyChannelNumberInitialized; //!< Store initialization state
+  uint32_t m_channelWidth;             //!< Channel width
+
+  double m_edThresholdW;          //!< Energy detection threshold in watts
+  double   m_ccaMode1ThresholdW;  //!< Clear channel assessment (CCA) threshold in watts
+  double   m_txGainDb;            //!< Transmission gain (dB)
+  double   m_rxGainDb;            //!< Reception gain (dB)
+  double   m_txPowerBaseDbm;      //!< Minimum transmission power (dBm)
+  double   m_txPowerEndDbm;       //!< Maximum transmission power (dBm)
+  uint32_t m_nTxPower;            //!< Number of available transmission power levels
+  
+  bool     m_ldpc;                  //!< Flag if LDPC is used
+  bool     m_stbc;                  //!< Flag if STBC is used
+  bool     m_greenfield;            //!< Flag if GreenField format is supported
+  bool     m_guardInterval;         //!< Flag if short guard interval is used
+  bool     m_shortPreamble;         //!< Flag if short PLCP preamble is supported
+
+  uint32_t m_numberOfTransmitters;     //!< Number of transmitters
+  uint32_t m_numberOfReceivers;        //!< Number of receivers
+
+  typedef std::map<ChannelNumberStandardPair,FrequencyWidthPair> ChannelToFrequencyWidthMap;
+  static ChannelToFrequencyWidthMap m_channelToFrequencyWidth;
+
+  std::vector<uint32_t> m_supportedChannelWidthSet; //!< Supported channel width
+  uint16_t             m_channelNumber;  //!< Operating channel number
+  uint16_t             m_initialChannelNumber;  //!< Initial channel number
+
+  Time m_channelSwitchDelay;     //!< Time required to switch between channel
+  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
+  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
+  
+  Ptr<NetDevice>     m_device;   //!< Pointer to the device
+  Ptr<MobilityModel> m_mobility; //!< Pointer to the mobility model
 };
 
 /**
diff -Naur ns-3.25/src/wifi/model/wifi-phy-standard.h ns-3.26/src/wifi/model/wifi-phy-standard.h
--- ns-3.25/src/wifi/model/wifi-phy-standard.h	2016-10-03 20:57:08.535245396 -0700
+++ ns-3.26/src/wifi/model/wifi-phy-standard.h	2016-10-03 19:49:01.829386297 -0700
@@ -50,7 +50,9 @@
   /** HT OFDM PHY for the 5 GHz band (clause 20) */
   WIFI_PHY_STANDARD_80211n_5GHZ,
   /** VHT OFDM PHY (clause 22) */
-  WIFI_PHY_STANDARD_80211ac
+  WIFI_PHY_STANDARD_80211ac,
+  /** Unspecified */
+  WIFI_PHY_STANDARD_UNSPECIFIED
 };
 
 } //namespace ns3
diff -Naur ns-3.25/src/wifi/model/wifi-phy-state-helper.cc ns-3.26/src/wifi/model/wifi-phy-state-helper.cc
--- ns-3.25/src/wifi/model/wifi-phy-state-helper.cc	2016-10-03 20:57:08.536245388 -0700
+++ ns-3.26/src/wifi/model/wifi-phy-state-helper.cc	2016-10-03 19:49:01.830386289 -0700
@@ -442,14 +442,14 @@
 }
 
 void
-WifiPhyStateHelper::SwitchFromRxEndError (Ptr<Packet> packet, double snr, bool isEndOfFrame)
+WifiPhyStateHelper::SwitchFromRxEndError (Ptr<Packet> packet, double snr)
 {
   m_rxErrorTrace (packet, snr);
   NotifyRxEndError ();
   DoSwitchFromRx ();
   if (!m_rxErrorCallback.IsNull ())
     {
-      m_rxErrorCallback (packet, snr, isEndOfFrame);
+      m_rxErrorCallback (packet, snr);
     }
 }
 
diff -Naur ns-3.25/src/wifi/model/wifi-phy-state-helper.h ns-3.26/src/wifi/model/wifi-phy-state-helper.h
--- ns-3.25/src/wifi/model/wifi-phy-state-helper.h	2016-10-03 20:57:08.536245388 -0700
+++ ns-3.26/src/wifi/model/wifi-phy-state-helper.h	2016-10-03 19:49:01.830386289 -0700
@@ -167,9 +167,8 @@
    *
    * \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<Packet> packet, double snr, bool isEndOfFrame);
+  void SwitchFromRxEndError (Ptr<Packet> packet, double snr);
   /**
    * Switch to CCA busy.
    *
@@ -217,10 +216,9 @@
    *
    * \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, bool isEndOfFrame);
+    (Ptr<const Packet> packet, double snr);
 
   /**
    * TracedCallback signature for transmit event.
diff -Naur ns-3.25/src/wifi/model/wifi-phy-tag.cc ns-3.26/src/wifi/model/wifi-phy-tag.cc
--- ns-3.25/src/wifi/model/wifi-phy-tag.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/wifi/model/wifi-phy-tag.cc	2016-10-03 19:49:01.830386289 -0700
@@ -0,0 +1,107 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 CTTC
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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: Nicola Baldo <nbaldo@cttc.es>
+ */
+#include <ns3/wifi-phy-tag.h>
+
+namespace ns3 {
+
+TypeId
+WifiPhyTag::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::WifiPhyTag")
+    .SetParent<Tag> ()
+  ;
+  return tid;
+}
+
+TypeId
+WifiPhyTag::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+
+uint32_t
+WifiPhyTag::GetSerializedSize (void) const
+{
+  return (4 + (6 * 1) + 4 + 2);
+}
+
+void
+WifiPhyTag::Serialize (TagBuffer i) const
+{
+  i.WriteU32 (m_wifiTxVector.GetMode ().GetUid ());
+  i.WriteU8 (m_wifiTxVector.GetTxPowerLevel ());
+  i.WriteU8 (m_wifiTxVector.GetRetries ());
+  i.WriteU8 (m_wifiTxVector.IsShortGuardInterval ());
+  i.WriteU8 (m_wifiTxVector.GetNss ());
+  i.WriteU8 (m_wifiTxVector.GetNess ());
+  i.WriteU8 (m_wifiTxVector.IsStbc ());
+  i.WriteU32 (m_wifiPreamble);
+  i.WriteU16 (m_mpduType);
+}
+
+void
+WifiPhyTag::Deserialize (TagBuffer i)
+{
+  m_wifiTxVector.SetMode (WifiMode (i.ReadU32 ()));
+  m_wifiTxVector.SetTxPowerLevel (i.ReadU8 ());
+  m_wifiTxVector.SetRetries (i.ReadU8 ());
+  m_wifiTxVector.SetShortGuardInterval (i.ReadU8 ());
+  m_wifiTxVector.SetNss (i.ReadU8 ());
+  m_wifiTxVector.SetNess (i.ReadU8 ());
+  m_wifiTxVector.SetStbc (i.ReadU8 ());
+  m_wifiPreamble = i.ReadU32 ();
+  m_mpduType = static_cast<enum mpduType> (i.ReadU16 ());
+}
+void
+WifiPhyTag::Print (std::ostream &os) const
+{
+  os << m_wifiTxVector << " " << (m_wifiPreamble ? "SP " : "LP ") << m_mpduType;
+}
+
+WifiPhyTag::WifiPhyTag ()
+{
+}
+
+WifiPhyTag::WifiPhyTag (WifiTxVector txVector, WifiPreamble preamble, enum mpduType mpdutype)
+  : m_wifiTxVector (txVector),
+    m_wifiPreamble (preamble),
+    m_mpduType (mpdutype)
+{
+}
+
+WifiTxVector
+WifiPhyTag::GetWifiTxVector (void) const
+{
+  return m_wifiTxVector;
+}
+
+WifiPreamble
+WifiPhyTag::GetWifiPreamble (void) const
+{
+  return ((enum WifiPreamble) m_wifiPreamble);
+}
+
+enum mpduType
+WifiPhyTag::GetMpduType (void) const
+{
+  return m_mpduType;
+}
+
+} // namespace ns3
diff -Naur ns-3.25/src/wifi/model/wifi-phy-tag.h ns-3.26/src/wifi/model/wifi-phy-tag.h
--- ns-3.25/src/wifi/model/wifi-phy-tag.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/wifi/model/wifi-phy-tag.h	2016-10-03 19:49:01.831386282 -0700
@@ -0,0 +1,83 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 CTTC
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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: Nicola Baldo <nbaldo@cttc.es>
+ */
+#ifndef WIFI_PHY_TAG_H
+#define WIFI_PHY_TAG_H
+
+#include <ns3/tag.h>
+#include <ns3/wifi-tx-vector.h>
+#include <ns3/wifi-preamble.h>
+#include <ns3/wifi-phy.h>
+
+namespace ns3 {
+
+/**
+ * \ingroup wifi
+ *
+ * Tag for WifiTxVector and WifiPreamble information to be embedded in outgoing
+ * transmissions as a PacketTag
+ */
+class WifiPhyTag : public Tag
+{
+public:
+  static TypeId GetTypeId (void);
+  virtual TypeId GetInstanceTypeId (void) const;
+
+  /**
+   * Constructor
+   */
+  WifiPhyTag ();
+  /**
+   * Constructor
+   * \param txVector the WifiTxVector
+   * \param preamble the WifiPreamble
+   * \param mpduType the mpduType
+   */
+  WifiPhyTag (WifiTxVector txVector, WifiPreamble preamble, enum mpduType mpdutype);
+  /**
+   * Getter for WifiTxVector parameter
+   * \return the WifiTxVector
+   */
+  WifiTxVector GetWifiTxVector (void) const;
+  /**
+   * Getter for WifiPreamble parameter
+   * \return preamble the WifiPreamble
+   */
+  WifiPreamble GetWifiPreamble (void) const;
+  /**
+   * Getter for mpduType parameter
+   * \return mpduType the mpduType
+   */
+  enum mpduType GetMpduType (void) const;
+
+  // From class Tag
+  virtual uint32_t GetSerializedSize (void) const;
+  virtual void Serialize (TagBuffer i) const;
+  virtual void Deserialize (TagBuffer i);
+  virtual void Print (std::ostream &os) const;
+
+private:
+  WifiTxVector m_wifiTxVector;
+  int32_t m_wifiPreamble;
+  enum mpduType m_mpduType;
+};
+
+} // namespace ns3
+
+#endif /* WIFI_PHY_TAG_H */
diff -Naur ns-3.25/src/wifi/model/wifi-remote-station-manager.cc ns-3.26/src/wifi/model/wifi-remote-station-manager.cc
--- ns-3.25/src/wifi/model/wifi-remote-station-manager.cc	2016-10-03 20:57:08.542245342 -0700
+++ ns-3.26/src/wifi/model/wifi-remote-station-manager.cc	2016-10-03 19:49:01.837386237 -0700
@@ -569,18 +569,24 @@
 void
 WifiRemoteStationManager::AddAllSupportedModes (Mac48Address address)
 {
+  NS_LOG_FUNCTION (this << address);
   NS_ASSERT (!address.IsGroup ());
   WifiRemoteStationState *state = LookupState (address);
   state->m_operationalRateSet.clear ();
   for (uint32_t i = 0; i < m_wifiPhy->GetNModes (); i++)
     {
       state->m_operationalRateSet.push_back (m_wifiPhy->GetMode (i));
+      if (m_wifiPhy->GetMode (i).IsMandatory ())
+        {
+          AddBasicMode (m_wifiPhy->GetMode (i));
+        }
     }
 }
 
 void
 WifiRemoteStationManager::AddAllSupportedMcs (Mac48Address address)
 {
+  NS_LOG_FUNCTION (this << address);
   NS_ASSERT (!address.IsGroup ());
   WifiRemoteStationState *state = LookupState (address);
   state->m_operationalMcsSet.clear ();
diff -Naur ns-3.25/src/wifi/model/wifi-remote-station-manager.h ns-3.26/src/wifi/model/wifi-remote-station-manager.h
--- ns-3.25/src/wifi/model/wifi-remote-station-manager.h	2016-10-03 20:57:08.544245326 -0700
+++ ns-3.26/src/wifi/model/wifi-remote-station-manager.h	2016-10-03 19:49:01.838386230 -0700
@@ -187,7 +187,7 @@
    *
    * \param enable enable or disable HT capability support
    */
-  void SetHtSupported (bool enable);
+  virtual void SetHtSupported (bool enable);
   /**
    * Return whether the device has HT capability support enabled.
    *
@@ -199,7 +199,7 @@
    *
    * \param enable enable or disable VHT capability support
    */
-  void SetVhtSupported (bool enable);
+  virtual void SetVhtSupported (bool enable);
   /**
    * Return whether the device has VHT capability support enabled.
    *
diff -Naur ns-3.25/src/wifi/model/wifi-spectrum-phy-interface.cc ns-3.26/src/wifi/model/wifi-spectrum-phy-interface.cc
--- ns-3.25/src/wifi/model/wifi-spectrum-phy-interface.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/wifi/model/wifi-spectrum-phy-interface.cc	2016-10-03 19:49:01.839386222 -0700
@@ -0,0 +1,120 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 CTTC
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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: Nicola Baldo <nbaldo@cttc.es>
+ */
+
+#include <ns3/ptr.h>
+#include <ns3/object.h>
+#include <ns3/net-device.h>
+#include <ns3/mobility-model.h>
+#include <ns3/wifi-phy.h>
+#include <ns3/spectrum-phy.h>
+#include <ns3/spectrum-signal-parameters.h>
+#include <ns3/log.h>
+#include <ns3/spectrum-value.h>
+#include <ns3/antenna-model.h>
+
+#include "wifi-spectrum-phy-interface.h"
+#include "spectrum-wifi-phy.h"
+
+NS_LOG_COMPONENT_DEFINE ("WifiSpectrumPhyInterface");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (WifiSpectrumPhyInterface);
+
+TypeId
+WifiSpectrumPhyInterface::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::WifiSpectrumPhyInterface")
+    .SetParent<SpectrumPhy> ()
+    .SetGroupName ("Wifi");
+  return tid;
+}
+
+WifiSpectrumPhyInterface::WifiSpectrumPhyInterface ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+WifiSpectrumPhyInterface::DoDispose (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_spectrumWifiPhy = 0;
+  m_netDevice = 0;
+  m_channel = 0;
+}
+
+void WifiSpectrumPhyInterface::SetSpectrumWifiPhy (Ptr<SpectrumWifiPhy> spectrumWifiPhy)
+{
+  m_spectrumWifiPhy = spectrumWifiPhy;
+}
+
+Ptr<NetDevice>
+WifiSpectrumPhyInterface::GetDevice () const
+{
+  return m_netDevice;
+}
+
+Ptr<MobilityModel>
+WifiSpectrumPhyInterface::GetMobility ()
+{
+  return m_spectrumWifiPhy->GetMobility ();
+}
+
+void
+WifiSpectrumPhyInterface::SetDevice (Ptr<NetDevice> d)
+{
+  m_netDevice = d;
+}
+
+void
+WifiSpectrumPhyInterface::SetMobility (Ptr<MobilityModel> m)
+{
+  m_spectrumWifiPhy->SetMobility (m);
+}
+
+void
+WifiSpectrumPhyInterface::SetChannel (Ptr<SpectrumChannel> c)
+{
+  NS_LOG_FUNCTION (this << c);
+  m_channel = c;
+}
+
+Ptr<const SpectrumModel>
+WifiSpectrumPhyInterface::GetRxSpectrumModel () const
+{
+  return m_spectrumWifiPhy->GetRxSpectrumModel ();
+}
+
+Ptr<AntennaModel>
+WifiSpectrumPhyInterface::GetRxAntenna (void)
+{
+  NS_LOG_FUNCTION (this);
+  return m_spectrumWifiPhy->GetRxAntenna ();
+}
+
+void
+WifiSpectrumPhyInterface::StartRx (Ptr<SpectrumSignalParameters> params)
+{
+  m_spectrumWifiPhy->StartRx (params);
+}
+
+
+} //namespace ns3
diff -Naur ns-3.25/src/wifi/model/wifi-spectrum-phy-interface.h ns-3.26/src/wifi/model/wifi-spectrum-phy-interface.h
--- ns-3.25/src/wifi/model/wifi-spectrum-phy-interface.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/wifi/model/wifi-spectrum-phy-interface.h	2016-10-03 19:49:01.839386222 -0700
@@ -0,0 +1,72 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 CTTC
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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: Nicola Baldo <nbaldo@cttc.es>
+ */
+#ifndef WIFI_SPECTRUM_PHY_INTERFACE_H
+#define WIFI_SPECTRUM_PHY_INTERFACE_H
+
+#include <ns3/ptr.h>
+#include <ns3/object.h>
+#include <ns3/spectrum-phy.h>
+
+namespace ns3 {
+
+class SpectrumWifiPhy;
+
+/**
+ * \ingroup wifi
+ *
+ * This class is an adaptor between class SpectrumWifiPhy (which inherits
+ * from WifiPhy) and class SpectrumChannel (which expects objects derived
+ * from class SpectrumPhy to be connected to it).
+ *
+ * The adaptor is used only in the receive direction; in the transmit
+ * direction, the class SpectrumWifiPhy constructs signal parameters
+ * and directly accesses the SpectrumChannel
+ */
+class WifiSpectrumPhyInterface : public SpectrumPhy
+{
+public:
+  static TypeId GetTypeId (void);
+  WifiSpectrumPhyInterface ();
+  /**
+   * Connect SpectrumWifiPhy object
+   * \param phy SpectrumWifiPhy object to be connected to this object
+   */
+  void SetSpectrumWifiPhy (Ptr<SpectrumWifiPhy> phy);
+
+  // Inherited from SpectrumPhy
+  virtual Ptr<NetDevice> GetDevice () const;
+  virtual void SetDevice (Ptr<NetDevice> d);
+  virtual void SetMobility (Ptr<MobilityModel> m);
+  virtual Ptr<MobilityModel> GetMobility ();
+  virtual void SetChannel (Ptr<SpectrumChannel> c);
+  virtual Ptr<const SpectrumModel> GetRxSpectrumModel () const;
+  virtual Ptr<AntennaModel> GetRxAntenna ();
+  virtual void StartRx (Ptr<SpectrumSignalParameters> params);
+
+private:
+  virtual void DoDispose (void);
+  Ptr<SpectrumWifiPhy> m_spectrumWifiPhy;
+  Ptr<NetDevice> m_netDevice;
+  Ptr<SpectrumChannel> m_channel;
+};
+
+} // namespace ns3
+
+#endif  /* WIFI_SPECTRUM_PHY_INTERFACE_H */
diff -Naur ns-3.25/src/wifi/model/wifi-spectrum-signal-parameters.cc ns-3.26/src/wifi/model/wifi-spectrum-signal-parameters.cc
--- ns-3.25/src/wifi/model/wifi-spectrum-signal-parameters.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/wifi/model/wifi-spectrum-signal-parameters.cc	2016-10-03 19:49:01.839386222 -0700
@@ -0,0 +1,58 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 CTTC
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Nicola Baldo <nbaldo@cttc.es>
+ * Modified by Marco Miozzo <mmiozzo@cttc.es> (add data and ctrl diversity)
+ */
+
+#include <ns3/log.h>
+#include <ns3/packet.h>
+#include <ns3/ptr.h>
+#include "wifi-spectrum-signal-parameters.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("WifiSpectrumSignalParameters");
+
+WifiSpectrumSignalParameters::WifiSpectrumSignalParameters ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+WifiSpectrumSignalParameters::WifiSpectrumSignalParameters (const WifiSpectrumSignalParameters& p)
+  : SpectrumSignalParameters (p)
+{
+  NS_LOG_FUNCTION (this << &p);
+  packet = p.packet;
+}
+
+Ptr<SpectrumSignalParameters>
+WifiSpectrumSignalParameters::Copy ()
+{
+  NS_LOG_FUNCTION (this);
+  // Ideally we would use:
+  //   return Copy<WifiSpectrumSignalParameters> (*this);
+  // but for some reason it doesn't work. Another alternative is
+  //   return Copy<WifiSpectrumSignalParameters> (this);
+  // but it causes a double creation of the object, hence it is less efficient.
+  // The solution below is copied from the implementation of Copy<> (Ptr<>) in ptr.h
+  Ptr<WifiSpectrumSignalParameters> wssp (new WifiSpectrumSignalParameters (*this), false);
+  return wssp;
+}
+
+
+} // namespace ns3
diff -Naur ns-3.25/src/wifi/model/wifi-spectrum-signal-parameters.h ns-3.26/src/wifi/model/wifi-spectrum-signal-parameters.h
--- ns-3.25/src/wifi/model/wifi-spectrum-signal-parameters.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/wifi/model/wifi-spectrum-signal-parameters.h	2016-10-03 19:49:01.840386215 -0700
@@ -0,0 +1,60 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 CTTC
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Nicola Baldo <nbaldo@cttc.es>
+ * Modified by Marco Miozzo <mmiozzo@cttc.es> (add data and ctrl diversity)
+ */
+
+#ifndef WIFI_SPECTRUM_SIGNAL_PARAMETERS_H
+#define WIFI_SPECTRUM_SIGNAL_PARAMETERS_H
+
+#include <ns3/spectrum-signal-parameters.h>
+
+namespace ns3 {
+
+class Packet;
+
+/**
+ * \ingroup wifi
+ *
+ * Signal parameters for wifi
+ */
+struct WifiSpectrumSignalParameters : public SpectrumSignalParameters
+{
+
+  // inherited from SpectrumSignalParameters
+  virtual Ptr<SpectrumSignalParameters> Copy ();
+
+  /**
+   * default constructor
+   */
+  WifiSpectrumSignalParameters ();
+
+  /**
+   * copy constructor
+   */
+  WifiSpectrumSignalParameters (const WifiSpectrumSignalParameters& p);
+
+  /**
+   * The packet being transmitted with this signal
+   */
+  Ptr<Packet> packet;
+};
+
+}  // namespace ns3
+
+#endif /* WIFI_SPECTRUM_SIGNAL_PARAMETERS_H */
diff -Naur ns-3.25/src/wifi/model/wifi-tx-current-model.cc ns-3.26/src/wifi/model/wifi-tx-current-model.cc
--- ns-3.25/src/wifi/model/wifi-tx-current-model.cc	2016-10-03 20:57:08.544245326 -0700
+++ ns-3.26/src/wifi/model/wifi-tx-current-model.cc	2016-10-03 19:49:01.840386215 -0700
@@ -39,7 +39,7 @@
 {
   static TypeId tid = TypeId ("ns3::WifiTxCurrentModel")
     .SetParent<Object> ()
-    .SetGroupName ("Energy")
+    .SetGroupName ("Wifi")
   ;
   return tid;
 }
@@ -68,6 +68,7 @@
 {
   static TypeId tid = TypeId ("ns3::LinearWifiTxCurrentModel")
     .SetParent<WifiTxCurrentModel> ()
+    .SetGroupName ("Wifi")
     .AddConstructor<LinearWifiTxCurrentModel> ()
     .AddAttribute ("Eta", "The efficiency of the power amplifier.",
                    DoubleValue (0.10),
diff -Naur ns-3.25/src/wifi/model/yans-wifi-phy.cc ns-3.26/src/wifi/model/yans-wifi-phy.cc
--- ns-3.25/src/wifi/model/yans-wifi-phy.cc	2016-10-03 20:57:08.549245287 -0700
+++ ns-3.26/src/wifi/model/yans-wifi-phy.cc	2016-10-03 19:49:01.845386178 -0700
@@ -22,22 +22,12 @@
 
 #include "yans-wifi-phy.h"
 #include "yans-wifi-channel.h"
-#include "wifi-mode.h"
-#include "wifi-preamble.h"
 #include "wifi-phy-state-helper.h"
-#include "error-rate-model.h"
 #include "ns3/simulator.h"
 #include "ns3/packet.h"
 #include "ns3/assert.h"
 #include "ns3/log.h"
 #include "ns3/double.h"
-#include "ns3/uinteger.h"
-#include "ns3/enum.h"
-#include "ns3/pointer.h"
-#include "ns3/net-device.h"
-#include "ns3/trace-source-accessor.h"
-#include "ns3/boolean.h"
-#include "ns3/node.h"
 #include "ampdu-tag.h"
 #include <cmath>
 
@@ -54,153 +44,13 @@
     .SetParent<WifiPhy> ()
     .SetGroupName ("Wifi")
     .AddConstructor<YansWifiPhy> ()
-    .AddAttribute ("EnergyDetectionThreshold",
-                   "The energy of a received signal should be higher than "
-                   "this threshold (dbm) to allow the PHY layer to detect the signal.",
-                   DoubleValue (-96.0),
-                   MakeDoubleAccessor (&YansWifiPhy::SetEdThreshold,
-                                       &YansWifiPhy::GetEdThreshold),
-                   MakeDoubleChecker<double> ())
-    .AddAttribute ("CcaMode1Threshold",
-                   "The energy of a received signal should be higher than "
-                   "this threshold (dbm) to allow the PHY layer to declare CCA BUSY state.",
-                   DoubleValue (-99.0),
-                   MakeDoubleAccessor (&YansWifiPhy::SetCcaMode1Threshold,
-                                       &YansWifiPhy::GetCcaMode1Threshold),
-                   MakeDoubleChecker<double> ())
-    .AddAttribute ("TxGain",
-                   "Transmission gain (dB).",
-                   DoubleValue (1.0),
-                   MakeDoubleAccessor (&YansWifiPhy::SetTxGain,
-                                       &YansWifiPhy::GetTxGain),
-                   MakeDoubleChecker<double> ())
-    .AddAttribute ("RxGain",
-                   "Reception gain (dB).",
-                   DoubleValue (1.0),
-                   MakeDoubleAccessor (&YansWifiPhy::SetRxGain,
-                                       &YansWifiPhy::GetRxGain),
-                   MakeDoubleChecker<double> ())
-    .AddAttribute ("TxPowerLevels",
-                   "Number of transmission power levels available between "
-                   "TxPowerStart and TxPowerEnd included.",
-                   UintegerValue (1),
-                   MakeUintegerAccessor (&YansWifiPhy::m_nTxPower),
-                   MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("TxPowerEnd",
-                   "Maximum available transmission level (dbm).",
-                   DoubleValue (16.0206),
-                   MakeDoubleAccessor (&YansWifiPhy::SetTxPowerEnd,
-                                       &YansWifiPhy::GetTxPowerEnd),
-                   MakeDoubleChecker<double> ())
-    .AddAttribute ("TxPowerStart",
-                   "Minimum available transmission level (dbm).",
-                   DoubleValue (16.0206),
-                   MakeDoubleAccessor (&YansWifiPhy::SetTxPowerStart,
-                                       &YansWifiPhy::GetTxPowerStart),
-                   MakeDoubleChecker<double> ())
-    .AddAttribute ("RxNoiseFigure",
-                   "Loss (dB) in the Signal-to-Noise-Ratio due to non-idealities in the receiver."
-                   " According to Wikipedia (http://en.wikipedia.org/wiki/Noise_figure), this is "
-                   "\"the difference in decibels (dB) between"
-                   " the noise output of the actual receiver to the noise output of an "
-                   " ideal receiver with the same overall gain and bandwidth when the receivers "
-                   " are connected to sources at the standard noise temperature T0 (usually 290 K)\".",
-                   DoubleValue (7),
-                   MakeDoubleAccessor (&YansWifiPhy::SetRxNoiseFigure,
-                                       &YansWifiPhy::GetRxNoiseFigure),
-                   MakeDoubleChecker<double> ())
-    .AddAttribute ("State",
-                   "The state of the PHY layer.",
-                   PointerValue (),
-                   MakePointerAccessor (&YansWifiPhy::m_state),
-                   MakePointerChecker<WifiPhyStateHelper> ())
-    .AddAttribute ("ChannelSwitchDelay",
-                   "Delay between two short frames transmitted on different frequencies.",
-                   TimeValue (MicroSeconds (250)),
-                   MakeTimeAccessor (&YansWifiPhy::m_channelSwitchDelay),
-                   MakeTimeChecker ())
-    .AddAttribute ("ChannelNumber",
-                   "Channel center frequency = Channel starting frequency + 5 MHz * nch.",
-                   UintegerValue (1),
-                   MakeUintegerAccessor (&YansWifiPhy::SetChannelNumber,
-                                         &YansWifiPhy::GetChannelNumber),
-                   MakeUintegerChecker<uint16_t> ())
-    .AddAttribute ("Frequency",
-                   "The operating frequency.",
-                   UintegerValue (2407),
-                   MakeUintegerAccessor (&YansWifiPhy::GetFrequency,
-                                         &YansWifiPhy::SetFrequency),
-                   MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("TxAntennas",
-                   "The number of supported Tx antennas.",
-                   UintegerValue (1),
-                   MakeUintegerAccessor (&YansWifiPhy::GetNumberOfTransmitAntennas,
-                                         &YansWifiPhy::SetNumberOfTransmitAntennas),
-                   MakeUintegerChecker<uint32_t> ())
-    .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."
-                   "This parameter is only valuable for 802.11n/ac STAs and APs.",
-                   BooleanValue (false),
-                   MakeBooleanAccessor (&YansWifiPhy::GetGuardInterval,
-                                        &YansWifiPhy::SetGuardInterval),
-                   MakeBooleanChecker ())
-    .AddAttribute ("LdpcEnabled",
-                   "Whether or not LDPC is enabled.",
-                   BooleanValue (false),
-                   MakeBooleanAccessor (&YansWifiPhy::GetLdpc,
-                                        &YansWifiPhy::SetLdpc),
-                   MakeBooleanChecker ())
-    .AddAttribute ("STBCEnabled",
-                   "Whether or not STBC is enabled.",
-                   BooleanValue (false),
-                   MakeBooleanAccessor (&YansWifiPhy::GetStbc,
-                                        &YansWifiPhy::SetStbc),
-                   MakeBooleanChecker ())
-    .AddAttribute ("GreenfieldEnabled",
-                   "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),
-                   MakeUintegerAccessor (&YansWifiPhy::GetChannelWidth,
-                                         &YansWifiPhy::SetChannelWidth),
-                   MakeUintegerChecker<uint32_t> ())
   ;
   return tid;
 }
 
 YansWifiPhy::YansWifiPhy ()
-  : m_initialized (false),
-    m_channelNumber (1),
-    m_endRxEvent (),
-    m_endPlcpRxEvent (),
-    m_channelStartingFrequency (0),
-    m_mpdusNum (0),
-    m_plcpSuccess (false),
-    m_txMpduReferenceNumber (0xffffffff),
-    m_rxMpduReferenceNumber (0xffffffff)
 {
   NS_LOG_FUNCTION (this);
-  m_random = CreateObject<UniformRandomVariable> ();
-  m_state = CreateObject<WifiPhyStateHelper> ();
 }
 
 YansWifiPhy::~YansWifiPhy ()
@@ -213,263 +63,101 @@
 {
   NS_LOG_FUNCTION (this);
   m_channel = 0;
-  m_deviceRateSet.clear ();
-  m_deviceMcsSet.clear ();
-  m_device = 0;
-  m_mobility = 0;
-  m_state = 0;
 }
 
-void
-YansWifiPhy::DoInitialize ()
+bool
+YansWifiPhy::DoChannelSwitch (uint16_t nch)
 {
-  NS_LOG_FUNCTION (this);
-  m_initialized = true;
-}
+  if (!IsInitialized ())
+    {
+      //this is not channel switch, this is initialization
+      NS_LOG_DEBUG ("initialize to channel " << nch);
+      return true;
+    }
 
-void
-YansWifiPhy::ConfigureStandard (enum WifiPhyStandard standard)
-{
-  NS_LOG_FUNCTION (this << standard);
-  switch (standard)
+  NS_ASSERT (!IsStateSwitching ());
+  switch (m_state->GetState ())
     {
-    case WIFI_PHY_STANDARD_80211a:
-      Configure80211a ();
-      break;
-    case WIFI_PHY_STANDARD_80211b:
-      Configure80211b ();
-      break;
-    case WIFI_PHY_STANDARD_80211g:
-      Configure80211g ();
-      break;
-    case WIFI_PHY_STANDARD_80211_10MHZ:
-      Configure80211_10Mhz ();
-      break;
-    case WIFI_PHY_STANDARD_80211_5MHZ:
-      Configure80211_5Mhz ();
-      break;
-    case WIFI_PHY_STANDARD_holland:
-      ConfigureHolland ();
+    case YansWifiPhy::RX:
+      NS_LOG_DEBUG ("drop packet because of channel switching while reception");
+      m_endPlcpRxEvent.Cancel ();
+      m_endRxEvent.Cancel ();
+      goto switchChannel;
       break;
-    case WIFI_PHY_STANDARD_80211n_2_4GHZ:
-      m_channelStartingFrequency = 2407;
-      Configure80211n ();
+    case YansWifiPhy::TX:
+      NS_LOG_DEBUG ("channel switching postponed until end of current transmission");
+      Simulator::Schedule (GetDelayUntilIdle (), &WifiPhy::SetChannelNumber, this, nch);
       break;
-    case WIFI_PHY_STANDARD_80211n_5GHZ:
-      m_channelStartingFrequency = 5e3;
-      Configure80211n ();
+    case YansWifiPhy::CCA_BUSY:
+    case YansWifiPhy::IDLE:
+      goto switchChannel;
       break;
-    case WIFI_PHY_STANDARD_80211ac:
-      Configure80211ac ();
+    case YansWifiPhy::SLEEP:
+      NS_LOG_DEBUG ("channel switching ignored in sleep mode");
       break;
     default:
       NS_ASSERT (false);
       break;
     }
-}
-
-void
-YansWifiPhy::SetRxNoiseFigure (double noiseFigureDb)
-{
-  NS_LOG_FUNCTION (this << noiseFigureDb);
-  m_interference.SetNoiseFigure (DbToRatio (noiseFigureDb));
-}
-
-void
-YansWifiPhy::SetTxPowerStart (double start)
-{
-  NS_LOG_FUNCTION (this << start);
-  m_txPowerBaseDbm = start;
-}
-
-void
-YansWifiPhy::SetTxPowerEnd (double end)
-{
-  NS_LOG_FUNCTION (this << end);
-  m_txPowerEndDbm = end;
-}
 
-void
-YansWifiPhy::SetNTxPower (uint32_t n)
-{
-  NS_LOG_FUNCTION (this << n);
-  m_nTxPower = n;
-}
-
-void
-YansWifiPhy::SetTxGain (double gain)
-{
-  NS_LOG_FUNCTION (this << gain);
-  m_txGainDb = gain;
-}
-
-void
-YansWifiPhy::SetRxGain (double gain)
-{
-  NS_LOG_FUNCTION (this << gain);
-  m_rxGainDb = gain;
-}
-
-void
-YansWifiPhy::SetEdThreshold (double threshold)
-{
-  NS_LOG_FUNCTION (this << threshold);
-  m_edThresholdW = DbmToW (threshold);
-}
-
-void
-YansWifiPhy::SetCcaMode1Threshold (double threshold)
-{
-  NS_LOG_FUNCTION (this << threshold);
-  m_ccaMode1ThresholdW = DbmToW (threshold);
-}
-
-void
-YansWifiPhy::SetErrorRateModel (Ptr<ErrorRateModel> rate)
-{
-  m_interference.SetErrorRateModel (rate);
-}
-
-void
-YansWifiPhy::SetDevice (Ptr<NetDevice> device)
-{
-  m_device = device;
-}
-
-void
-YansWifiPhy::SetMobility (Ptr<MobilityModel> mobility)
-{
-  m_mobility = mobility;
-}
-
-double
-YansWifiPhy::GetRxNoiseFigure (void) const
-{
-  return RatioToDb (m_interference.GetNoiseFigure ());
-}
-
-double
-YansWifiPhy::GetTxPowerStart (void) const
-{
-  return m_txPowerBaseDbm;
-}
-
-double
-YansWifiPhy::GetTxPowerEnd (void) const
-{
-  return m_txPowerEndDbm;
-}
-
-double
-YansWifiPhy::GetTxGain (void) const
-{
-  return m_txGainDb;
-}
-
-double
-YansWifiPhy::GetRxGain (void) const
-{
-  return m_rxGainDb;
-}
-
-double
-YansWifiPhy::GetEdThreshold (void) const
-{
-  return WToDbm (m_edThresholdW);
-}
-
-double
-YansWifiPhy::GetCcaMode1Threshold (void) const
-{
-  return WToDbm (m_ccaMode1ThresholdW);
-}
-
-Ptr<ErrorRateModel>
-YansWifiPhy::GetErrorRateModel (void) const
-{
-  return m_interference.GetErrorRateModel ();
-}
-
-Ptr<NetDevice>
-YansWifiPhy::GetDevice (void) const
-{
-  return m_device;
-}
-
-Ptr<MobilityModel>
-YansWifiPhy::GetMobility (void)
-{
-  if (m_mobility != 0)
-    {
-      return m_mobility;
-    }
-  else
-    {
-      return m_device->GetNode ()->GetObject<MobilityModel> ();
-    }
-}
-
-double
-YansWifiPhy::CalculateSnr (WifiTxVector txVector, double ber) const
-{
-  return m_interference.GetErrorRateModel ()->CalculateSnr (txVector, ber);
-}
+  return false;
 
-Ptr<WifiChannel>
-YansWifiPhy::GetChannel (void) const
-{
-  return m_channel;
-}
+switchChannel:
 
-void
-YansWifiPhy::SetChannel (Ptr<YansWifiChannel> channel)
-{
-  m_channel = channel;
-  m_channel->Add (this);
+  NS_LOG_DEBUG ("switching channel " << GetChannelNumber () << " -> " << nch);
+  m_state->SwitchToChannelSwitching (GetChannelSwitchDelay ());
+  m_interference.EraseEvents ();
+  /*
+   * Needed here to be able to correctly sensed the medium for the first
+   * time after the switching. The actual switching is not performed until
+   * after m_channelSwitchDelay. Packets received during the switching
+   * state are added to the event list and are employed later to figure
+   * out the state of the medium after the switching.
+   */
+  return true;
 }
 
-void
-YansWifiPhy::SetChannelNumber (uint16_t nch)
+bool
+YansWifiPhy::DoFrequencySwitch (uint32_t frequency)
 {
-  if (!m_initialized)
+  if (!IsInitialized ())
     {
       //this is not channel switch, this is initialization
-      NS_LOG_DEBUG ("start at channel " << nch);
-      m_channelNumber = nch;
-      return;
+      NS_LOG_DEBUG ("start at frequency " << frequency);
+      return true;
     }
 
   NS_ASSERT (!IsStateSwitching ());
   switch (m_state->GetState ())
     {
     case YansWifiPhy::RX:
-      NS_LOG_DEBUG ("drop packet because of channel switching while reception");
+      NS_LOG_DEBUG ("drop packet because of channel/frequency switching while reception");
       m_endPlcpRxEvent.Cancel ();
       m_endRxEvent.Cancel ();
-      goto switchChannel;
+      goto switchFrequency;
       break;
     case YansWifiPhy::TX:
-      NS_LOG_DEBUG ("channel switching postponed until end of current transmission");
-      Simulator::Schedule (GetDelayUntilIdle (), &YansWifiPhy::SetChannelNumber, this, nch);
+      NS_LOG_DEBUG ("channel/frequency switching postponed until end of current transmission");
+      Simulator::Schedule (GetDelayUntilIdle (), &WifiPhy::SetFrequency, this, frequency);
       break;
     case YansWifiPhy::CCA_BUSY:
     case YansWifiPhy::IDLE:
-      goto switchChannel;
+      goto switchFrequency;
       break;
     case YansWifiPhy::SLEEP:
-      NS_LOG_DEBUG ("channel switching ignored in sleep mode");
+      NS_LOG_DEBUG ("frequency switching ignored in sleep mode");
       break;
     default:
       NS_ASSERT (false);
       break;
     }
 
-  return;
+  return false;
 
-switchChannel:
+switchFrequency:
 
-  NS_LOG_DEBUG ("switching channel " << m_channelNumber << " -> " << nch);
-  m_state->SwitchToChannelSwitching (m_channelSwitchDelay);
+  NS_LOG_DEBUG ("switching frequency " << GetFrequency () << " -> " << frequency);
+  m_state->SwitchToChannelSwitching (GetChannelSwitchDelay ());
   m_interference.EraseEvents ();
   /*
    * Needed here to be able to correctly sensed the medium for the first
@@ -478,25 +166,20 @@
    * state are added to the event list and are employed later to figure
    * out the state of the medium after the switching.
    */
-  m_channelNumber = nch;
+  return true;
 }
 
-uint16_t
-YansWifiPhy::GetChannelNumber (void) const
-{
-  return m_channelNumber;
-}
-
-Time
-YansWifiPhy::GetChannelSwitchDelay (void) const
+Ptr<WifiChannel>
+YansWifiPhy::GetChannel (void) const
 {
-  return m_channelSwitchDelay;
+  return m_channel;
 }
 
-double
-YansWifiPhy::GetChannelFrequencyMhz () const
+void
+YansWifiPhy::SetChannel (Ptr<YansWifiChannel> channel)
 {
-  return m_channelStartingFrequency + 5 * GetChannelNumber ();
+  m_channel = channel;
+  m_channel->Add (this);
 }
 
 void
@@ -549,7 +232,7 @@
     case YansWifiPhy::SLEEP:
       {
         NS_LOG_DEBUG ("resuming from sleep mode");
-        Time delayUntilCcaEnd = m_interference.GetEnergyDuration (m_ccaMode1ThresholdW);
+        Time delayUntilCcaEnd = m_interference.GetEnergyDuration (DbmToW (GetCcaMode1Threshold ()));
         m_state->SwitchFromSleep (delayUntilCcaEnd);
         break;
       }
@@ -585,7 +268,7 @@
   //Note: plcp preamble reception is not yet modeled.
   NS_LOG_FUNCTION (this << packet << rxPowerDbm << txVector.GetMode () << preamble << (uint32_t)mpdutype);
   AmpduTag ampduTag;
-  rxPowerDbm += m_rxGainDb;
+  rxPowerDbm += GetRxGain ();
   double rxPowerW = DbmToW (rxPowerDbm);
   Time endRx = Simulator::Now () + rxDuration;
   Time preambleAndHeaderDuration = CalculatePlcpPreambleAndHeaderDuration (txVector, preamble);
@@ -642,39 +325,40 @@
       break;
     case YansWifiPhy::CCA_BUSY:
     case YansWifiPhy::IDLE:
-      if (rxPowerW > m_edThresholdW) //checked here, no need to check in the payload reception (current implementation assumes constant rx power over the packet duration)
+      if (rxPowerW > GetEdThresholdW ()) //checked here, no need to check in the payload reception (current implementation assumes constant rx power over the packet duration)
         {
-          if (preamble == WIFI_PREAMBLE_NONE && m_mpdusNum == 0)
+          if (preamble == WIFI_PREAMBLE_NONE && (m_mpdusNum == 0 || m_plcpSuccess == false))
             {
-              NS_LOG_DEBUG ("drop packet because no preamble has been received");
-              NotifyRxDrop (packet);
-              goto maybeCcaBusy;
-            }
-          else if (preamble == WIFI_PREAMBLE_NONE && m_plcpSuccess == false) //A-MPDU reception fails
-            {
-              NS_LOG_DEBUG ("Drop MPDU because no plcp has been received");
+              m_plcpSuccess = false;
+              m_mpdusNum = 0;
+              NS_LOG_DEBUG ("drop packet because no PLCP preamble/header has been received");
               NotifyRxDrop (packet);
               goto maybeCcaBusy;
             }
           else if (preamble != WIFI_PREAMBLE_NONE && packet->PeekPacketTag (ampduTag) && m_mpdusNum == 0)
             {
               //received the first MPDU in an MPDU
-              m_mpdusNum = ampduTag.GetNoOfMpdus () - 1;
+              m_mpdusNum = ampduTag.GetRemainingNbOfMpdus ();
               m_rxMpduReferenceNumber++;
             }
           else if (preamble == WIFI_PREAMBLE_NONE && packet->PeekPacketTag (ampduTag) && m_mpdusNum > 0)
             {
               //received the other MPDUs that are part of the A-MPDU
-              if (ampduTag.GetNoOfMpdus () < m_mpdusNum)
+              if (ampduTag.GetRemainingNbOfMpdus () < (m_mpdusNum - 1))
                 {
-                  NS_LOG_DEBUG ("Missing MPDU from the A-MPDU " << m_mpdusNum - ampduTag.GetNoOfMpdus ());
-                  m_mpdusNum = ampduTag.GetNoOfMpdus ();
+                  NS_LOG_DEBUG ("Missing MPDU from the A-MPDU " << m_mpdusNum - ampduTag.GetRemainingNbOfMpdus ());
+                  m_mpdusNum = ampduTag.GetRemainingNbOfMpdus ();
                 }
               else
                 {
                   m_mpdusNum--;
                 }
             }
+          else if (preamble != WIFI_PREAMBLE_NONE && packet->PeekPacketTag (ampduTag) && m_mpdusNum > 0)
+            {
+              NS_LOG_DEBUG ("New A-MPDU started while " << m_mpdusNum << " MPDUs from previous are lost");
+              m_mpdusNum = ampduTag.GetRemainingNbOfMpdus ();
+            }
           else if (preamble != WIFI_PREAMBLE_NONE && m_mpdusNum > 0 )
             {
               NS_LOG_DEBUG ("Didn't receive the last MPDUs from an A-MPDU " << m_mpdusNum);
@@ -702,7 +386,7 @@
       else
         {
           NS_LOG_DEBUG ("drop packet because signal power too Small (" <<
-                        rxPowerW << "<" << m_edThresholdW << ")");
+                        rxPowerW << "<" << GetEdThresholdW () << ")");
           NotifyRxDrop (packet);
           m_plcpSuccess = false;
           goto maybeCcaBusy;
@@ -723,7 +407,7 @@
   //In this model, CCA becomes busy when the aggregation of all signals as
   //tracked by the InterferenceHelper class is higher than the CcaBusyThreshold
 
-  Time delayUntilCcaEnd = m_interference.GetEnergyDuration (m_ccaMode1ThresholdW);
+  Time delayUntilCcaEnd = m_interference.GetEnergyDuration (DbmToW (GetCcaMode1Threshold ()));
   if (!delayUntilCcaEnd.IsZero ())
     {
       m_state->SwitchMaybeToCcaBusy (delayUntilCcaEnd);
@@ -740,7 +424,6 @@
   NS_LOG_FUNCTION (this << packet << txVector.GetMode () << preamble << (uint32_t)mpdutype);
   NS_ASSERT (IsStateRx ());
   NS_ASSERT (m_endPlcpRxEvent.IsExpired ());
-  AmpduTag ampduTag;
   WifiMode txMode = txVector.GetMode ();
 
   struct InterferenceHelper::SnrPer snrPer;
@@ -824,256 +507,9 @@
   struct mpduInfo aMpdu;
   aMpdu.type = mpdutype;
   aMpdu.mpduRefNumber = m_txMpduReferenceNumber;
-  NotifyMonitorSniffTx (packet, (uint16_t)GetChannelFrequencyMhz (), GetChannelNumber (), dataRate500KbpsUnits, preamble, txVector, aMpdu);
+  NotifyMonitorSniffTx (packet, (uint16_t)GetFrequency (), 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, mpdutype, txDuration);
-}
-
-uint32_t
-YansWifiPhy::GetNModes (void) const
-{
-  return m_deviceRateSet.size ();
-}
-
-WifiMode
-YansWifiPhy::GetMode (uint32_t mode) const
-{
-  return m_deviceRateSet[mode];
-}
-
-bool
-YansWifiPhy::IsModeSupported (WifiMode mode) const
-{
-  for (uint32_t i = 0; i < GetNModes (); i++)
-    {
-      if (mode == GetMode (i))
-        {
-          return true;
-        }
-    }
-  return false;
-}
-bool
-YansWifiPhy::IsMcsSupported (WifiMode mcs)
-{
-  for (uint32_t i = 0; i < GetNMcs (); i++)
-    {
-      if (mcs == GetMcs (i))
-        {
-          return true;
-        }
-    }
-  return false;
-}
-
-uint32_t
-YansWifiPhy::GetNTxPower (void) const
-{
-  return m_nTxPower;
-}
-
-void
-YansWifiPhy::Configure80211a (void)
-{
-  NS_LOG_FUNCTION (this);
-  m_channelStartingFrequency = 5e3; //5.000 GHz
-  SetChannelWidth (20); //20 MHz
-
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate6Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate9Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate12Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate18Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate24Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate36Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate48Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate54Mbps ());
-}
-
-void
-YansWifiPhy::Configure80211b (void)
-{
-  NS_LOG_FUNCTION (this);
-  m_channelStartingFrequency = 2407; //2.407 GHz
-  SetChannelWidth (22); //22 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::GetDsssRate11Mbps ());
-}
-
-void
-YansWifiPhy::Configure80211g (void)
-{
-  NS_LOG_FUNCTION (this);
-  Configure80211b ();
-  SetChannelWidth (20); //20 MHz
-
-  m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate6Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate9Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate12Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate18Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate24Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate36Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate48Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate54Mbps ());
-}
-
-void
-YansWifiPhy::Configure80211_10Mhz (void)
-{
-  NS_LOG_FUNCTION (this);
-  m_channelStartingFrequency = 5e3; //5.000 GHz, suppose 802.11a
-  SetChannelWidth (10); //10 MHz
-
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate3MbpsBW10MHz ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate4_5MbpsBW10MHz ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate6MbpsBW10MHz ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate9MbpsBW10MHz ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate12MbpsBW10MHz ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate18MbpsBW10MHz ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate24MbpsBW10MHz ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate27MbpsBW10MHz ());
-}
-
-void
-YansWifiPhy::Configure80211_5Mhz (void)
-{
-  NS_LOG_FUNCTION (this);
-  m_channelStartingFrequency = 5e3; //5.000 GHz, suppose 802.11a
-  SetChannelWidth (5); //5 MHz
-
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate1_5MbpsBW5MHz ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate2_25MbpsBW5MHz ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate3MbpsBW5MHz ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate4_5MbpsBW5MHz ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate6MbpsBW5MHz ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate9MbpsBW5MHz ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate12MbpsBW5MHz ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate13_5MbpsBW5MHz ());
-}
-
-void
-YansWifiPhy::ConfigureHolland (void)
-{
-  NS_LOG_FUNCTION (this);
-  m_channelStartingFrequency = 5e3; //5.000 GHz
-  SetChannelWidth (20); //20 MHz
-
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate6Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate12Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate18Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate36Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate54Mbps ());
-}
-
-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);
-  if (m_channelStartingFrequency >= 2400 && m_channelStartingFrequency <= 2500) //at 2.4 GHz
-    {
-      Configure80211b ();
-      Configure80211g ();
-    }
-  if (m_channelStartingFrequency >= 5000 && m_channelStartingFrequency <= 6000) //at 5 GHz
-    {
-      Configure80211a ();
-    }
-  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
-  Configure80211n ();
-  SetChannelWidth (80); //80 MHz
-
-  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs0 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs1 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs2 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs3 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs4 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs5 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs6 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs7 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs8 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs9 ());
-
-  m_bssMembershipSelectorSet.push_back (VHT_PHY);
+  m_channel->Send (this, packet, GetPowerDbm (txVector.GetTxPowerLevel ()) + GetTxGain (), txVector, preamble, mpdutype, txDuration);
 }
 
 void
@@ -1088,116 +524,6 @@
   m_state->UnregisterListener (listener);
 }
 
-bool
-YansWifiPhy::IsStateCcaBusy (void)
-{
-  return m_state->IsStateCcaBusy ();
-}
-
-bool
-YansWifiPhy::IsStateIdle (void)
-{
-  return m_state->IsStateIdle ();
-}
-
-bool
-YansWifiPhy::IsStateBusy (void)
-{
-  return m_state->IsStateBusy ();
-}
-
-bool
-YansWifiPhy::IsStateRx (void)
-{
-  return m_state->IsStateRx ();
-}
-
-bool
-YansWifiPhy::IsStateTx (void)
-{
-  return m_state->IsStateTx ();
-}
-
-bool
-YansWifiPhy::IsStateSwitching (void)
-{
-  return m_state->IsStateSwitching ();
-}
-
-bool
-YansWifiPhy::IsStateSleep (void)
-{
-  return m_state->IsStateSleep ();
-}
-
-Time
-YansWifiPhy::GetStateDuration (void)
-{
-  return m_state->GetStateDuration ();
-}
-
-Time
-YansWifiPhy::GetDelayUntilIdle (void)
-{
-  return m_state->GetDelayUntilIdle ();
-}
-
-Time
-YansWifiPhy::GetLastRxStartTime (void) const
-{
-  return m_state->GetLastRxStartTime ();
-}
-
-double
-YansWifiPhy::DbToRatio (double dB) const
-{
-  double ratio = std::pow (10.0, dB / 10.0);
-  return ratio;
-}
-
-double
-YansWifiPhy::DbmToW (double dBm) const
-{
-  double mW = std::pow (10.0, dBm / 10.0);
-  return mW / 1000.0;
-}
-
-double
-YansWifiPhy::WToDbm (double w) const
-{
-  return 10.0 * std::log10 (w * 1000.0);
-}
-
-double
-YansWifiPhy::RatioToDb (double ratio) const
-{
-  return 10.0 * std::log10 (ratio);
-}
-
-double
-YansWifiPhy::GetEdThresholdW (void) const
-{
-  return m_edThresholdW;
-}
-
-double
-YansWifiPhy::GetPowerDbm (uint8_t power) const
-{
-  NS_ASSERT (m_txPowerBaseDbm <= m_txPowerEndDbm);
-  NS_ASSERT (m_nTxPower > 0);
-  double dbm;
-  if (m_nTxPower > 1)
-    {
-      dbm = m_txPowerBaseDbm + power * (m_txPowerEndDbm - m_txPowerBaseDbm) / (m_nTxPower - 1);
-    }
-  else
-    {
-      NS_ASSERT_MSG (m_txPowerBaseDbm == m_txPowerEndDbm, "cannot have TxPowerEnd != TxPowerStart with TxPowerLevels == 1");
-      dbm = m_txPowerBaseDbm;
-    }
-  return dbm;
-}
-
 void
 YansWifiPhy::EndReceive (Ptr<Packet> packet, enum WifiPreamble preamble, enum mpduType mpdutype, Ptr<InterferenceHelper::Event> event)
 {
@@ -1232,21 +558,19 @@
           struct mpduInfo aMpdu;
           aMpdu.type = mpdutype;
           aMpdu.mpduRefNumber = m_rxMpduReferenceNumber;
-          NotifyMonitorSniffRx (packet, (uint16_t)GetChannelFrequencyMhz (), GetChannelNumber (), dataRate500KbpsUnits, event->GetPreambleType (), event->GetTxVector (), aMpdu, signalNoise);
+          NotifyMonitorSniffRx (packet, (uint16_t)GetFrequency (), GetChannelNumber (), dataRate500KbpsUnits, event->GetPreambleType (), event->GetTxVector (), aMpdu, signalNoise);
           m_state->SwitchFromRxEndOk (packet, snrPer.snr, event->GetTxVector (), event->GetPreambleType ());
         }
       else
         {
           /* failure. */
           NotifyRxDrop (packet);
-          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);
+          m_state->SwitchFromRxEndError (packet, snrPer.snr);
         }
     }
   else
     {
-      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);
+      m_state->SwitchFromRxEndError (packet, snrPer.snr);
     }
 
   if (preamble == WIFI_PREAMBLE_NONE && mpdutype == LAST_MPDU_IN_AGGREGATE)
@@ -1255,213 +579,4 @@
     }
 }
 
-int64_t
-YansWifiPhy::AssignStreams (int64_t stream)
-{
-  NS_LOG_FUNCTION (this << stream);
-  m_random->SetStream (stream);
-  return 1;
-}
-
-void
-YansWifiPhy::SetFrequency (uint32_t freq)
-{
-  m_channelStartingFrequency = freq;
-}
-
-void
-YansWifiPhy::SetNumberOfTransmitAntennas (uint32_t tx)
-{
-  m_numberOfTransmitters = tx;
-  ConfigureHtDeviceMcsSet ();
-}
-
-void
-YansWifiPhy::SetNumberOfReceiveAntennas (uint32_t rx)
-{
-  m_numberOfReceivers = rx;
-}
-
-void
-YansWifiPhy::SetLdpc (bool Ldpc)
-{
-  m_ldpc = Ldpc;
-}
-
-void
-YansWifiPhy::SetStbc (bool stbc)
-{
-  m_stbc = stbc;
-}
-
-void
-YansWifiPhy::SetGreenfield (bool greenfield)
-{
-  m_greenfield = greenfield;
-}
-
-bool
-YansWifiPhy::GetGuardInterval (void) const
-{
-  return m_guardInterval;
-}
-
-void
-YansWifiPhy::SetGuardInterval (bool guardInterval)
-{
-  m_guardInterval = guardInterval;
-}
-
-uint32_t
-YansWifiPhy::GetFrequency (void) const
-{
-  return m_channelStartingFrequency;
-}
-
-uint32_t
-YansWifiPhy::GetNumberOfTransmitAntennas (void) const
-{
-  return m_numberOfTransmitters;
-}
-
-uint32_t
-YansWifiPhy::GetNumberOfReceiveAntennas (void) const
-{
-  return m_numberOfReceivers;
-}
-
-bool
-YansWifiPhy::GetLdpc (void) const
-{
-  return m_ldpc;
-}
-
-bool
-YansWifiPhy::GetStbc (void) const
-{
-  return m_stbc;
-}
-
-bool
-YansWifiPhy::GetGreenfield (void) const
-{
-  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
-YansWifiPhy::GetChannelWidth (void) const
-{
-  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
-{
-  return m_bssMembershipSelectorSet.size ();
-}
-
-uint32_t
-YansWifiPhy::GetBssMembershipSelector (uint32_t selector) const
-{
-  return m_bssMembershipSelectorSet[selector];
-}
-
-WifiModeList
-YansWifiPhy::GetMembershipSelectorModes (uint32_t selector)
-{
-  uint32_t id = GetBssMembershipSelector (selector);
-  WifiModeList supportedmodes;
-  if (id == HT_PHY || id == VHT_PHY)
-    {
-      //mandatory MCS 0 to 7
-      supportedmodes.push_back (WifiPhy::GetHtMcs0 ());
-      supportedmodes.push_back (WifiPhy::GetHtMcs1 ());
-      supportedmodes.push_back (WifiPhy::GetHtMcs2 ());
-      supportedmodes.push_back (WifiPhy::GetHtMcs3 ());
-      supportedmodes.push_back (WifiPhy::GetHtMcs4 ());
-      supportedmodes.push_back (WifiPhy::GetHtMcs5 ());
-      supportedmodes.push_back (WifiPhy::GetHtMcs6 ());
-      supportedmodes.push_back (WifiPhy::GetHtMcs7 ());
-    }
-  if (id == VHT_PHY)
-    {
-      //mandatory MCS 0 to 9
-      supportedmodes.push_back (WifiPhy::GetVhtMcs0 ());
-      supportedmodes.push_back (WifiPhy::GetVhtMcs1 ());
-      supportedmodes.push_back (WifiPhy::GetVhtMcs2 ());
-      supportedmodes.push_back (WifiPhy::GetVhtMcs3 ());
-      supportedmodes.push_back (WifiPhy::GetVhtMcs4 ());
-      supportedmodes.push_back (WifiPhy::GetVhtMcs5 ());
-      supportedmodes.push_back (WifiPhy::GetVhtMcs6 ());
-      supportedmodes.push_back (WifiPhy::GetVhtMcs7 ());
-      supportedmodes.push_back (WifiPhy::GetVhtMcs8 ());
-      supportedmodes.push_back (WifiPhy::GetVhtMcs9 ());
-    }
-  return supportedmodes;
-}
-
-uint8_t
-YansWifiPhy::GetNMcs (void) const
-{
-  return m_deviceMcsSet.size ();
-}
-
-WifiMode
-YansWifiPhy::GetMcs (uint8_t mcs) const
-{
-  return m_deviceMcsSet[mcs];
-}
-
 } //namespace ns3
diff -Naur ns-3.25/src/wifi/model/yans-wifi-phy.h ns-3.26/src/wifi/model/yans-wifi-phy.h
--- ns-3.25/src/wifi/model/yans-wifi-phy.h	2016-10-03 20:57:08.550245280 -0700
+++ ns-3.26/src/wifi/model/yans-wifi-phy.h	2016-10-03 19:49:01.845386178 -0700
@@ -23,30 +23,11 @@
 #ifndef YANS_WIFI_PHY_H
 #define YANS_WIFI_PHY_H
 
-#include <stdint.h>
-#include "ns3/callback.h"
-#include "ns3/event-id.h"
-#include "ns3/packet.h"
-#include "ns3/object.h"
-#include "ns3/traced-callback.h"
-#include "ns3/nstime.h"
-#include "ns3/ptr.h"
-#include "ns3/random-variable-stream.h"
-#include "ns3/mobility-model.h"
 #include "wifi-phy.h"
-#include "wifi-mode.h"
-#include "wifi-preamble.h"
-#include "wifi-phy-standard.h"
-#include "interference-helper.h"
 
 namespace ns3 {
 
-#define VHT_PHY 126
-#define HT_PHY 127
-
 class YansWifiChannel;
-class WifiPhyStateHelper;
-
 
 /**
  * \brief 802.11 PHY layer model
@@ -77,28 +58,6 @@
    * \param channel the YansWifiChannel this YansWifiPhy is to be connected to
    */
   void SetChannel (Ptr<YansWifiChannel> channel);
-  /**
-   * Set the current channel number.
-   *
-   * \param id the channel number
-   */
-  void SetChannelNumber (uint16_t id);
-  /**
-   * Return the current channel number.
-   *
-   * \return the current channel number
-   */
-  uint16_t GetChannelNumber (void) const;
-  /**
-   * \return the required time for channel switch operation of this WifiPhy
-   */
-  Time GetChannelSwitchDelay (void) const;
-  /**
-   * Return current center channel frequency in MHz.
-   *
-   * \return the current center channel frequency in MHz
-   */
-  double GetChannelFrequencyMhz () const;
 
   /**
    * Starting receiving the plcp of a packet (i.e. the first bit of the preamble has arrived).
@@ -131,152 +90,6 @@
                            enum mpduType mpdutype,
                            Ptr<InterferenceHelper::Event> event);
 
-  /**
-   * Sets the RX loss (dB) in the Signal-to-Noise-Ratio due to non-idealities in the receiver.
-   *
-   * \param noiseFigureDb noise figure in dB
-   */
-  void SetRxNoiseFigure (double noiseFigureDb);
-  /**
-   * Sets the minimum available transmission power level (dBm).
-   *
-   * \param start the minimum transmission power level (dBm)
-   */
-  void SetTxPowerStart (double start);
-  /**
-   * Sets the maximum available transmission power level (dBm).
-   *
-   * \param end the maximum transmission power level (dBm)
-   */
-  void SetTxPowerEnd (double end);
-  /**
-   * Sets the number of transmission power levels available between the
-   * minimum level and the maximum level. Transmission power levels are
-   * equally separated (in dBm) with the minimum and the maximum included.
-   *
-   * \param n the number of available levels
-   */
-  void SetNTxPower (uint32_t n);
-  /**
-   * Sets the transmission gain (dB).
-   *
-   * \param gain the transmission gain in dB
-   */
-  void SetTxGain (double gain);
-  /**
-   * Sets the reception gain (dB).
-   *
-   * \param gain the reception gain in dB
-   */
-  void SetRxGain (double gain);
-  /**
-   * Sets the energy detection threshold (dBm).
-   * The energy of a received signal should be higher than
-   * this threshold (dbm) to allow the PHY layer to detect the signal.
-   *
-   * \param threshold the energy detction threshold in dBm
-   */
-  void SetEdThreshold (double threshold);
-  /**
-   * Sets the CCA threshold (dBm). The energy of a received signal
-   * should be higher than this threshold to allow the PHY
-   * layer to declare CCA BUSY state.
-   *
-   * \param threshold the CCA threshold in dBm
-   */
-  void SetCcaMode1Threshold (double threshold);
-  /**
-   * Sets the error rate model.
-   *
-   * \param rate the error rate model
-   */
-  void SetErrorRateModel (Ptr<ErrorRateModel> rate);
-  /**
-   * Sets the device this PHY is associated with.
-   *
-   * \param device the device this PHY is associated with
-   */
-  void SetDevice (Ptr<NetDevice> device);
-  /**
-   * \brief assign a mobility model to this device
-   *
-   * This method allows a user to specify a mobility model that should be
-   * associated with this physical layer.  Calling this method is optional
-   * and only necessary if the user wants to override the mobility model
-   * that is aggregated to the node.
-   *
-   * \param mobility the mobility model this PHY is associated with
-   */
-  void SetMobility (Ptr<MobilityModel> mobility);
-  /**
-   * Return the RX noise figure (dBm).
-   *
-   * \return the RX noise figure in dBm
-   */
-  double GetRxNoiseFigure (void) const;
-  /**
-   * Return the transmission gain (dB).
-   *
-   * \return the transmission gain in dB
-   */
-  double GetTxGain (void) const;
-  /**
-   * Return the reception gain (dB).
-   *
-   * \return the reception gain in dB
-   */
-  double GetRxGain (void) const;
-  /**
-   * Return the energy detection threshold (dBm).
-   *
-   * \return the energy detection threshold in dBm
-   */
-  double GetEdThreshold (void) const;
-  /**
-   * Return the CCA threshold (dBm).
-   *
-   * \return the CCA threshold in dBm
-   */
-  double GetCcaMode1Threshold (void) const;
-  /**
-   * Return the error rate model this PHY is using.
-   *
-   * \return the error rate model this PHY is using
-   */
-  Ptr<ErrorRateModel> GetErrorRateModel (void) const;
-  /**
-   * Return the device this PHY is associated with
-   *
-   * \return the device this PHY is associated with
-   */
-  Ptr<NetDevice> GetDevice (void) const;
-  /**
-   * Return the mobility model this PHY is associated with.
-   * This method will return either the mobility model that has been
-   * explicitly set by a call to YansWifiPhy::SetMobility(), or else
-   * will return the mobility model (if any) that has been aggregated
-   * to the node.
-   *
-   * \return the mobility model this PHY is associated with
-   */
-  Ptr<MobilityModel> GetMobility (void);
-  /**
-   * Return the minimum available transmission power level (dBm).
-   * \return the minimum available transmission power level (dBm)
-   */
-  virtual double GetTxPowerStart (void) const;
-  /**
-   * Return the maximum available transmission power level (dBm).
-   * \return the maximum available transmission power level (dBm)
-   */
-  virtual double GetTxPowerEnd (void) const;
-  /**
-   * Return the number of available transmission power levels.
-   *
-   * \return the number of available transmission power levels
-   */
-  virtual uint32_t GetNTxPower (void) const;
-
   virtual void SetReceiveOkCallback (WifiPhy::RxOkCallback callback);
   virtual void SetReceiveErrorCallback (WifiPhy::RxErrorCallback callback);
   virtual void SendPacket (Ptr<const Packet> packet, WifiTxVector txVector, enum WifiPreamble preamble);
@@ -285,237 +98,15 @@
   virtual void UnregisterListener (WifiPhyListener *listener);
   virtual void SetSleepMode (void);
   virtual void ResumeFromSleep (void);
-  virtual bool IsStateCcaBusy (void);
-  virtual bool IsStateIdle (void);
-  virtual bool IsStateBusy (void);
-  virtual bool IsStateRx (void);
-  virtual bool IsStateTx (void);
-  virtual bool IsStateSwitching (void);
-  virtual bool IsStateSleep (void);
-  virtual Time GetStateDuration (void);
-  virtual Time GetDelayUntilIdle (void);
-  virtual Time GetLastRxStartTime (void) const;
-  virtual uint32_t GetNModes (void) const;
-  virtual WifiMode GetMode (uint32_t mode) const;
-  virtual bool IsModeSupported (WifiMode mode) const;
-  virtual bool IsMcsSupported (WifiMode mcs);
-  virtual double CalculateSnr (WifiTxVector txVector, double ber) const;
   virtual Ptr<WifiChannel> GetChannel (void) const;
 
-  virtual void ConfigureStandard (enum WifiPhyStandard standard);
-
-  /**
-   * 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);
-
-  /**
-   * \param freq the operating frequency on this node (2.4 GHz or 5GHz).
-   */
-  virtual void SetFrequency (uint32_t freq);
-  /**
-   * \return the operating frequency on this node
-   */
-  virtual uint32_t GetFrequency (void) const;
-  /**
-   * \param tx the number of transmitters on this node.
-   */
-  virtual void SetNumberOfTransmitAntennas (uint32_t tx);
-  /**
-   * \return the number of transmitters on this node.
-   */
-  virtual uint32_t GetNumberOfTransmitAntennas (void) const;
-  /**
-   * \param rx the number of receivers on this node.
-   */
-  virtual void SetNumberOfReceiveAntennas (uint32_t rx);
-  /**
-   * \return the number of receivers on this node.
-   */
-  virtual uint32_t GetNumberOfReceiveAntennas (void) const;
-  /**
-   * Enable or disable short/long guard interval.
-   *
-   * \param guardInterval Enable or disable guard interval
-   */
-  virtual void SetGuardInterval (bool guardInterval);
-  /**
-   * Return whether guard interval is being used.
-   *
-   * \return true if guard interval is being used, false otherwise
-   */
-  virtual bool GetGuardInterval (void) const;
-  /**
-   * Enable or disable LDPC.
-   * \param ldpc Enable or disable LDPC
-   */
-  virtual void SetLdpc (bool ldpc);
-  /**
-   * Return if LDPC is supported.
-   *
-   * \return true if LDPC is supported, false otherwise
-   */
-  virtual bool GetLdpc (void) const;
-  /**
-   * Enable or disable STBC.
-   *
-   * \param stbc Enable or disable STBC
-   */
-  virtual void SetStbc (bool stbc);
-  /**
-   * Return whether STBC is supported.
-   *
-   * \return true if STBC is supported, false otherwise
-   */
-  virtual bool GetStbc (void) const;
-  /**
-   * Enable or disable Greenfield support.
-   *
-   * \param greenfield Enable or disable Greenfield
-   */
-  virtual void SetGreenfield (bool greenfield);
-  /**
-   * Return whether Greenfield is supported.
-   *
-   * \return true if Greenfield is supported, false otherwise
-   */
-  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
-   */
-  virtual uint32_t GetChannelWidth (void) const;
-  /**
-   * Set channel width.
-   *
-   * \param channel width
-   */
-  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);
-
-  /**
-   * \return the number of MCS supported by this phy
-   */
-  virtual uint8_t GetNMcs (void) const;
-  virtual WifiMode GetMcs (uint8_t mcs) const;
-
-private:
-  virtual void DoInitialize (void);
+protected:
+  // Inherited
   virtual void DoDispose (void);
+  virtual bool DoChannelSwitch (uint16_t id);
+  virtual bool DoFrequencySwitch (uint32_t frequency);
 
-  /**
-   * Configure YansWifiPhy with appropriate channel frequency and
-   * supported rates for 802.11a standard.
-   */
-  void Configure80211a (void);
-  /**
-   * Configure YansWifiPhy with appropriate channel frequency and
-   * supported rates for 802.11b standard.
-   */
-  void Configure80211b (void);
-  /**
-   * Configure YansWifiPhy with appropriate channel frequency and
-   * supported rates for 802.11g standard.
-   */
-  void Configure80211g (void);
-  /**
-   * Configure YansWifiPhy with appropriate channel frequency and
-   * supported rates for 802.11a standard with 10MHz channel spacing.
-   */
-  void Configure80211_10Mhz (void);
-  /**
-   * Configure YansWifiPhy with appropriate channel frequency and
-   * supported rates for 802.11a standard with 5MHz channel spacing.
-   */
-  void Configure80211_5Mhz ();
-  void ConfigureHolland (void);
-  /**
-   * Configure YansWifiPhy with appropriate channel frequency and
-   * supported rates for 802.11n standard.
-   */
-  void Configure80211n (void);
-  /**
-   * Configure YansWifiPhy with appropriate channel frequency and
-   * supported rates for 802.11ac standard.
-   */
-  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.
-   */
-  double GetEdThresholdW (void) const;
-  /**
-   * Convert from dBm to Watts.
-   *
-   * \param dbm the power in dBm
-   *
-   * \return the equivalent Watts for the given dBm
-   */
-  double DbmToW (double dbm) const;
-  /**
-   * Convert from dB to ratio.
-   *
-   * \param db
-   *
-   * \return ratio
-   */
-  double DbToRatio (double db) const;
-  /**
-   * Convert from Watts to dBm.
-   *
-   * \param w the power in Watts
-   *
-   * \return the equivalent dBm for the given Watts
-   */
-  double WToDbm (double w) const;
-  /**
-   * Convert from ratio to dB.
-   *
-   * \param ratio
-   *
-   * \return dB
-   */
-  double RatioToDb (double ratio) const;
-  /**
-   * Get the power of the given power level in dBm.
-   * In YansWifiPhy implementation, the power levels are equally spaced (in dBm).
-   *
-   * \param power the power level
-   *
-   * \return the transmission power in dBm at the given power level
-   */
-  double GetPowerDbm (uint8_t power) const;
+private:
   /**
    * The last bit of the packet has arrived.
    *
@@ -526,82 +117,7 @@
    */
   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
-  double   m_ccaMode1ThresholdW;  //!< Clear channel assessment (CCA) threshold in watts
-  double   m_txGainDb;            //!< Transmission gain (dB)
-  double   m_rxGainDb;            //!< Reception gain (dB)
-  double   m_txPowerBaseDbm;      //!< Minimum transmission power (dBm)
-  double   m_txPowerEndDbm;       //!< Maximum transmission power (dBm)
-  uint32_t m_nTxPower;            //!< Number of available transmission power levels
-
   Ptr<YansWifiChannel> m_channel;        //!< YansWifiChannel that this YansWifiPhy is connected to
-  uint16_t             m_channelNumber;  //!< Operating channel number
-  Ptr<NetDevice>       m_device;         //!< Pointer to the device
-  Ptr<MobilityModel>   m_mobility;       //!< Pointer to the mobility model
-
-  uint32_t m_numberOfTransmitters;  //!< Number of transmitters
-  uint32_t m_numberOfReceivers;     //!< Number of receivers
-  bool     m_ldpc;                  //!< Flag if LDPC is used
-  bool     m_stbc;                  //!< Flag if STBC is used
-  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
-   * WifiPhy(-derived class) can support. In conversation we call this
-   * the DeviceRateSet (not a term you'll find in the standard), and
-   * it is a superset of standard-defined parameters such as the
-   * OperationalRateSet, and the BSSBasicRateSet (which, themselves,
-   * have a superset/subset relationship).
-   *
-   * Mandatory rates relevant to this WifiPhy can be found by
-   * iterating over this vector looking for WifiMode objects for which
-   * WifiMode::IsMandatory() is true.
-   *
-   * A quick note is appropriate here (well, here is as good a place
-   * as any I can find)...
-   *
-   * In the standard there is no text that explicitly precludes
-   * production of a device that does not support some rates that are
-   * mandatory (according to the standard) for PHYs that the device
-   * happens to fully or partially support.
-   *
-   * This approach is taken by some devices which choose to only support,
-   * for example, 6 and 9 Mbps ERP-OFDM rates for cost and power
-   * consumption reasons (i.e., these devices don't need to be designed
-   * for and waste current on the increased linearity requirement of
-   * higher-order constellations when 6 and 9 Mbps more than meet their
-   * data requirements). The wording of the standard allows such devices
-   * to have an OperationalRateSet which includes 6 and 9 Mbps ERP-OFDM
-   * rates, despite 12 and 24 Mbps being "mandatory" rates for the
-   * ERP-OFDM PHY.
-   *
-   * Now this doesn't actually have any impact on code, yet. It is,
-   * however, something that we need to keep in mind for the
-   * future. Basically, the key point is that we can't be making
-   * assumptions like "the Operational Rate Set will contain all the
-   * mandatory rates".
-   */
-  WifiModeList m_deviceRateSet;
-  WifiModeList m_deviceMcsSet;
-
-  std::vector<uint32_t> m_bssMembershipSelectorSet;
-  EventId m_endRxEvent;
-  EventId m_endPlcpRxEvent;
-
-  Ptr<UniformRandomVariable> m_random;  //!< Provides uniform random variables.
-  double m_channelStartingFrequency;    //!< Standard-dependent center frequency of 0-th channel in MHz
-  Ptr<WifiPhyStateHelper> m_state;      //!< Pointer to WifiPhyStateHelper
-  InterferenceHelper m_interference;    //!< Pointer to InterferenceHelper
-  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.25/src/wifi/test/dcf-manager-test.cc ns-3.26/src/wifi/test/dcf-manager-test.cc
--- ns-3.25/src/wifi/test/dcf-manager-test.cc	2016-10-03 20:57:08.552245264 -0700
+++ ns-3.26/src/wifi/test/dcf-manager-test.cc	2016-10-03 19:49:01.847386163 -0700
@@ -76,8 +76,8 @@
   void StartTest (uint64_t slotTime, uint64_t sifs, uint64_t eifsNoDifsNoSifs, uint32_t ackTimeoutValue = 20);
   void AddDcfState (uint32_t aifsn);
   void EndTest (void);
-  void ExpectInternalCollision (uint64_t time, uint32_t from, uint32_t nSlots);
-  void ExpectCollision (uint64_t time, uint32_t from, uint32_t nSlots);
+  void ExpectInternalCollision (uint64_t time, uint32_t nSlots, uint32_t from);
+  void ExpectCollision (uint64_t time, uint32_t nSlots, uint32_t from);
   void AddRxOkEvt (uint64_t at, uint64_t duration);
   void AddRxErrorEvt (uint64_t at, uint64_t duration);
   void AddRxInsideSifsEvt (uint64_t at, uint64_t duration);
@@ -170,11 +170,14 @@
 {
   DcfStateTest *state = m_dcfStates[i];
   NS_TEST_EXPECT_MSG_EQ (state->m_expectedGrants.empty (), false, "Have expected grants");
-  std::pair<uint64_t, uint64_t> expected = state->m_expectedGrants.front ();
-  state->m_expectedGrants.pop_front ();
-  NS_TEST_EXPECT_MSG_EQ (Simulator::Now (), MicroSeconds (expected.second), "Expected access grant is now");
-  m_dcfManager->NotifyTxStartNow (MicroSeconds (expected.first));
-  m_dcfManager->NotifyAckTimeoutStartNow (MicroSeconds (m_ackTimeoutValue + expected.first));
+  if (!state->m_expectedGrants.empty ())
+    {
+      std::pair<uint64_t, uint64_t> expected = state->m_expectedGrants.front ();
+      state->m_expectedGrants.pop_front ();
+      NS_TEST_EXPECT_MSG_EQ (Simulator::Now (), MicroSeconds (expected.second), "Expected access grant is now");
+      m_dcfManager->NotifyTxStartNow (MicroSeconds (expected.first));
+      m_dcfManager->NotifyAckTimeoutStartNow (MicroSeconds (m_ackTimeoutValue + expected.first));
+    } 
 }
 
 void
@@ -190,10 +193,13 @@
 {
   DcfStateTest *state = m_dcfStates[i];
   NS_TEST_EXPECT_MSG_EQ (state->m_expectedInternalCollision.empty (), false, "Have expected internal collisions");
-  struct DcfStateTest::ExpectedCollision expected = state->m_expectedInternalCollision.front ();
-  state->m_expectedInternalCollision.pop_front ();
-  NS_TEST_EXPECT_MSG_EQ (Simulator::Now (), MicroSeconds (expected.at), "Expected internal collision time is now");
-  state->StartBackoffNow (expected.nSlots);
+  if (!state->m_expectedInternalCollision.empty ())
+    {
+      struct DcfStateTest::ExpectedCollision expected = state->m_expectedInternalCollision.front ();
+      state->m_expectedInternalCollision.pop_front ();
+      NS_TEST_EXPECT_MSG_EQ (Simulator::Now (), MicroSeconds (expected.at), "Expected internal collision time is now");
+      state->StartBackoffNow (expected.nSlots);
+    }
 }
 
 void
@@ -201,10 +207,13 @@
 {
   DcfStateTest *state = m_dcfStates[i];
   NS_TEST_EXPECT_MSG_EQ (state->m_expectedCollision.empty (), false, "Have expected collisions");
-  struct DcfStateTest::ExpectedCollision expected = state->m_expectedCollision.front ();
-  state->m_expectedCollision.pop_front ();
-  NS_TEST_EXPECT_MSG_EQ (Simulator::Now (), MicroSeconds (expected.at), "Expected collision is now");
-  state->StartBackoffNow (expected.nSlots);
+  if (!state->m_expectedCollision.empty ())
+    {
+      struct DcfStateTest::ExpectedCollision expected = state->m_expectedCollision.front ();
+      state->m_expectedCollision.pop_front ();
+      NS_TEST_EXPECT_MSG_EQ (Simulator::Now (), MicroSeconds (expected.at), "Expected collision is now");
+      state->StartBackoffNow (expected.nSlots);
+    }
 }
 
 void
@@ -387,14 +396,28 @@
 void
 DcfManagerTest::DoRun (void)
 {
+  // Bug 2369 addresses this case
   //  0      3       4    5      8       9  10   12
   //  | sifs | aifsn | tx | sifs | aifsn |   | tx |
   //
   StartTest (1, 3, 10);
   AddDcfState (1);
   AddAccessRequest (1, 1, 4, 0);
+  // Generate backoff when the request is within SIFS
+  ExpectCollision (1, 0, 0); // 0 slots
   AddAccessRequest (10, 2, 10, 0);
   EndTest ();
+  // Bug 2369 addresses this case
+  //  0      3       5    6      9       11  12   13
+  //  | sifs | aifsn | tx | sifs | aifsn |   | tx |
+  //
+  StartTest (1, 3, 10);
+  AddDcfState (2);
+  AddAccessRequest (4, 1, 5, 0);
+  // Generate backoff when the request is within AIFSN
+  ExpectCollision (4, 0, 0); // 0 slots
+  AddAccessRequest (12, 2, 12, 0);
+  EndTest ();
   // Check that receiving inside SIFS shall be cancelled properly:
   //  0      3       4    5      8     9     12       13 14
   //  | sifs | aifsn | tx | sifs | ack | sifs | aifsn |  |tx |
@@ -403,6 +426,7 @@
   StartTest (1, 3, 10);
   AddDcfState (1);
   AddAccessRequest (1, 1, 4, 0);
+  ExpectCollision (1, 0, 0); 
   AddRxInsideSifsEvt (6, 10);
   AddTxEvt (8, 1);
   AddAccessRequest (14, 2, 14, 0);
@@ -452,23 +476,31 @@
   ExpectCollision (30, 0, 0); //backoff: 0 slots
   EndTest ();
 
-  // The test below is subject to some discussion because I am
-  // not sure I understand the intent of the spec here.
-  // i.e., what happens if you make a request to get access
-  // to the medium during the difs idle time after a busy period ?
-  // do you need to start a backoff ? Or do you need to wait until
-  // the end of difs and access the medium ?
-  // Here, we wait until the end of difs and access the medium.
+  // Bug 2369.  Test case of requesting access within SIFS interval
   //
-  //  20    60     66      70   72
-  //   | rx  | sifs | aifsn | tx |
+  //  20    60     66      70         74
+  //   | rx  | sifs | aifsn | backoff | tx |
   //           |
   //          62 request access.
   //
   StartTest (4, 6, 10);
   AddDcfState (1);
   AddRxOkEvt (20, 40);
-  AddAccessRequest (62, 2, 70, 0);
+  AddAccessRequest (62, 2, 74, 0);
+  ExpectCollision (62, 1, 0); //backoff: 1 slots
+  EndTest ();
+
+  // Bug 2369.  Test case of requesting access after DIFS (no backoff)
+  //
+  //  20    60     66      70
+  //   | rx  | sifs | aifsn | tx |
+  //                        |
+  //                       70 request access.
+  //
+  StartTest (4, 6, 10);
+  AddDcfState (1);
+  AddRxOkEvt (20, 40);
+  AddAccessRequest (70, 2, 70, 0);
   EndTest ();
 
   // Test an EIFS
@@ -528,6 +560,7 @@
   AddDcfState (0); //low priority DCF
   AddAccessRequestWithAckTimeout (20, 20, 20, 0);
   AddAccessRequest (50, 10, 66, 1);
+  ExpectCollision (50, 0, 1);
   EndTest ();
 
   // Test of AckTimeout handling:
@@ -544,6 +577,7 @@
   AddDcfState (0); //low priority DCF
   AddAccessRequestWithSuccessfullAck (20, 20, 20, 2, 0);
   AddAccessRequest (41, 10, 48, 1);
+  ExpectCollision (41, 0, 1);
   EndTest ();
 
   //Repeat the same but with one queue:
@@ -554,18 +588,7 @@
   AddDcfState (2);
   AddAccessRequestWithSuccessfullAck (20, 20, 20, 2, 0);
   AddAccessRequest (41, 10, 56, 0);
-  EndTest ();
-
-  //Repeat the same when ack was delayed:
-  //and request the next access before previous tx end:
-  //            20       39  40       42              64      74
-  // DCF0 - low  |     tx     |got ack |sifs + 4 * slot|       |
-  //                      ^ request access
-  StartTest (4, 6, 10);
-  AddDcfState (2);
-  AddAccessRequestWithSuccessfullAck (20, 20, 20, 2, 0);
-  AddAccessRequest (39, 10, 64, 0);
-  ExpectCollision (39, 2, 0); //backoff: 2 slot
+  ExpectCollision (41, 0, 0);
   EndTest ();
 
   // test simple NAV count. This scenario modelizes a simple DATA+ACK handshake
@@ -621,10 +644,11 @@
   AddDcfState (1);
   AddSwitchingEvt (0,20);
   AddAccessRequest (21, 1, 24, 0);
+  ExpectCollision (21, 0, 0);
   EndTest ();
 
-  //  20          40       50     53      54   55
-  //   | switching |  busy  | sifs | aifsn | tx |
+  //  20          40       50     53      54       55        56   57
+  //   | switching |  busy  | sifs | aifsn | bslot0 | bslot 1 | tx | 
   //         |          |
   //        30 busy.   45 access request.
   //
@@ -632,7 +656,8 @@
   AddDcfState (1);
   AddSwitchingEvt (20,20);
   AddCcaBusyEvt (30,20);
-  AddAccessRequest (45, 1, 54, 0);
+  ExpectCollision (45, 2, 0); //backoff: 2 slots
+  AddAccessRequest (45, 1, 56, 0);
   EndTest ();
 
   //  20     30          50     53      54   55
@@ -645,6 +670,7 @@
   AddRxStartEvt (20,40);
   AddSwitchingEvt (30,20);
   AddAccessRequest (51, 1, 54, 0);
+  ExpectCollision (51, 0, 0);
   EndTest ();
 
   //  20     30          50     53      54   55
@@ -657,6 +683,7 @@
   AddCcaBusyEvt (20,40);
   AddSwitchingEvt (30,20);
   AddAccessRequest (51, 1, 54, 0);
+  ExpectCollision (51, 0, 0);
   EndTest ();
 
   //  20      30          50     53      54   55
@@ -669,6 +696,7 @@
   AddNavStart (20,40);
   AddSwitchingEvt (30,20);
   AddAccessRequest (51, 1, 54, 0);
+  ExpectCollision (51, 0, 0);
   EndTest ();
 
   //  20      40             50          55     58      59   60
@@ -680,8 +708,10 @@
   AddDcfState (1);
   AddAccessRequestWithAckTimeout (20, 20, 20, 0);
   AddAccessRequest (45, 1, 50, 0);
+  ExpectCollision (45, 0, 0);
   AddSwitchingEvt (50,5);
   AddAccessRequest (56, 1, 59, 0);
+  ExpectCollision (56, 0, 0);
   EndTest ();
 
   //  20         60     66      70       74       78  80         100    106     110  112
@@ -696,6 +726,7 @@
   ExpectCollision (30, 4, 0); //backoff: 4 slots
   AddSwitchingEvt (80,20);
   AddAccessRequest (101, 2, 110, 0);
+  ExpectCollision (101, 0, 0); //backoff: 0 slots
   EndTest ();
 }
 
diff -Naur ns-3.25/src/wifi/test/power-rate-adaptation-test.cc ns-3.26/src/wifi/test/power-rate-adaptation-test.cc
--- ns-3.25/src/wifi/test/power-rate-adaptation-test.cc	2016-10-03 20:57:08.553245256 -0700
+++ ns-3.26/src/wifi/test/power-rate-adaptation-test.cc	2016-10-03 19:49:01.848386155 -0700
@@ -330,11 +330,7 @@
   NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate (txVector.GetChannelWidth (), txVector.IsShortGuardInterval (), 1), 54000000, "PARF: Incorrect vale of data rate");
   NS_TEST_ASSERT_MSG_EQ (power, 17, "PARF: Incorrect value of power level");
 
-  Simulator::Stop (Seconds (10.0));
-
-  Simulator::Run ();
   Simulator::Destroy ();
-
 }
 
 void
@@ -348,8 +344,8 @@
   /*
    * Configure thresholds for rate and power control.
    */
-  manager->SetAttribute ("SuccessThreshold 1",UintegerValue (3));
-  manager->SetAttribute ("SuccessThreshold 2",UintegerValue (10));
+  manager->SetAttribute ("SuccessThreshold1",UintegerValue (3));
+  manager->SetAttribute ("SuccessThreshold2",UintegerValue (10));
   manager->SetAttribute ("FailThreshold",UintegerValue (1));
   manager->SetAttribute ("PowerThreshold",UintegerValue (10));
 
@@ -570,11 +566,7 @@
   NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate (txVector.GetChannelWidth (), txVector.IsShortGuardInterval (), 1), 54000000, "APARF: Incorrect vale of data rate");
   NS_TEST_ASSERT_MSG_EQ (power, 17, "APARF: Incorrect value of power level");
 
-  Simulator::Stop (Seconds (10.0));
-
-  Simulator::Run ();
   Simulator::Destroy ();
-
 }
 
 void
diff -Naur ns-3.25/src/wifi/test/spectrum-wifi-phy-test.cc ns-3.26/src/wifi/test/spectrum-wifi-phy-test.cc
--- ns-3.25/src/wifi/test/spectrum-wifi-phy-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.26/src/wifi/test/spectrum-wifi-phy-test.cc	2016-10-03 19:49:01.848386155 -0700
@@ -0,0 +1,263 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 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/packet.h"
+#include "ns3/tag.h"
+#include "ns3/packet-burst.h"
+#include "ns3/spectrum-wifi-helper.h"
+#include "ns3/wifi-spectrum-value-helper.h"
+#include "ns3/spectrum-wifi-phy.h"
+#include "ns3/interference-helper.h"
+#include "ns3/nist-error-rate-model.h"
+#include "ns3/wifi-mac-header.h"
+#include "ns3/wifi-mac-trailer.h"
+#include "ns3/wifi-phy-tag.h"
+#include "ns3/wifi-phy-standard.h"
+#include "ns3/wifi-spectrum-signal-parameters.h"
+
+using namespace ns3;
+
+static const uint16_t CHANNEL_NUMBER = 36;
+static const uint32_t FREQUENCY = 5180; // MHz
+static const uint32_t CHANNEL_WIDTH = 20; // MHz
+
+class SpectrumWifiPhyBasicTest : public TestCase
+{
+public:
+  SpectrumWifiPhyBasicTest ();
+  SpectrumWifiPhyBasicTest (std::string name);
+  virtual ~SpectrumWifiPhyBasicTest ();
+protected:
+  virtual void DoSetup (void);
+  Ptr<SpectrumWifiPhy> m_phy;
+  Ptr<SpectrumSignalParameters> MakeSignal (double txPowerWatts);
+  void SendSignal (double txPowerWatts);
+  void SpectrumWifiPhyReceiver (bool rxSucceeded);
+  uint32_t m_count;
+private:
+  virtual void DoRun (void);
+};
+
+SpectrumWifiPhyBasicTest::SpectrumWifiPhyBasicTest ()
+  : TestCase ("SpectrumWifiPhy test case receives one packet"),
+    m_count (0)
+{
+}
+
+SpectrumWifiPhyBasicTest::SpectrumWifiPhyBasicTest (std::string name)
+  : TestCase (name),
+    m_count (0)
+{
+}
+
+// Make a Wi-Fi signal to inject directly to the StartRx() method
+Ptr<SpectrumSignalParameters> 
+SpectrumWifiPhyBasicTest::MakeSignal (double txPowerWatts)
+{
+  WifiPreamble preamble;
+  preamble = WIFI_PREAMBLE_LONG;
+  WifiMode mode = WifiPhy::GetOfdmRate6Mbps ();
+  WifiTxVector txVector = WifiTxVector (mode, 0, 0, false, 1, 0, 20000000, false, false);
+  enum mpduType mpdutype = NORMAL_MPDU;
+
+  Ptr<Packet> pkt = Create<Packet> (1000);
+  WifiMacHeader hdr;
+  WifiMacTrailer trailer;
+
+  hdr.SetType (WIFI_MAC_QOSDATA);
+  hdr.SetQosTid (0);
+  uint32_t size = pkt->GetSize () + hdr.GetSize () + trailer.GetSerializedSize ();
+  Time txDuration = m_phy->CalculateTxDuration (size, txVector, preamble, m_phy->GetFrequency(), mpdutype, 0);
+  hdr.SetDuration (txDuration);
+
+  pkt->AddHeader (hdr);
+  pkt->AddTrailer (trailer);
+  WifiPhyTag tag (txVector, preamble, mpdutype);
+  pkt->AddPacketTag (tag);
+  Ptr<SpectrumValue> txPowerSpectrum = WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity (FREQUENCY, CHANNEL_WIDTH, txPowerWatts);
+  Ptr<WifiSpectrumSignalParameters> txParams = Create<WifiSpectrumSignalParameters> ();
+  txParams->psd = txPowerSpectrum;
+  txParams->txPhy = 0;
+  txParams->duration = txDuration;
+  txParams->packet = pkt;
+  return txParams;
+}
+
+// Make a Wi-Fi signal to inject directly to the StartRx() method
+void
+SpectrumWifiPhyBasicTest::SendSignal (double txPowerWatts)
+{
+  m_phy->StartRx (MakeSignal (txPowerWatts));
+}
+
+void
+SpectrumWifiPhyBasicTest::SpectrumWifiPhyReceiver (bool rxSucceeded)
+{
+  m_count++;
+}
+
+SpectrumWifiPhyBasicTest::~SpectrumWifiPhyBasicTest ()
+{
+}
+
+// Create necessary objects, and inject signals.  Test that the expected
+// number of packet receptions occur.
+void
+SpectrumWifiPhyBasicTest::DoSetup (void)
+{
+  m_phy = CreateObject<SpectrumWifiPhy> ();
+  m_phy->ConfigureStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+  Ptr<ErrorRateModel> error = CreateObject<NistErrorRateModel> ();
+  m_phy->SetErrorRateModel (error);
+  m_phy->SetChannelNumber (CHANNEL_NUMBER);
+  m_phy->SetFrequency (FREQUENCY);
+  m_phy->SetPacketReceivedCallback (MakeCallback (&SpectrumWifiPhyBasicTest::SpectrumWifiPhyReceiver, this));
+  //Bug 2460: CcaMode1Threshold default should be set to -62 dBm when using Spectrum
+  m_phy->SetCcaMode1Threshold (-62.0);
+}
+
+// Test that the expected number of packet receptions occur.
+void
+SpectrumWifiPhyBasicTest::DoRun (void)
+{
+  double txPowerWatts = 0.010;
+  // Send packets spaced 1 second apart; all should be received
+  Simulator::Schedule (Seconds (1), &SpectrumWifiPhyBasicTest::SendSignal, this, txPowerWatts); 
+  Simulator::Schedule (Seconds (2), &SpectrumWifiPhyBasicTest::SendSignal, this, txPowerWatts); 
+  Simulator::Schedule (Seconds (3), &SpectrumWifiPhyBasicTest::SendSignal, this, txPowerWatts); 
+  // Send packets spaced 1 microsecond second apart; only one should be received
+  Simulator::Schedule (MicroSeconds (4000000), &SpectrumWifiPhyBasicTest::SendSignal, this, txPowerWatts); 
+  Simulator::Schedule (MicroSeconds (4000001), &SpectrumWifiPhyBasicTest::SendSignal, this, txPowerWatts); 
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+  NS_TEST_ASSERT_MSG_EQ (m_count, 4, "Didn't receive right number of packets");
+}
+
+class TestPhyListener : public ns3::WifiPhyListener
+{
+public:
+  /**
+   * Create a test PhyListener
+   *
+   */
+  TestPhyListener (void) :
+    m_notifyRxStart (0),
+    m_notifyRxEndOk (0),
+    m_notifyRxEndError (0),
+    m_notifyMaybeCcaBusyStart (0)
+  {
+  }
+  virtual ~TestPhyListener ()
+  {
+  }
+  virtual void NotifyRxStart (Time duration)
+  {
+    ++m_notifyRxStart;
+  }
+  virtual void NotifyRxEndOk (void)
+  {
+    ++m_notifyRxEndOk;
+  }
+  virtual void NotifyRxEndError (void)
+  {
+    ++m_notifyRxEndError;
+  }
+  virtual void NotifyTxStart (Time duration, double txPowerDbm)
+  {
+  }
+  virtual void NotifyMaybeCcaBusyStart (Time duration)
+  {
+    ++m_notifyMaybeCcaBusyStart;
+  }
+  virtual void NotifySwitchingStart (Time duration)
+  {
+  }
+  virtual void NotifySleep (void)
+  {
+  }
+  virtual void NotifyWakeup (void)
+  {
+  }
+  uint32_t m_notifyRxStart;
+  uint32_t m_notifyRxEndOk;
+  uint32_t m_notifyRxEndError;
+  uint32_t m_notifyMaybeCcaBusyStart;
+private:
+};
+
+
+class SpectrumWifiPhyListenerTest : public SpectrumWifiPhyBasicTest
+{
+public:
+  SpectrumWifiPhyListenerTest ();
+  virtual ~SpectrumWifiPhyListenerTest ();
+private:
+  virtual void DoSetup (void);
+  virtual void DoRun (void);
+  TestPhyListener* m_listener;
+};
+
+SpectrumWifiPhyListenerTest::SpectrumWifiPhyListenerTest ()
+  : SpectrumWifiPhyBasicTest ("SpectrumWifiPhy test operation of WifiPhyListener")
+{
+}
+
+SpectrumWifiPhyListenerTest::~SpectrumWifiPhyListenerTest ()
+{
+}
+
+void
+SpectrumWifiPhyListenerTest::DoSetup (void)
+{
+  SpectrumWifiPhyBasicTest::DoSetup ();
+  m_listener = new TestPhyListener;
+  m_phy->RegisterListener (m_listener);
+}
+
+void
+SpectrumWifiPhyListenerTest::DoRun (void)
+{
+  double txPowerWatts = 0.010;
+  Simulator::Schedule (Seconds (1), &SpectrumWifiPhyListenerTest::SendSignal, this, txPowerWatts); 
+  Simulator::Run ();
+
+  NS_TEST_ASSERT_MSG_EQ (m_count, 1, "Didn't receive right number of packets");
+  NS_TEST_ASSERT_MSG_EQ (m_listener->m_notifyRxStart, 1, "Didn't receive NotifyRxStart");
+  NS_TEST_ASSERT_MSG_EQ (m_listener->m_notifyRxEndOk, 1, "Didn't receive NotifyRxEnd");
+  NS_TEST_ASSERT_MSG_EQ (m_listener->m_notifyMaybeCcaBusyStart, 0, "Received NotifyMaybeCcaBusyStart unexpectedly");
+
+  Simulator::Destroy ();
+  delete m_listener;
+}
+
+class SpectrumWifiPhyTestSuite : public TestSuite
+{
+public:
+  SpectrumWifiPhyTestSuite ();
+};
+
+SpectrumWifiPhyTestSuite::SpectrumWifiPhyTestSuite ()
+  : TestSuite ("spectrum-wifi-phy", UNIT)
+{
+  AddTestCase (new SpectrumWifiPhyBasicTest, TestCase::QUICK);
+  AddTestCase (new SpectrumWifiPhyListenerTest, TestCase::QUICK);
+}
+
+static SpectrumWifiPhyTestSuite spectrumWifiPhyTestSuite;
diff -Naur ns-3.25/src/wifi/test/wifi-test.cc ns-3.26/src/wifi/test/wifi-test.cc
--- ns-3.25/src/wifi/test/wifi-test.cc	2016-10-03 20:57:08.555245241 -0700
+++ ns-3.26/src/wifi/test/wifi-test.cc	2016-10-03 19:49:01.851386133 -0700
@@ -17,8 +17,8 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
- *          Quincy Tse <quincy.tse@nicta.com.au> (Case for Bug 991)
- *          Sébastien Deronne <sebastien.deronne@gmail.com> (Case for bug 730)
+ *          Quincy Tse <quincy.tse@nicta.com.au>
+ *          Sébastien Deronne <sebastien.deronne@gmail.com>
  */
 
 #include "ns3/yans-wifi-helper.h"
@@ -329,39 +329,58 @@
 //-----------------------------------------------------------------------------
 /**
  * Make sure that when multiple broadcast packets are queued on the same
- * device in a short succession no virtual collision occurs
+ * device in a short succession, that:
+ * 1) no backoff occurs if the frame arrives and the idle time >= DIFS or AIFSn
+ *    (this is 'DCF immediate access', Figure 9-3 of IEEE 802.11-2012)
+ * 2) a backoff occurs for the second frame that arrives (this is clearly
+ *    stated in Sec. 9.3.4.2 of IEEE 802.11-2012, (basic access, which 
+ *    applies to group-addressed frames) where it states
+ *    "If, under these conditions, the medium is determined by the CS 
+ *    mechanism to be busy when a STA desires to initiate the initial frame 
+ *    of a frame exchange sequence (described in Annex G), exclusive of the 
+ *    CF period, the random backoff procedure described in 9.3.4.3 
+ *    shall be followed."
+ *    and from 9.3.4.3
+ *    "The result of this procedure is that transmitted
+ *    frames from a STA are always separated by at least one backoff interval."
  *
  * The observed behavior is that the first frame will be sent immediately,
- * and the frames are spaced by (backoff + SIFS + AIFS) time intervals
+ * and the frames are spaced by (backoff + DIFS) time intervals
  * (where backoff is a random number of slot sizes up to maximum CW)
  *
- * The following test case should _not_ generate virtual collision for the second frame.
- * The seed and run numbers were pick such that the second frame gets backoff = 0.
+ * The following test case should _not_ generate virtual collision for 
+ * the second frame.  The seed and run numbers were pick such that the 
+ * second frame gets backoff = 1 slot.
  *
  *                      frame 1, frame 2
- *                      arrive                SIFS + AIFS
- *                      V                    <----------->
+ *                      arrive                DIFS = 2 x slot + SIFS
+ *                      |                          = 2 x 9us + 16us for 11a
+ *                      |                    <----------->
+ *                      V                                 <-backoff->
  * time  |--------------|-------------------|-------------|----------->
- *       0              1s                  1.001408s     1.001442s
- *                      ^                   ^             ^
- *                      start TX            finish TX     start TX
- *                      frame 1             frame 1       frame 2
+ *       0              1s                  1.001408s     1.001442s  |1.001451s
+ *                      ^                   ^                        ^
+ *                      start TX            finish TX                start TX
+ *                      frame 1             frame 1                  frame 2
  *                      ^
  *                      frame 2
- *                      backoff = 0
+ *                      backoff = 1 slot
  *
- * The buggy behavior was that frame 2 experiences a virtual collision and re-selects the
- * backoff again. As a result, the _actual_ backoff experience by frame 2 is less likely to be 0
- * since that would require two successions of 0 backoff (one that generates the virtual collision and
- * one after the virtual collision).
+ * The buggy behavior observed in prior versions was shown by picking
+ * RngSeedManager::SetRun (17);
+ * which generated a 0 slot backoff for frame 2.  Then, frame 2 
+ * experiences a virtual collision and re-selects the backoff again. 
+ * As a result, the _actual_ backoff experience by frame 2 is less likely 
+ * to be 0 since that would require two successions of 0 backoff (one that 
+ * generates the virtual collision and one after the virtual collision).
  *
- * See \bugid{555}
+ * See \bugid{555} for past behavior.  
  */
 
-class Bug555TestCase : public TestCase
+class DcfImmediateAccessBroadcastTestCase : public TestCase
 {
 public:
-  Bug555TestCase ();
+  DcfImmediateAccessBroadcastTestCase ();
 
   virtual void DoRun (void);
 
@@ -380,13 +399,13 @@
   void NotifyPhyTxBegin (Ptr<const Packet> p);
 };
 
-Bug555TestCase::Bug555TestCase ()
-  : TestCase ("Test case for Bug 555")
+DcfImmediateAccessBroadcastTestCase::DcfImmediateAccessBroadcastTestCase ()
+  : TestCase ("Test case for DCF immediate access with broadcast frames")
 {
 }
 
 void
-Bug555TestCase::NotifyPhyTxBegin (Ptr<const Packet> p)
+DcfImmediateAccessBroadcastTestCase::NotifyPhyTxBegin (Ptr<const Packet> p)
 {
   if (m_numSentPackets == 0)
     {
@@ -401,27 +420,23 @@
 }
 
 void
-Bug555TestCase::SendOnePacket (Ptr<WifiNetDevice> dev)
+DcfImmediateAccessBroadcastTestCase::SendOnePacket (Ptr<WifiNetDevice> dev)
 {
   Ptr<Packet> p = Create<Packet> (1000);
   dev->Send (p, dev->GetBroadcast (), 1);
 }
 
 void
-Bug555TestCase::DoRun (void)
+DcfImmediateAccessBroadcastTestCase::DoRun (void)
 {
   m_mac.SetTypeId ("ns3::AdhocWifiMac");
   m_propDelay.SetTypeId ("ns3::ConstantSpeedPropagationDelayModel");
   m_manager.SetTypeId ("ns3::ConstantRateWifiManager");
 
   //Assign a seed and run number, and later fix the assignment of streams to
-  //WiFi random variables, so that the first backoff used is zero slots
+  //WiFi random variables, so that the first backoff used is one slot
   RngSeedManager::SetSeed (1);
-  RngSeedManager::SetRun (17);
-
-  //Disable the initial jitter of AP beacons (test case was written before
-  //beacon jitter was added)
-  Config::SetDefault ("ns3::ApWifiMac::EnableBeaconJitter", BooleanValue (false));
+  RngSeedManager::SetRun (40);  // a value of 17 will result in zero slots
 
   Ptr<YansWifiChannel> channel = CreateObject<YansWifiChannel> ();
   Ptr<PropagationDelayModel> propDelay = m_propDelay.Create<PropagationDelayModel> ();
@@ -448,7 +463,7 @@
   txPhy->SetMobility (txMobility);
   txPhy->ConfigureStandard (WIFI_PHY_STANDARD_80211a);
 
-  txPhy->TraceConnectWithoutContext ("PhyTxBegin", MakeCallback (&Bug555TestCase::NotifyPhyTxBegin, this));
+  txPhy->TraceConnectWithoutContext ("PhyTxBegin", MakeCallback (&DcfImmediateAccessBroadcastTestCase::NotifyPhyTxBegin, this));
 
   txMobility->SetPosition (Vector (0.0, 0.0, 0.0));
   txNode->AggregateObject (txMobility);
@@ -462,19 +477,20 @@
   m_secondTransmissionTime = Seconds (0.0);
   m_numSentPackets = 0;
 
-  Simulator::Schedule (Seconds (1.0), &Bug555TestCase::SendOnePacket, this, txDev);
-  Simulator::Schedule (Seconds (1.0), &Bug555TestCase::SendOnePacket, this, txDev);
+  Simulator::Schedule (Seconds (1.0), &DcfImmediateAccessBroadcastTestCase::SendOnePacket, this, txDev);
+  Simulator::Schedule (Seconds (1.0) + MicroSeconds (1), &DcfImmediateAccessBroadcastTestCase::SendOnePacket, this, txDev);
 
   Simulator::Stop (Seconds (2.0));
   Simulator::Run ();
   Simulator::Destroy ();
 
   //First packet has 1408 us of transmit time.   Slot time is 9 us.
-  //Backoff is 0 slots.  SIFS is 16 us.  AIFS is 2 slots = 18 us.
-  //Should send next packet at 1408 us + (0 * 9 us) + 16 us + 18 us
-  //1442 us after the first one.
-  uint32_t expectedWait1 = 1408 + (0 * 9) + 16 + 18;
-  Time expectedSecondTransmissionTime = MicroSeconds (expectedWait1) + Seconds (1.0);
+  //Backoff is 1 slots.  SIFS is 16 us.  DIFS is 2 slots = 18 us.
+  //Should send next packet at 1408 us + (1 * 9 us) + 16 us + (2 * 9) us
+  //1451 us after the first one.
+  uint32_t expectedWait1 = 1408 + (1 * 9) + 16 + (2 * 9);
+  Time expectedSecondTransmissionTime = MicroSeconds (expectedWait1) + MilliSeconds (1000);
+  NS_TEST_ASSERT_MSG_EQ (m_firstTransmissionTime, MilliSeconds (1000), "The first transmission time not correct!");
 
   NS_TEST_ASSERT_MSG_EQ (m_secondTransmissionTime, expectedSecondTransmissionTime, "The second transmission time not correct!");
 }
@@ -618,7 +634,464 @@
   NS_TEST_ASSERT_MSG_EQ (result, true, "packet reception unexpectedly stopped after adapting fragmentation threshold!");
 }
 
+class SetChannelFrequencyTest: public TestCase
+{
+public:
+  SetChannelFrequencyTest ();
+
+  virtual void DoRun (void);
+
+
+private:
+
+  Ptr<YansWifiPhy> GetYansWifiPhyPtr (const NetDeviceContainer &nc) const;
+
+};
+
+SetChannelFrequencyTest::SetChannelFrequencyTest ()
+  : TestCase ("Test case for setting WifiPhy channel and frequency")
+{
+}
+
+Ptr<YansWifiPhy>
+SetChannelFrequencyTest::GetYansWifiPhyPtr (const NetDeviceContainer &nc) const
+{
+  Ptr<WifiNetDevice> wnd = nc.Get (0)->GetObject<WifiNetDevice> ();
+  Ptr<WifiPhy> wp = wnd->GetPhy ();
+  return wp->GetObject<YansWifiPhy> ();
+}
+
+void
+SetChannelFrequencyTest::DoRun ()
+{
+  NodeContainer wifiStaNode;
+  wifiStaNode.Create (1);
+  NodeContainer wifiApNode;
+  wifiApNode.Create (1);
+
+  YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
+  YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
+  phy.SetChannel (channel.Create ());
+
+  // Configure and declare other generic components of this example
+  Ssid ssid;
+  ssid = Ssid ("wifi-phy-configuration");
+  WifiMacHelper macSta;
+  macSta.SetType ("ns3::StaWifiMac",
+                  "Ssid", SsidValue (ssid),
+                  "ActiveProbing", BooleanValue (false));
+  NetDeviceContainer staDevice;
+  Ptr<YansWifiPhy> phySta;
+
+  // Cases taken from src/wifi/examples/wifi-phy-configuration.cc example
+  {
+      // case 0
+      // Default configuration, without WifiHelper::SetStandard or WifiHelper
+      phySta = CreateObject<YansWifiPhy> ();
+      // The default results in an invalid configuration of channel 0,
+      // width 20, and frequency 0 MHz
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 0, "default configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 20, "default configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 0, "default configuration");
+  }
+  {
+      // case 1
+      WifiHelper wifi;
+      // By default, WifiHelper will use WIFI_PHY_STANDARD_80211a
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // We expect channel 36, width 20, frequency 5180
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 36, "default configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 20, "default configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 5180, "default configuration");
+  }
+  {
+      // case 2
+      WifiHelper wifi;
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // We expect channel 1, width 22, frequency 2412
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 1, "802.11b configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 22, "802.11b configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 2412, "802.11b configuration");
+  }
+  {
+      // case 3
+      WifiHelper wifi;
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211g);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // We expect channel 1, width 20, frequency 2412
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 1, "802.11g configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 20, "802.11g configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 2412, "802.11g configuration");
+  }
+  {
+      // case 4
+      WifiHelper wifi;
+      wifi.SetRemoteStationManager ("ns3::IdealWifiManager");
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 36, "802.11n-5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 20, "802.11n-5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 5180, "802.11n-5GHz configuration");
+  }
+  {
+      // case 5
+      WifiHelper wifi;
+      wifi.SetRemoteStationManager ("ns3::IdealWifiManager");
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_2_4GHZ);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 1, "802.11n-2.4GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 20, "802.11n-2.4GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 2412, "802.11n-2.4GHz configuration");
+  }
+  {
+      // case 6
+      WifiHelper wifi;
+      wifi.SetRemoteStationManager ("ns3::IdealWifiManager");
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211ac);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 42, "802.11ac configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 80, "802.11ac configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 5210, "802.11ac configuration");
+  }
+  {
+      // case 7
+      WifiHelper wifi;
+      wifi.SetRemoteStationManager ("ns3::IdealWifiManager");
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211_10MHZ);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 172, "802.11 10Mhz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 10, "802.11 10Mhz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 5860, "802.11 10Mhz configuration");
+  }
+  {
+      // case 8
+      WifiHelper wifi;
+      wifi.SetRemoteStationManager ("ns3::IdealWifiManager");
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211_5MHZ);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 0, "802.11 5Mhz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 5, "802.11 5Mhz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 5860, "802.11 5Mhz configuration");
+  }
+  {
+      // case 9
+      WifiHelper wifi;
+      wifi.SetRemoteStationManager ("ns3::IdealWifiManager");
+      wifi.SetStandard (WIFI_PHY_STANDARD_holland);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // We expect channel 36, width 20, frequency 5180
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 36, "802.11 5Mhz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 20, "802.11 5Mhz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 5180, "802.11 5Mhz configuration");
+  }
+  {
+      // case 10
+      WifiHelper wifi;
+      wifi.SetRemoteStationManager ("ns3::IdealWifiManager");
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      phy.Set ("ChannelNumber", UintegerValue(44));
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 44, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 20, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 5220, "802.11 5GHz configuration");
+  }
+  {
+      // case 11
+      WifiHelper wifi;
+      wifi.SetRemoteStationManager ("ns3::IdealWifiManager");
+      phy.Set ("ChannelNumber", UintegerValue(44));
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // Post-install reconfiguration to channel number 40
+      Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelNumber", UintegerValue(40));
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 40, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 20, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 5200, "802.11 5GHz configuration");
+  }
+  {
+      // case 12
+      WifiHelper wifi;
+      wifi.SetRemoteStationManager ("ns3::IdealWifiManager");
+      phy.Set ("ChannelNumber", UintegerValue (44));
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // Post-install reconfiguration to channel width 40 MHz
+      Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelWidth", UintegerValue(40));
+      // Although channel 44 is configured originally for 20 MHz, we
+      // allow it to be used for 40 MHz here
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 44, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 40, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 5220, "802.11 5GHz configuration");
+  }
+      // modify cases 13 and 14 to avoid Config::SetDefault ()
+  {
+      // case 13
+      WifiHelper wifi;
+      wifi.SetRemoteStationManager ("ns3::IdealWifiManager");
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      phySta->SetAttribute ("ChannelNumber", UintegerValue (44));
+      // Post-install reconfiguration to channel width 40 MHz
+      Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelWidth", UintegerValue(40));
+      // Although channel 44 is configured originally for 20 MHz, we
+      // allow it to be used for 40 MHz here
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 44, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 40, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 5220, "802.11 5GHz configuration");
+  }
+  {
+      // case 14
+      WifiHelper wifi;
+      wifi.SetRemoteStationManager ("ns3::IdealWifiManager");
+      // Test that setting Frequency to a non-standard value will zero the
+      // channel number
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      phySta->SetAttribute ("Frequency", UintegerValue (5281));
+      // We expect channel number to be zero since frequency doesn't match
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 0, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 20, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 5281, "802.11 5GHz configuration");
+  }
+  {
+      // case 15:
+      WifiHelper wifi;
+      wifi.SetRemoteStationManager ("ns3::IdealWifiManager");
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // Test that setting Frequency to a standard value will set the
+      // channel number correctly
+      phySta->SetAttribute ("Frequency", UintegerValue (5500));
+      // We expect channel number to be 100 due to frequency 5500
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 100, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 20, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 5500, "802.11 5GHz configuration");
+  }
+  {
+      // case 16:
+      WifiHelper wifi;
+      wifi.SetRemoteStationManager ("ns3::IdealWifiManager");
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get (0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      // This case will error exit due to invalid channel number unless
+      // we provide the DefineChannelNumber() below
+      phySta->DefineChannelNumber (99, WIFI_PHY_STANDARD_80211n_5GHZ, 5185, 40);
+      phySta->SetAttribute ("ChannelNumber", UintegerValue (99));
+  }
+  {
+      // case 17:
+      WifiHelper wifi;
+      wifi.SetRemoteStationManager ("ns3::IdealWifiManager");
+      // Test how channel number behaves when frequency is non-standard
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      phySta->SetAttribute ("Frequency", UintegerValue (5181));
+      // We expect channel number to be 0 due to unknown center frequency 5181
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 0, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 20, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 5181, "802.11 5GHz configuration");
+      phySta->SetAttribute ("Frequency", UintegerValue (5180));
+      // We expect channel number to be 36 due to known center frequency 5180
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 36, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 20, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 5180, "802.11 5GHz configuration");
+      phySta->SetAttribute ("Frequency", UintegerValue (5179));
+      // We expect channel number to be 0 due to unknown center frequency 5179
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 0, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 20, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 5179, "802.11 5GHz configuration");
+      phySta->SetAttribute ("ChannelNumber", UintegerValue (36));
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 36, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 20, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 5180, "802.11 5GHz configuration");
+  }
+  {
+      // case 18:
+      WifiHelper wifi;
+      wifi.SetRemoteStationManager ("ns3::IdealWifiManager");
+      // Set both channel and frequency to consistent values
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      staDevice = wifi.Install (phy, macSta, wifiStaNode.Get(0));
+      phySta = GetYansWifiPhyPtr (staDevice);
+      phySta->SetAttribute ("Frequency", UintegerValue (5200));
+      phySta->SetAttribute ("ChannelNumber", UintegerValue (40));
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 40, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 20, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 5200, "802.11 5GHz configuration");
+      // Set both channel and frequency to inconsistent values
+      phySta->SetAttribute ("Frequency", UintegerValue (5200));
+      phySta->SetAttribute ("ChannelNumber", UintegerValue (36));
+      // We expect channel number to be 36
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 36, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 20, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 5180, "802.11 5GHz configuration");
+      phySta->SetAttribute ("ChannelNumber", UintegerValue (36));
+      phySta->SetAttribute ("Frequency", UintegerValue (5200));
+      // We expect channel number to be 40
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 40, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 20, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 5200, "802.11 5GHz configuration");
+      phySta->SetAttribute ("Frequency", UintegerValue (5179));
+      phySta->SetAttribute ("ChannelNumber", UintegerValue (36));
+      // We expect channel number to be 36
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 36, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 20, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 5180, "802.11 5GHz configuration");
+      phySta->SetAttribute ("ChannelNumber", UintegerValue (36));
+      phySta->SetAttribute ("Frequency", UintegerValue (5179));
+      // We expect channel number to be 0
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelNumber (), 0, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetChannelWidth (), 20, "802.11 5GHz configuration");
+      NS_TEST_ASSERT_MSG_EQ (phySta->GetFrequency (), 5179, "802.11 5GHz configuration");
+  }
+
+Simulator::Destroy ();
+
+}
+
 //-----------------------------------------------------------------------------
+/**
+ * Make sure that when virtual collision occurs the wifi remote station manager 
+ * is triggered and the retry counter is increased.
+ *
+ * See \bugid{2222}
+ */
+
+class Bug2222TestCase : public TestCase
+{
+public:
+  Bug2222TestCase ();
+  virtual ~Bug2222TestCase ();
+
+  virtual void DoRun (void);
+
+
+private:
+  uint32_t m_countInternalCollisions;
+
+  void PopulateArpCache ();
+  void TxDataFailedTrace (std::string context, Mac48Address adr);
+};
+
+Bug2222TestCase::Bug2222TestCase ()
+  : TestCase ("Test case for Bug 2222"),
+    m_countInternalCollisions (0)
+{
+}
+
+Bug2222TestCase::~Bug2222TestCase ()
+{
+}
+
+void
+Bug2222TestCase::TxDataFailedTrace (std::string context, Mac48Address adr)
+{
+  //Indicate the long retry counter has been increased in the wifi remote station manager
+  m_countInternalCollisions++;
+}
+
+void
+Bug2222TestCase::DoRun (void)
+{
+  m_countInternalCollisions = 0;
+    
+  //Generate same backoff for AC_VI and AC_VO
+  //The below combination will work
+  RngSeedManager::SetSeed (1);
+  RngSeedManager::SetRun (2);
+  int64_t streamNumber = 100;
+
+  NodeContainer wifiNodes;
+  wifiNodes.Create (2);
+
+  YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
+  YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
+  phy.SetChannel (channel.Create ());
+
+  WifiHelper wifi;
+  WifiMacHelper mac;
+  Ssid ssid = Ssid ("ns-3-ssid");
+  mac.SetType ("ns3::AdhocWifiMac",
+               "QosSupported", BooleanValue (true));
+
+  NetDeviceContainer wifiDevices;
+  wifiDevices = wifi.Install (phy, mac, wifiNodes);
+
+  // Assign fixed streams to random variables in use
+  wifi.AssignStreams (wifiDevices, streamNumber);
+
+  MobilityHelper mobility;
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+
+  positionAlloc->Add (Vector (0.0, 0.0, 0.0));
+  positionAlloc->Add (Vector (10.0, 0.0, 0.0));
+  mobility.SetPositionAllocator (positionAlloc);
+
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.Install (wifiNodes);
+
+  Ptr<WifiNetDevice> device1 = DynamicCast<WifiNetDevice> (wifiDevices.Get (0));
+  Ptr<WifiNetDevice> device2 = DynamicCast<WifiNetDevice> (wifiDevices.Get (1));
+
+  PacketSocketAddress socket;
+  socket.SetSingleDevice (device1->GetIfIndex ());
+  socket.SetPhysicalAddress (device2->GetAddress ());
+  socket.SetProtocol (1);
+
+  PacketSocketHelper packetSocket;
+  packetSocket.Install (wifiNodes);
+
+  Ptr<PacketSocketClient> clientLowPriority = CreateObject<PacketSocketClient> ();
+  clientLowPriority->SetAttribute ("PacketSize", UintegerValue (1460));
+  clientLowPriority->SetAttribute ("MaxPackets", UintegerValue (1));
+  clientLowPriority->SetAttribute ("Priority", UintegerValue (4)); //AC_VI
+  clientLowPriority->SetRemote (socket);
+  wifiNodes.Get(0)->AddApplication (clientLowPriority);
+  clientLowPriority->SetStartTime (Seconds (1.0));
+  clientLowPriority->SetStopTime (Seconds (2.0));
+  
+  Ptr<PacketSocketClient> clientHighPriority = CreateObject<PacketSocketClient> ();
+  clientHighPriority->SetAttribute ("PacketSize", UintegerValue (1460));
+  clientHighPriority->SetAttribute ("MaxPackets", UintegerValue (1));
+  clientHighPriority->SetAttribute ("Priority", UintegerValue (6)); //AC_VO
+  clientHighPriority->SetRemote (socket);
+  wifiNodes.Get(0)->AddApplication (clientHighPriority);
+  clientHighPriority->SetStartTime (Seconds (1.0));
+  clientHighPriority->SetStopTime (Seconds (2.0));
+
+  Ptr<PacketSocketServer> server = CreateObject<PacketSocketServer> ();
+  server->SetLocal (socket);
+  wifiNodes.Get(1)->AddApplication (server);
+  server->SetStartTime (Seconds (1.0));
+  server->SetStopTime (Seconds (2.0));
+
+  Config::Connect ("/NodeList/*/DeviceList/*/RemoteStationManager/MacTxDataFailed", MakeCallback (&Bug2222TestCase::TxDataFailedTrace, this));
+
+  Simulator::Stop (Seconds (2.0));
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+  NS_TEST_ASSERT_MSG_EQ (m_countInternalCollisions, 1, "unexpected number of internal collisions!");
+}
+
+//-----------------------------------------------------------------------------
+
 class WifiTestSuite : public TestSuite
 {
 public:
@@ -631,8 +1104,10 @@
   AddTestCase (new WifiTest, TestCase::QUICK);
   AddTestCase (new QosUtilsIsOldPacketTest, TestCase::QUICK);
   AddTestCase (new InterferenceHelperSequenceTest, TestCase::QUICK); //Bug 991
-  AddTestCase (new Bug555TestCase, TestCase::QUICK); //Bug 555
+  AddTestCase (new DcfImmediateAccessBroadcastTestCase, TestCase::QUICK);
   AddTestCase (new Bug730TestCase, TestCase::QUICK); //Bug 730
+  AddTestCase (new SetChannelFrequencyTest, TestCase::QUICK);
+  AddTestCase (new Bug2222TestCase, TestCase::QUICK); //Bug 2222
 }
 
 static WifiTestSuite g_wifiTestSuite;
diff -Naur ns-3.25/src/wifi/wscript ns-3.26/src/wifi/wscript
--- ns-3.25/src/wifi/wscript	2016-10-03 20:57:08.556245233 -0700
+++ ns-3.26/src/wifi/wscript	2016-10-03 19:49:01.851386133 -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', 'propagation', 'energy'])
+    obj = bld.create_ns3_module('wifi', ['network', 'propagation', 'energy', 'spectrum', 'antenna', 'mobility'])
     obj.source = [
         'model/wifi-information-element.cc',
         'model/wifi-information-element-vector.cc',
@@ -17,6 +17,10 @@
         'model/interference-helper.cc',
         'model/yans-wifi-phy.cc',
         'model/yans-wifi-channel.cc',
+        'model/spectrum-wifi-phy.cc',
+        'model/wifi-phy-tag.cc',
+        'model/wifi-spectrum-phy-interface.cc',
+        'model/wifi-spectrum-signal-parameters.cc',
         'model/wifi-mac-header.cc',
         'model/wifi-mac-trailer.cc',
         'model/mac-low.cc',
@@ -48,7 +52,6 @@
         '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',
         'model/msdu-aggregator.cc',
@@ -75,12 +78,15 @@
         'model/vht-capabilities.cc',
         'model/erp-information.cc',
         'model/ht-operations.cc',
+        'model/dsss-parameter-set.cc',
+        'model/edca-parameter-set.cc',
         'helper/wifi-radio-energy-model-helper.cc',
         'helper/vht-wifi-mac-helper.cc',
         'helper/ht-wifi-mac-helper.cc',
         'helper/athstats-helper.cc',
         'helper/wifi-helper.cc',
         'helper/yans-wifi-helper.cc',
+        'helper/spectrum-wifi-helper.cc',
         'helper/nqos-wifi-mac-helper.cc',
         'helper/qos-wifi-mac-helper.cc',
         'helper/wifi-mac-helper.cc',
@@ -93,6 +99,7 @@
         'test/tx-duration-test.cc',
         'test/power-rate-adaptation-test.cc',
         'test/wifi-test.cc',
+        'test/spectrum-wifi-phy-test.cc',
         'test/wifi-aggregation-test.cc',
         'test/wifi-error-rate-models-test.cc',
         ]
@@ -109,8 +116,12 @@
         'model/wifi-preamble.h',
         'model/wifi-phy-standard.h',
         'model/yans-wifi-phy.h',
+        'model/spectrum-wifi-phy.h',
+        'model/wifi-phy-tag.h',
         'model/yans-wifi-channel.h',
         'model/wifi-phy.h',
+        'model/wifi-spectrum-phy-interface.h',
+        'model/wifi-spectrum-signal-parameters.h',
         'model/interference-helper.h',
         'model/wifi-remote-station-manager.h',
         'model/ap-wifi-mac.h',
@@ -144,7 +155,6 @@
         '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',
         'model/capability-information.h',
@@ -172,12 +182,15 @@
         'model/vht-capabilities.h',
         'model/erp-information.h',
         'model/ht-operations.h',
+        'model/dsss-parameter-set.h',
+        'model/edca-parameter-set.h',
         'helper/wifi-radio-energy-model-helper.h',
         'helper/vht-wifi-mac-helper.h',
         'helper/ht-wifi-mac-helper.h',
         'helper/athstats-helper.h',
         'helper/wifi-helper.h',
         'helper/yans-wifi-helper.h',
+        'helper/spectrum-wifi-helper.h',
         'helper/nqos-wifi-mac-helper.h',
         'helper/qos-wifi-mac-helper.h',
         'helper/wifi-mac-helper.h',
diff -Naur ns-3.25/src/wimax/bindings/modulegen__gcc_ILP32.py ns-3.26/src/wimax/bindings/modulegen__gcc_ILP32.py
--- ns-3.25/src/wimax/bindings/modulegen__gcc_ILP32.py	2016-10-03 20:57:08.564245171 -0700
+++ ns-3.26/src/wimax/bindings/modulegen__gcc_ILP32.py	2016-10-03 19:49:01.860386066 -0700
@@ -138,8 +138,8 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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]
@@ -168,6 +168,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -182,6 +184,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -416,6 +420,10 @@
     module.add_class('DsaRsp', parent=root_module['ns3::Header'])
     ## 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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -492,6 +500,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -787,6 +797,8 @@
     register_Ns3DsaReq_methods(root_module, root_module['ns3::DsaReq'])
     register_Ns3DsaRsp_methods(root_module, root_module['ns3::DsaRsp'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -1169,6 +1181,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -3224,10 +3241,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -4395,23 +4412,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -4526,6 +4543,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -4547,10 +4569,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -4572,6 +4594,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -4587,6 +4613,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3U16TlvValue_methods(root_module, cls):
@@ -5307,6 +5337,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -9436,6 +9471,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -10387,16 +10486,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -10424,35 +10538,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -10940,6 +11049,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/wimax/bindings/modulegen__gcc_LP64.py ns-3.26/src/wimax/bindings/modulegen__gcc_LP64.py
--- ns-3.25/src/wimax/bindings/modulegen__gcc_LP64.py	2016-10-03 20:57:08.572245109 -0700
+++ ns-3.26/src/wimax/bindings/modulegen__gcc_LP64.py	2016-10-03 19:49:01.867386013 -0700
@@ -138,8 +138,8 @@
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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::PcapHelper::DataLinkType [enumeration]
+    module.add_enum('DataLinkType', ['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]
@@ -168,6 +168,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## simulator.h (module 'core'): ns3::Simulator [enumeration]
+    module.add_enum('', ['NO_CONTEXT'], outer_class=root_module['ns3::Simulator'], 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]
@@ -182,6 +184,8 @@
     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::SupportLevel [enumeration]
+    module.add_enum('SupportLevel', ['SUPPORTED', 'DEPRECATED', 'OBSOLETE'], 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]
@@ -416,6 +420,10 @@
     module.add_class('DsaRsp', parent=root_module['ns3::Header'])
     ## 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::EmptyAttributeAccessor [class]
+    module.add_class('EmptyAttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::AttributeAccessor'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker [class]
+    module.add_class('EmptyAttributeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## 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]
@@ -492,6 +500,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem::Uint8Values [enumeration]
+    module.add_enum('Uint8Values', ['IP_DSFIELD'], outer_class=root_module['ns3::QueueItem'], import_from_module='ns.network')
     ## 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]
@@ -787,6 +797,8 @@
     register_Ns3DsaReq_methods(root_module, root_module['ns3::DsaReq'])
     register_Ns3DsaRsp_methods(root_module, root_module['ns3::DsaRsp'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeAccessor_methods(root_module, root_module['ns3::EmptyAttributeAccessor'])
+    register_Ns3EmptyAttributeChecker_methods(root_module, root_module['ns3::EmptyAttributeChecker'])
     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'])
@@ -1169,6 +1181,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator const &', 'o')], 
                    is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetRemainingSize() const [member function]
+    cls.add_method('GetRemainingSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -3224,10 +3241,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, ns3::PcapHelper::DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('ns3::PcapHelper::DataLinkType', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -4395,23 +4412,23 @@
     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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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]
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [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'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## 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]
+    ## 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, ns3::TypeId::SupportLevel supportLevel=::ns3::TypeId::SUPPORTED, std::string const & supportMsg="") [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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback'), param('ns3::TypeId::SupportLevel', 'supportLevel', default_value='::ns3::TypeId::SUPPORTED'), param('std::string const &', 'supportMsg', default_value='""')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -4526,6 +4543,11 @@
                    'ns3::Ptr< ns3::TraceSourceAccessor const >', 
                    [param('std::string', 'name')], 
                    is_const=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name, ns3::TypeId::TraceSourceInformation * info) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name'), param('ns3::TypeId::TraceSourceInformation *', 'info')], 
+                   is_const=True)
     ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
     cls.add_method('MustHideFromDocumentation', 
                    'bool', 
@@ -4547,10 +4569,10 @@
     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]
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t uid) [member function]
     cls.add_method('SetUid', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'uid')])
     return
 
 def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
@@ -4572,6 +4594,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
@@ -4587,6 +4613,10 @@
     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)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportLevel [variable]
+    cls.add_instance_attribute('supportLevel', 'ns3::TypeId::SupportLevel', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::supportMsg [variable]
+    cls.add_instance_attribute('supportMsg', 'std::string', is_const=False)
     return
 
 def register_Ns3U16TlvValue_methods(root_module, cls):
@@ -5307,6 +5337,11 @@
     cls.add_method('Initialize', 
                    'void', 
                    [])
+    ## object.h (module 'core'): bool ns3::Object::IsInitialized() const [member function]
+    cls.add_method('IsInitialized', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
     cls.add_constructor([param('ns3::Object const &', 'o')], 
                         visibility='protected')
@@ -9436,6 +9471,70 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3EmptyAttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor(ns3::EmptyAttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeAccessor::EmptyAttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object'), param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EmptyAttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker(ns3::EmptyAttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EmptyAttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeChecker::EmptyAttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::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_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, 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')])
@@ -10387,16 +10486,31 @@
     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'): ns3::Ptr<ns3::QueueLimits> ns3::NetDeviceQueue::GetQueueLimits() [member function]
+    cls.add_method('GetQueueLimits', 
+                   'ns3::Ptr< ns3::QueueLimits >', 
+                   [])
     ## 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::NotifyQueuedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyQueuedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::NotifyTransmittedBytes(uint32_t bytes) [member function]
+    cls.add_method('NotifyTransmittedBytes', 
+                   'void', 
+                   [param('uint32_t', 'bytes')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::ResetQueueLimits() [member function]
+    cls.add_method('ResetQueueLimits', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetQueueLimits(ns3::Ptr<ns3::QueueLimits> ql) [member function]
+    cls.add_method('SetQueueLimits', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueLimits >', 'ql')])
     ## 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', 
@@ -10424,35 +10538,30 @@
     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', 
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::CreateTxQueues() [member function]
+    cls.add_method('CreateTxQueues', 
+                   'void', 
+                   [])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetNTxQueues() const [member function]
+    cls.add_method('GetNTxQueues', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::NetDeviceQueueInterface::GetSelectQueueCallback() const [member function]
+    cls.add_method('GetSelectQueueCallback', 
+                   'ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
                    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', 
@@ -10940,6 +11049,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::QueueItem::GetUint8Value(ns3::QueueItem::Uint8Values field, uint8_t & value) const [member function]
+    cls.add_method('GetUint8Value', 
+                   'bool', 
+                   [param('ns3::QueueItem::Uint8Values', 'field'), param('uint8_t &', 'value')], 
+                   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', 
diff -Naur ns-3.25/src/wimax/wscript ns-3.26/src/wimax/wscript
--- ns-3.25/src/wimax/wscript	2016-10-03 20:57:08.615244775 -0700
+++ ns-3.26/src/wimax/wscript	2016-10-03 19:49:01.911385686 -0700
@@ -38,7 +38,7 @@
             'model/bs-link-manager.cc',
             'model/bandwidth-manager.cc',
             'model/crc8.cc',
-            'model/ul-job.cc'	,	    
+            'model/ul-job.cc',
             'model/snr-to-block-error-rate-record.cc',
             'model/snr-to-block-error-rate-manager.cc',
             'model/simple-ofdm-send-param.cc',
@@ -50,7 +50,8 @@
             'model/cs-parameters.cc',
             'model/wimax-mac-to-mac-header.cc',
             'helper/wimax-helper.cc',
-		            ]
+        ]
+
 
     obj_test = bld.create_ns3_module_test_library('wimax')
     obj_test.source = [
@@ -61,8 +62,8 @@
             'test/phy-test.cc',
             'test/qos-test.cc',
             'test/wimax-fragmentation-test.cc',
-            ]
-		            
+        ]
+
     headers = bld(features='ns3header')
     headers.module = 'wimax'
     headers.source = [
@@ -110,7 +111,8 @@
             'model/bvec.h',
             'model/wimax-mac-to-mac-header.h',
             'helper/wimax-helper.h',
-		            ]
+        ]
+
 
     if bld.env['ENABLE_EXAMPLES']:
         bld.recurse('examples')
diff -Naur ns-3.25/src/wscript ns-3.26/src/wscript
--- ns-3.25/src/wscript	2016-10-03 20:57:08.617244760 -0700
+++ ns-3.26/src/wscript	2016-10-03 19:49:01.913385671 -0700
@@ -314,7 +314,7 @@
     # Remove these modules from the list of all modules.
     for not_built in bld.env['MODULES_NOT_BUILT']:
 
-        # XXX Becaue these modules are located in subdirectories of
+        # XXX Because these modules are located in subdirectories of
         # test, their names in the all_modules list include the extra
         # relative path "test/".  If these modules are moved into the
         # src directory, then this if block should be removed.
diff -Naur ns-3.25/test.py ns-3.26/test.py
--- ns-3.25/test.py	2016-10-03 20:57:08.620244736 -0700
+++ ns-3.26/test.py	2016-10-03 19:49:01.915385656 -0700
@@ -1262,6 +1262,10 @@
     # We can also use the --constrain option to provide an ordering of test 
     # execution quite easily.
     #
+
+    # Flag indicating a specific suite was explicitly requested
+    single_suite = False
+    
     if len(options.suite):
         # See if this is a valid test suite.
         path_cmd = os.path.join("utils", test_runner_name + " --print-test-name-list")
@@ -1270,6 +1274,7 @@
             suites = suites.decode()
         if options.suite in suites.split('\n'):
             suites = options.suite + "\n"
+            single_suite = True
         else:
             print('The test suite was not run because an unknown test suite name was requested.', file=sys.stderr)
             sys.exit(2)
@@ -1289,7 +1294,7 @@
     # indicated she wants to run or a list of test suites provided by
     # the test-runner possibly according to user provided constraints.
     # We go through the trouble of setting up the parallel execution 
-    # even in the case of a single suite to avoid having two process the
+    # even in the case of a single suite to avoid having to process the
     # results in two different places.
     #
     if isinstance(suites, bytes):
@@ -1299,8 +1304,9 @@
     #
     # Performance tests should only be run when they are requested,
     # i.e. they are not run by default in test.py.
-    #
-    if options.constrain != 'performance':
+    # If a specific suite was requested we run it, even if
+    # it is a performance test.
+    if not single_suite and options.constrain != 'performance':
 
         # Get a list of all of the performance tests.
         path_cmd = os.path.join("utils", test_runner_name + " --print-test-name-list --test-type=%s" % "performance")
diff -Naur ns-3.25/VERSION ns-3.26/VERSION
--- ns-3.25/VERSION	2016-10-03 20:57:08.167248260 -0700
+++ ns-3.26/VERSION	2016-10-03 19:49:01.478388912 -0700
@@ -1 +1 @@
-3.25
+3.26
diff -Naur ns-3.25/wscript ns-3.26/wscript
--- ns-3.25/wscript	2016-10-03 20:57:08.644244550 -0700
+++ ns-3.26/wscript	2016-10-03 19:49:01.940385470 -0700
@@ -34,7 +34,7 @@
 
 # Bug 1868:  be conservative about -Wstrict-overflow for optimized builds
 # on older compilers; it can generate spurious warnings.  
-cc_version_warn_strict_overflow = ('4', '8', '2')
+gcc_version_warn_strict_overflow = ('4', '8', '2')
 
 # Bug 2181:  clang warnings about unused local typedefs and potentially
 # evaluated expressions affecting darwin clang/LLVM version 7.0.0 (Xcode 7)
@@ -55,11 +55,11 @@
     sys.path.pop(0)
 
 cflags.profiles = {
-	# profile name: [optimization_level, warnings_level, debug_level]
-	'debug':     [0, 2, 3],
-	'optimized': [3, 2, 1],
-	'release':   [3, 2, 0],
-	}
+    # profile name: [optimization_level, warnings_level, debug_level]
+    'debug':     [0, 2, 3],
+    'optimized': [3, 2, 1],
+    'release':   [3, 2, 0],
+    }
 cflags.default_profile = 'debug'
 
 Configure.autoconfig = 0
@@ -146,6 +146,11 @@
     opt.load('cflags')
     opt.load('gnu_dirs')
 
+    opt.add_option('--check-config',
+                   help=('Print the current configuration.'),
+                   action="store_true", default=False,
+                   dest="check_config")
+    
     opt.add_option('--cwd',
                    help=('Set the working directory for a program.'),
                    action="store", type="string", default=None,
@@ -232,6 +237,10 @@
                          'but do not wait for ns-3 to finish the full build.'),
                    action="store_true", default=False,
                    dest='doxygen_no_build')
+    opt.add_option('--enable-des-metrics',
+                   help=('Log all events in a json file with the name of the executable (which must call CommandLine::Parse(argc, argv)'),
+                   action="store_true", default=False,
+                   dest='enable_desmetrics')
 
     # options provided in subdirectories
     opt.recurse('src')
@@ -304,6 +313,29 @@
     except conf.errors.ConfigurationError:
         return None
 
+# Write a summary of optional features status
+def print_config(env, phase='configure'):
+    if phase == 'configure':
+        profile = get_build_profile(env)
+    else:
+        profile = get_build_profile()
+        
+    print("---- Summary of optional NS-3 features:")
+    print("%-30s: %s%s%s" % ("Build profile", Logs.colors('GREEN'),
+                             profile, Logs.colors('NORMAL')))
+    bld = wutils.bld
+    print("%-30s: %s%s%s" % ("Build directory", Logs.colors('GREEN'),
+                             Options.options.out, Logs.colors('NORMAL')))
+    
+    
+    for (name, caption, was_enabled, reason_not_enabled) in sorted(env['NS3_OPTIONAL_FEATURES'], key=lambda s : s[1]):
+        if was_enabled:
+            status = 'enabled'
+            color = 'GREEN'
+        else:
+            status = 'not enabled (%s)' % reason_not_enabled
+            color = 'RED'
+        print("%-30s: %s%s%s" % (caption, Logs.colors(color), status, Logs.colors('NORMAL')))
 
 def configure(conf):
     conf.load('relocation', tooldir=['waf-tools'])
@@ -363,8 +395,8 @@
             if conf.check_compilation_flag('-march=native'):
                 env.append_value('CXXFLAGS', '-march=native') 
             env.append_value('CXXFLAGS', '-fstrict-overflow')
-            if conf.env['CC_VERSION'] == cc_version_warn_strict_overflow:
-                env.append_value('CXXFLAGS', '-Wstrict-overflow=5')
+            if conf.env['CC_VERSION'] >= gcc_version_warn_strict_overflow:
+                env.append_value('CXXFLAGS', '-Wstrict-overflow=2')
 
         if sys.platform == 'win32':
             env.append_value("LINKFLAGS", "-Wl,--enable-runtime-pseudo-reloc")
@@ -413,6 +445,9 @@
                 conf.report_optional_feature("static", "Static build", False,
                                              "Link flag -Wl,--whole-archive,-Bstatic does not work")
 
+    # Enable C++-11 support
+    env.append_value('CXXFLAGS', '-std=c++11')
+
     # Set this so that the lists won't be printed at the end of this
     # configure command.
     conf.env['PRINT_BUILT_MODULES_AT_END'] = False
@@ -492,7 +527,7 @@
         else:
             why_not_tests = "defaults to disabled"
 
-    conf.report_optional_feature("ENABLE_TESTS", "Build tests", env['ENABLE_TESTS'], why_not_tests)
+    conf.report_optional_feature("ENABLE_TESTS", "Tests", env['ENABLE_TESTS'], why_not_tests)
 
     # Decide if examples will be built or not.
     if Options.options.enable_examples:
@@ -513,7 +548,7 @@
         else:
             why_not_examples = "defaults to disabled"
 
-    conf.report_optional_feature("ENABLE_EXAMPLES", "Build examples", env['ENABLE_EXAMPLES'], 
+    conf.report_optional_feature("ENABLE_EXAMPLES", "Examples", env['ENABLE_EXAMPLES'], 
                                  why_not_examples)
     try:
         for dir in os.listdir('examples'):
@@ -553,6 +588,13 @@
     conf.report_optional_feature("libgcrypt", "Gcrypt library",
                                  conf.env.HAVE_GCRYPT, "libgcrypt not found: you can use libgcrypt-config to find its location.")
 
+    why_not_desmetrics = "defaults to disabled"
+    if Options.options.enable_desmetrics:
+        conf.env['ENABLE_DES_METRICS'] = True
+        env.append_value('DEFINES', 'ENABLE_DES_METRICS')
+        why_not_desmetrics = "option --enable-des-metrics selected"
+    conf.report_optional_feature("DES Metrics", "DES Metrics event collection", conf.env['ENABLE_DES_METRICS'], why_not_desmetrics)
+
 
     # for compiling C code, copy over the CXX* flags
     conf.env.append_value('CCFLAGS', conf.env['CXXFLAGS'])
@@ -583,24 +625,8 @@
             value = shlex.split(os.environ[envvar])
             conf.env.append_value(confvar, value)
 
-    # Write a summary of optional features status
-    print("---- Summary of optional NS-3 features:")
-    print("%-30s: %s%s%s" % ("Build profile", Logs.colors('GREEN'),
-                             Options.options.build_profile, Logs.colors('NORMAL')))
-    bld = wutils.bld
-    print("%-30s: %s%s%s" % ("Build directory", Logs.colors('GREEN'),
-                             Options.options.out, Logs.colors('NORMAL')))
+    print_config(env)
     
-    
-    for (name, caption, was_enabled, reason_not_enabled) in conf.env['NS3_OPTIONAL_FEATURES']:
-        if was_enabled:
-            status = 'enabled'
-            color = 'GREEN'
-        else:
-            status = 'not enabled (%s)' % reason_not_enabled
-            color = 'RED'
-        print("%-30s: %s%s%s" % (caption, Logs.colors(color), status, Logs.colors('NORMAL')))
-
 
 class SuidBuild_task(Task.Task):
     """task that makes a binary Suid
@@ -744,12 +770,35 @@
             return obj
     raise KeyError(name)
 
+# Parse the waf lockfile generated by latest 'configure' operation
+def get_build_profile(env=None):
+    if env == None:
+        lockfile = os.environ.get('WAFLOCK', '.lock-waf_%s_build' % sys.platform)
+        profile = "not found"
+        with open(lockfile, "r") as f:
+            for line in f:
+                if line.startswith("options ="):
+                    key, val = line.split('=')
+                    arr = val.split(',')
+                    for x in arr:
+                        optkey,optval = x.split(':')
+                        if (optkey.lstrip() == '\'build_profile\''):
+                            profile = str(optval.lstrip()).replace("'","")
+    else:
+        profile = Options.options.build_profile
+    return profile
 
 def build(bld):
     env = bld.env
 
-    if Options.options.check_profile:
-        print("Build profile: %s" % Options.options.build_profile)
+    if Options.options.check_config:
+        print_config(env, 'build')
+    else:
+        if Options.options.check_profile:
+            profile = get_build_profile()
+            print("Build profile: %s" % profile)
+        
+    if Options.options.check_profile or Options.options.check_config:
         raise SystemExit(0)
         return
 
